Module core::intrinsics [−][src]
🔬 This is a nightly-only experimental API. (core_intrinsics
)
intrinsics are unlikely to ever be stabilized, instead they should be used through stabilized interfaces in the rest of the standard library
Expand description
编译器内联函数。
相应的定义在 compiler/rustc_codegen_llvm/src/intrinsic.rs
中。
相应的 const 实现在 compiler/rustc_mir/src/interpret/intrinsics.rs
中
常量内联函数
Note: 对内联函数常量的任何更改都应与语言团队讨论。 这包括常量稳定性的变化。
为了使内联函数在编译时可用,需要将实现从 https://github.com/rust-lang/miri/blob/master/src/shims/intrinsics.rs 复制到 compiler/rustc_mir/src/interpret/intrinsics.rs
并将 #[rustc_const_unstable(feature = "foo", issue = "01234")]
添加到内联函数。
如果应该从具有 rustc_const_stable
属性的 const fn
使用内联函数,则内联函数的属性也必须为 rustc_const_stable
。
如果没有 T-lang 咨询,则不应进行此类更改,因为它会将语言中的功能烘焙到没有编译器支持的情况下无法在用户代码中复制。
Volatiles
易失性内联函数提供旨在作用于 I/O 内存的操作,并保证编译器不会在其他易失性内联函数之间对它们进行重新排序。请参见 [volatile] 上的 LLVM 文档。
Atomics
原子内联函数对机器字提供常见的原子操作,并具有多种可能的存储顺序。它们遵循与 C++ 11 相同的语义。请参见 [atomics] 上的 LLVM 文档。
关于内存排序的快速回顾:
- 获取 - 获取锁的障碍。屏障之后将进行后续的读取和写入。
- 释放 - 释放锁的障碍物。之前的读取和写入发生在该屏障之前。
- 顺序一致 - 顺序一致的操作可保证按顺序进行。这是处理原子类型的标准模式,等效于 Java 的
volatile
。
Functions
abort⚠ | Experimental 中止进程的执行。 |
add_with_overflow⚠ | Experimental 执行检查的整数加法。 |
arith_offset⚠ | Experimental 计算与指针的偏移量 (可能会自动换行)。 |
assert_inhabited⚠ | Experimental 如果 |
assert_uninit_valid⚠ | Experimental 如果 |
assert_zero_valid⚠ | Experimental 如果 |
assume⚠ | Experimental 通知优化器条件始终为真。 如果条件为假,则行为是不确定的。 |
atomic_and⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_and_acq⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_and_acqrel⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_and_rel⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_and_relaxed⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_cxchg⚠ | Experimental 如果当前值与 |
atomic_cxchg_acq⚠ | Experimental 如果当前值与 |
atomic_cxchg_acq_failrelaxed⚠ | Experimental 如果当前值与 |
atomic_cxchg_acqrel⚠ | Experimental 如果当前值与 |
atomic_cxchg_acqrel_failrelaxed⚠ | Experimental 如果当前值与 |
atomic_cxchg_failacq⚠ | Experimental 如果当前值与 |
atomic_cxchg_failrelaxed⚠ | Experimental 如果当前值与 |
atomic_cxchg_rel⚠ | Experimental 如果当前值与 |
atomic_cxchg_relaxed⚠ | Experimental 如果当前值与 |
atomic_cxchgweak⚠ | Experimental 如果当前值与 |
atomic_cxchgweak_acq⚠ | Experimental 如果当前值与 |
atomic_cxchgweak_acq_failrelaxed⚠ | Experimental 如果当前值与 |
atomic_cxchgweak_acqrel⚠ | Experimental 如果当前值与 |
atomic_cxchgweak_acqrel_failrelaxed⚠ | Experimental 如果当前值与 |
atomic_cxchgweak_failacq⚠ | Experimental 如果当前值与 |
atomic_cxchgweak_failrelaxed⚠ | Experimental 如果当前值与 |
atomic_cxchgweak_rel⚠ | Experimental 如果当前值与 |
atomic_cxchgweak_relaxed⚠ | Experimental 如果当前值与 |
atomic_fence⚠ | Experimental 原子 fence。 |
atomic_fence_acq⚠ | Experimental 原子 fence。 |
atomic_fence_acqrel⚠ | Experimental 原子 fence。 |
atomic_fence_rel⚠ | Experimental 原子 fence。 |
atomic_load⚠ | Experimental 加载指针的当前值。 |
atomic_load_acq⚠ | Experimental 加载指针的当前值。 |
atomic_load_relaxed⚠ | Experimental 加载指针的当前值。 |
atomic_load_unordered⚠ | Experimental |
atomic_max⚠ | Experimental 使用带符号的比较将当前值设为最大值。 |
atomic_max_acq⚠ | Experimental 使用带符号的比较将当前值设为最大值。 |
atomic_max_acqrel⚠ | Experimental 使用带符号的比较将当前值设为最大值。 |
atomic_max_rel⚠ | Experimental 使用带符号的比较将当前值设为最大值。 |
atomic_max_relaxed⚠ | Experimental 当前值的最大值。 |
atomic_min⚠ | Experimental 使用带符号的比较将当前值设为最小值。 |
atomic_min_acq⚠ | Experimental 使用带符号的比较将当前值设为最小值。 |
atomic_min_acqrel⚠ | Experimental 使用带符号的比较将当前值设为最小值。 |
atomic_min_rel⚠ | Experimental 使用带符号的比较将当前值设为最小值。 |
atomic_min_relaxed⚠ | Experimental 使用带符号的比较将当前值设为最小值。 |
atomic_nand⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_nand_acq⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_nand_acqrel⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_nand_rel⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_nand_relaxed⚠ | Experimental 对当前值按位与,返回前一个值。 |
atomic_or⚠ | Experimental 按位或具有当前值,返回前一个值。 |
atomic_or_acq⚠ | Experimental 按位或具有当前值,返回前一个值。 |
atomic_or_acqrel⚠ | Experimental 按位或具有当前值,返回前一个值。 |
atomic_or_rel⚠ | Experimental 按位或具有当前值,返回前一个值。 |
atomic_or_relaxed⚠ | Experimental 按位或具有当前值,返回前一个值。 |
atomic_singlethreadfence⚠ | Experimental 仅编译器的内存屏障。 |
atomic_singlethreadfence_acq⚠ | Experimental 仅编译器的内存屏障。 |
atomic_singlethreadfence_acqrel⚠ | Experimental 仅编译器的内存屏障。 |
atomic_singlethreadfence_rel⚠ | Experimental 仅编译器的内存屏障。 |
atomic_store⚠ | Experimental 将值存储在指定的存储位置。 |
atomic_store_rel⚠ | Experimental 将值存储在指定的存储位置。 |
atomic_store_relaxed⚠ | Experimental 将值存储在指定的存储位置。 |
atomic_store_unordered⚠ | Experimental |
atomic_umax⚠ | Experimental 使用无符号比较将当前值设为最大值。 |
atomic_umax_acq⚠ | Experimental 使用无符号比较将当前值设为最大值。 |
atomic_umax_acqrel⚠ | Experimental 使用无符号比较将当前值设为最大值。 |
atomic_umax_rel⚠ | Experimental 使用无符号比较将当前值设为最大值。 |
atomic_umax_relaxed⚠ | Experimental 使用无符号比较将当前值设为最大值。 |
atomic_umin⚠ | Experimental 使用无符号比较,使用当前值的最小值。 |
atomic_umin_acq⚠ | Experimental 使用无符号比较,使用当前值的最小值。 |
atomic_umin_acqrel⚠ | Experimental 使用无符号比较,使用当前值的最小值。 |
atomic_umin_rel⚠ | Experimental 使用无符号比较,使用当前值的最小值。 |
atomic_umin_relaxed⚠ | Experimental 使用无符号比较,使用当前值的最小值。 |
atomic_xadd⚠ | Experimental 加到当前值,返回前一个值。 |
atomic_xadd_acq⚠ | Experimental 加到当前值,返回前一个值。 |
atomic_xadd_acqrel⚠ | Experimental 加到当前值,返回前一个值。 |
atomic_xadd_rel⚠ | Experimental 加到当前值,返回前一个值。 |
atomic_xadd_relaxed⚠ | Experimental 加到当前值,返回前一个值。 |
atomic_xchg⚠ | Experimental 将值存储在指定的内存位置,并返回旧值。 |
atomic_xchg_acq⚠ | Experimental 将值存储在指定的内存位置,并返回旧值。 |
atomic_xchg_acqrel⚠ | Experimental 将值存储在指定的内存位置,并返回旧值。 |
atomic_xchg_rel⚠ | Experimental 将值存储在指定的内存位置,并返回旧值。 |
atomic_xchg_relaxed⚠ | Experimental 将值存储在指定的内存位置,并返回旧值。 |
atomic_xor⚠ | Experimental 与当前值按位异或,返回前一个值。 |
atomic_xor_acq⚠ | Experimental 与当前值按位异或,返回前一个值。 |
atomic_xor_acqrel⚠ | Experimental 与当前值按位异或,返回前一个值。 |
atomic_xor_rel⚠ | Experimental 与当前值按位异或,返回前一个值。 |
atomic_xor_relaxed⚠ | Experimental 与当前值按位异或,返回前一个值。 |
atomic_xsub⚠ | Experimental 从当前值减去,返回前一个值。 |
atomic_xsub_acq⚠ | Experimental 从当前值减去,返回前一个值。 |
atomic_xsub_acqrel⚠ | Experimental 从当前值减去,返回前一个值。 |
atomic_xsub_rel⚠ | Experimental 从当前值减去,返回前一个值。 |
atomic_xsub_relaxed⚠ | Experimental 从当前值减去,返回前一个值。 |
bitreverse⚠ | Experimental 反转整数类型 |
breakpoint⚠ | Experimental 执行一个断点陷阱,以供调试器检查。 |
bswap⚠ | Experimental 反转整数类型 |
caller_location⚠ | Experimental 获取对静态 |
ceilf32⚠ | Experimental 返回大于或等于 |
ceilf64⚠ | Experimental 返回大于或等于 |
const_allocate⚠ | Experimental 在编译时分配。不应在运行时调用。 |
copysignf32⚠ | Experimental 将 |
copysignf64⚠ | Experimental 将 |
cosf32⚠ | Experimental 返回 |
cosf64⚠ | Experimental 返回 |
ctlz⚠ | Experimental 返回整数类型 |
ctlz_nonzero⚠ | Experimental 类似于 |
ctpop⚠ | Experimental 返回整数类型 |
cttz⚠ | Experimental 返回整数类型 |
cttz_nonzero⚠ | Experimental 类似于 |
discriminant_value⚠ | Experimental 返回 ‘v’ 中成员的判别式的值;
如果 |
exact_div⚠ | Experimental 执行精确除法,从而导致 |
exp2f32⚠ | Experimental 返回 2 乘以 |
exp2f64⚠ | Experimental 返回 2 乘以 |
expf32⚠ | Experimental 返回 |
expf64⚠ | Experimental 返回 |
fabsf32⚠ | Experimental 返回 |
fabsf64⚠ | Experimental 返回 |
fadd_fast⚠ | Experimental 浮点数加法允许基于代数规则进行优化。 可以假设输入是有限的。 |
fdiv_fast⚠ | Experimental 浮点除法允许基于代数规则进行优化。 可以假设输入是有限的。 |
float_to_int_unchecked⚠ | Experimental 使用 LLVM 的 fptoui/fptosi 进行转换,对于越界的值可能会返回 undef (https://github.com/rust-lang/rust/issues/10184) |
floorf32⚠ | Experimental 返回小于或等于 |
floorf64⚠ | Experimental 返回小于或等于 |
fmaf32⚠ | Experimental 为 |
fmaf64⚠ | Experimental 为 |
fmul_fast⚠ | Experimental 浮点乘法允许基于代数规则进行优化。 可以假设输入是有限的。 |
forget⚠ | Experimental 将值移出作用域。而无需运行丢弃守卫。 |
frem_fast⚠ | Experimental 浮余数允许基于代数规则进行优化。 可以假设输入是有限的。 |
fsub_fast⚠ | Experimental 浮点减法允许基于代数规则进行优化。 可以假设输入是有限的。 |
likely⚠ | Experimental 提示编译器分支条件很可能是正确的。 返回传递给它的值。 |
log2f32⚠ | Experimental 返回 |
log2f64⚠ | Experimental 返回 |
log10f32⚠ | Experimental 返回 |
log10f64⚠ | Experimental 返回 |
logf32⚠ | Experimental 返回 |
logf64⚠ | Experimental 返回 |
maxnumf32⚠ | Experimental 返回两个 |
maxnumf64⚠ | Experimental 返回两个 |
min_align_of⚠ | Experimental 类型的最小对齐方式。 |
min_align_of_val⚠ | Experimental 参考值的所需对齐方式。 |
minnumf32⚠ | Experimental 返回两个 |
minnumf64⚠ | Experimental 返回两个 |
mul_with_overflow⚠ | Experimental 执行检查的整数乘法 |
nearbyintf32⚠ | Experimental 返回最接近 |
nearbyintf64⚠ | Experimental 返回最接近 |
needs_drop⚠ | Experimental 如果 |
nontemporal_store⚠ | Experimental 根据 LLVM 发出 |
offset⚠ | Experimental 计算与指针的偏移量。 |
powf32⚠ | Experimental 将 |
powf64⚠ | Experimental 将 |
powif32⚠ | Experimental 将 |
powif64⚠ | Experimental 将 |
pref_align_of⚠ | Experimental 类型的首选对齐方式。 |
prefetch_read_data⚠ | Experimental
|
prefetch_read_instruction⚠ | Experimental
|
prefetch_write_data⚠ | Experimental
|
prefetch_write_instruction⚠ | Experimental
|
ptr_guaranteed_eq⚠ | Experimental 有关详细信息,请参见 |
ptr_guaranteed_ne⚠ | Experimental 有关详细信息,请参见 |
ptr_offset_from⚠ | Experimental 有关详细信息,请参见 |
rintf32⚠ | Experimental 返回最接近 |
rintf64⚠ | Experimental 返回最接近 |
rotate_left⚠ | Experimental 向左旋转。 |
rotate_right⚠ | Experimental 向右旋转。 |
roundf32⚠ | Experimental 返回最接近 |
roundf64⚠ | Experimental 返回最接近 |
rustc_peek⚠ | Experimental 从函数附带的属性中获取其含义的魔术内联函数。 |
saturating_add⚠ | Experimental 计算 |
saturating_sub⚠ | Experimental 计算 |
sinf32⚠ | Experimental 返回 |
sinf64⚠ | Experimental 返回 |
size_of⚠ | Experimental 类型的大小 (以字节为单位)。 |
size_of_val⚠ | Experimental 引用值的大小 (以字节为单位)。 |
sqrtf32⚠ | Experimental 返回 |
sqrtf64⚠ | Experimental 返回 |
sub_with_overflow⚠ | Experimental 执行检查的整数减法 |
truncf32⚠ | Experimental 返回 |
truncf64⚠ | Experimental 返回 |
try⚠ | Experimental Rust 的 “try catch” 构造使用数据指针 |
type_id⚠ | Experimental 获取一个标识符,该标识符对于指定的类型是全局唯一的。 无论调用哪个 crate,此函数都将为类型返回相同的值。 |
type_name⚠ | Experimental 获取包含类型名称的静态字符串切片。 |
unaligned_volatile_load⚠ | Experimental 从 |
unaligned_volatile_store⚠ | Experimental 对 |
unchecked_add⚠ | Experimental 返回未经检查的加法运算的结果,导致 |
unchecked_div⚠ | Experimental 执行未经检查的除法,从而导致 |
unchecked_mul⚠ | Experimental 返回未经检查的乘法的结果,当 |
unchecked_rem⚠ | Experimental 返回未经检查的除法的其余部分,从而在 |
unchecked_shl⚠ | Experimental 执行未经检查的左移,导致 |
unchecked_shr⚠ | Experimental 执行未经检查的右移,导致 |
unchecked_sub⚠ | Experimental 返回未经检查的减法的结果,当 |
unlikely⚠ | Experimental 提示编译器分支条件可能为 false。 返回传递给它的值。 |
unreachable⚠ | Experimental 通知优化器代码中的这一点不可访问,从而可以进行进一步的优化。 |
variant_count⚠ | Experimental 返回强制转换为 |
volatile_copy_memory⚠ | Experimental 等效于适当的 |
volatile_copy_nonoverlapping_memory⚠ | Experimental 等效于适当的 |
volatile_load⚠ | Experimental 从 |
volatile_set_memory⚠ | Experimental 等效于适当的 |
volatile_store⚠ | Experimental 对 |
wrapping_add⚠ | Experimental 返回 (a + b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。 |
wrapping_mul⚠ | Experimental 返回 (a * b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。 |
wrapping_sub⚠ | Experimental 返回 (a-b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。 |
copy⚠ | 将 |
copy_nonoverlapping⚠ | 将 |
drop_in_place⚠ | Deprecated |
transmute⚠ | 将一种类型的值的位重新解释为另一种类型。 |
write_bytes⚠ | 将从 |