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

abortExperimental

中止进程的执行。

add_with_overflowExperimental

执行检查的整数加法。

arith_offsetExperimental

计算与指针的偏移量 (可能会自动换行)。

assert_inhabitedExperimental

如果 T 未定义,则无法执行的不安全函数的守卫: 这将静态地为 panic,或者什么也不做。

assert_uninit_validExperimental

如果 T 具有无效的位模式,则永远不能执行的不安全函数的守卫: 这将静态地 panic,或者什么也不做。

assert_zero_validExperimental

如果 T 不允许零初始化,则永远不能执行的不安全函数的守卫: 这将静态 panic,或者什么也不做。

assumeExperimental

通知优化器条件始终为真。 如果条件为假,则行为是不确定的。

atomic_andExperimental

对当前值按位与,返回前一个值。

atomic_and_acqExperimental

对当前值按位与,返回前一个值。

atomic_and_acqrelExperimental

对当前值按位与,返回前一个值。

atomic_and_relExperimental

对当前值按位与,返回前一个值。

atomic_and_relaxedExperimental

对当前值按位与,返回前一个值。

atomic_cxchgExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchg_acqExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchg_acq_failrelaxedExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchg_acqrelExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchg_acqrel_failrelaxedExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchg_failacqExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchg_failrelaxedExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchg_relExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchg_relaxedExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweakExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweak_acqExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweak_acq_failrelaxedExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweak_acqrelExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweak_acqrel_failrelaxedExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweak_failacqExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweak_failrelaxedExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweak_relExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_cxchgweak_relaxedExperimental

如果当前值与 old 值相同,则存储一个值。

atomic_fenceExperimental

原子 fence。

atomic_fence_acqExperimental

原子 fence。

atomic_fence_acqrelExperimental

原子 fence。

atomic_fence_relExperimental

原子 fence。

atomic_loadExperimental

加载指针的当前值。

atomic_load_acqExperimental

加载指针的当前值。

atomic_load_relaxedExperimental

加载指针的当前值。

atomic_load_unorderedExperimental
atomic_maxExperimental

使用带符号的比较将当前值设为最大值。

atomic_max_acqExperimental

使用带符号的比较将当前值设为最大值。

atomic_max_acqrelExperimental

使用带符号的比较将当前值设为最大值。

atomic_max_relExperimental

使用带符号的比较将当前值设为最大值。

atomic_max_relaxedExperimental

当前值的最大值。

atomic_minExperimental

使用带符号的比较将当前值设为最小值。

atomic_min_acqExperimental

使用带符号的比较将当前值设为最小值。

atomic_min_acqrelExperimental

使用带符号的比较将当前值设为最小值。

atomic_min_relExperimental

使用带符号的比较将当前值设为最小值。

atomic_min_relaxedExperimental

使用带符号的比较将当前值设为最小值。

atomic_nandExperimental

对当前值按位与,返回前一个值。

atomic_nand_acqExperimental

对当前值按位与,返回前一个值。

atomic_nand_acqrelExperimental

对当前值按位与,返回前一个值。

atomic_nand_relExperimental

对当前值按位与,返回前一个值。

atomic_nand_relaxedExperimental

对当前值按位与,返回前一个值。

atomic_orExperimental

按位或具有当前值,返回前一个值。

atomic_or_acqExperimental

按位或具有当前值,返回前一个值。

atomic_or_acqrelExperimental

按位或具有当前值,返回前一个值。

atomic_or_relExperimental

按位或具有当前值,返回前一个值。

atomic_or_relaxedExperimental

按位或具有当前值,返回前一个值。

atomic_singlethreadfenceExperimental

仅编译器的内存屏障。

atomic_singlethreadfence_acqExperimental

仅编译器的内存屏障。

atomic_singlethreadfence_acqrelExperimental

仅编译器的内存屏障。

atomic_singlethreadfence_relExperimental

仅编译器的内存屏障。

atomic_storeExperimental

将值存储在指定的存储位置。

atomic_store_relExperimental

将值存储在指定的存储位置。

atomic_store_relaxedExperimental

将值存储在指定的存储位置。

atomic_store_unorderedExperimental
atomic_umaxExperimental

使用无符号比较将当前值设为最大值。

atomic_umax_acqExperimental

使用无符号比较将当前值设为最大值。

atomic_umax_acqrelExperimental

使用无符号比较将当前值设为最大值。

atomic_umax_relExperimental

使用无符号比较将当前值设为最大值。

atomic_umax_relaxedExperimental

使用无符号比较将当前值设为最大值。

atomic_uminExperimental

使用无符号比较,使用当前值的最小值。

atomic_umin_acqExperimental

使用无符号比较,使用当前值的最小值。

atomic_umin_acqrelExperimental

使用无符号比较,使用当前值的最小值。

atomic_umin_relExperimental

使用无符号比较,使用当前值的最小值。

atomic_umin_relaxedExperimental

使用无符号比较,使用当前值的最小值。

atomic_xaddExperimental

加到当前值,返回前一个值。

atomic_xadd_acqExperimental

加到当前值,返回前一个值。

atomic_xadd_acqrelExperimental

加到当前值,返回前一个值。

atomic_xadd_relExperimental

加到当前值,返回前一个值。

atomic_xadd_relaxedExperimental

加到当前值,返回前一个值。

atomic_xchgExperimental

将值存储在指定的内存位置,并返回旧值。

atomic_xchg_acqExperimental

将值存储在指定的内存位置,并返回旧值。

atomic_xchg_acqrelExperimental

将值存储在指定的内存位置,并返回旧值。

atomic_xchg_relExperimental

将值存储在指定的内存位置,并返回旧值。

atomic_xchg_relaxedExperimental

将值存储在指定的内存位置,并返回旧值。

atomic_xorExperimental

与当前值按位异或,返回前一个值。

atomic_xor_acqExperimental

与当前值按位异或,返回前一个值。

atomic_xor_acqrelExperimental

与当前值按位异或,返回前一个值。

atomic_xor_relExperimental

与当前值按位异或,返回前一个值。

atomic_xor_relaxedExperimental

与当前值按位异或,返回前一个值。

atomic_xsubExperimental

从当前值减去,返回前一个值。

atomic_xsub_acqExperimental

从当前值减去,返回前一个值。

atomic_xsub_acqrelExperimental

从当前值减去,返回前一个值。

atomic_xsub_relExperimental

从当前值减去,返回前一个值。

atomic_xsub_relaxedExperimental

从当前值减去,返回前一个值。

bitreverseExperimental

反转整数类型 T 中的位。

breakpointExperimental

执行一个断点陷阱,以供调试器检查。

bswapExperimental

反转整数类型 T 中的字节。

caller_locationExperimental

获取对静态 Location 的引用,以指示在何处调用了它。

ceilf32Experimental

返回大于或等于 f32 的最小整数。

ceilf64Experimental

返回大于或等于 f64 的最小整数。

const_allocateExperimental

在编译时分配。不应在运行时调用。

copysignf32Experimental

f32 值的符号从 y 复制到 x

copysignf64Experimental

f64 值的符号从 y 复制到 x

cosf32Experimental

返回 f32 的余弦值。

cosf64Experimental

返回 f64 的余弦值。

ctlzExperimental

返回整数类型 T 的前导未设置位 (zeroes) 的数量。

ctlz_nonzeroExperimental

类似于 ctlz,但是非常不安全,因为当给定值 0x 时,它返回 undef

ctpopExperimental

返回整数类型 T 中设置的位数

cttzExperimental

返回整数类型 T 的尾随未设置位 (zeroes) 的数量。

cttz_nonzeroExperimental

类似于 cttz,但是非常不安全,因为当给定值 0x 时,它返回 undef

discriminant_valueExperimental

返回 ‘v’ 中成员的判别式的值; 如果 T 没有判别,则返回 0

exact_divExperimental

执行精确除法,从而导致 x % y != 0y == 0x == T::MIN && y == -1 出现不确定的行为

exp2f32Experimental

返回 2 乘以 f32 的幂。

exp2f64Experimental

返回 2 乘以 f64 的幂。

expf32Experimental

返回 f32 的指数。

expf64Experimental

返回 f64 的指数。

fabsf32Experimental

返回 f32 的绝对值。

fabsf64Experimental

返回 f64 的绝对值。

fadd_fastExperimental

浮点数加法允许基于代数规则进行优化。 可以假设输入是有限的。

fdiv_fastExperimental

浮点除法允许基于代数规则进行优化。 可以假设输入是有限的。

float_to_int_uncheckedExperimental

使用 LLVM 的 fptoui/fptosi 进行转换,对于越界的值可能会返回 undef (https://github.com/rust-lang/rust/issues/10184)

floorf32Experimental

返回小于或等于 f32 的最大整数。

floorf64Experimental

返回小于或等于 f64 的最大整数。

fmaf32Experimental

f32 值返回 a * b + c

fmaf64Experimental

f64 值返回 a * b + c

fmul_fastExperimental

浮点乘法允许基于代数规则进行优化。 可以假设输入是有限的。

forgetExperimental

将值移出作用域。而无需运行丢弃守卫。

frem_fastExperimental

浮余数允许基于代数规则进行优化。 可以假设输入是有限的。

fsub_fastExperimental

浮点减法允许基于代数规则进行优化。 可以假设输入是有限的。

likelyExperimental

提示编译器分支条件很可能是正确的。 返回传递给它的值。

log2f32Experimental

返回 f32 的以 2 为底的对数。

log2f64Experimental

返回 f64 的以 2 为底的对数。

log10f32Experimental

返回 f32 的以 10 为底的对数。

log10f64Experimental

返回 f64 的以 10 为底的对数。

logf32Experimental

返回 f32 的自然对数。

logf64Experimental

返回 f64 的自然对数。

maxnumf32Experimental

返回两个 f32 值的最大值。

maxnumf64Experimental

返回两个 f64 值的最大值。

min_align_ofExperimental

类型的最小对齐方式。

min_align_of_valExperimental

参考值的所需对齐方式。

minnumf32Experimental

返回两个 f32 值中的最小值。

minnumf64Experimental

返回两个 f64 值中的最小值。

mul_with_overflowExperimental

执行检查的整数乘法

nearbyintf32Experimental

返回最接近 f32 的整数。

nearbyintf64Experimental

返回最接近 f64 的整数。

needs_dropExperimental

如果 T 给出的实际类型需要丢弃 glue,则返回 true。如果为 T 提供的实际类型实现 Copy,则返回 false

nontemporal_storeExperimental

根据 LLVM 发出 !nontemporal 存储 (请参见其文档)。 可能永远都不会变得稳定。

offsetExperimental

计算与指针的偏移量。

powf32Experimental

f32 提升到 f32 的幂。

powf64Experimental

f64 提升到 f64 的幂。

powif32Experimental

f32 提升为整数幂。

powif64Experimental

f64 提升为整数幂。

pref_align_ofExperimental

类型的首选对齐方式。

prefetch_read_dataExperimental

prefetch 内联函数是对代码生成器的提示,如果支持的话,它会插入一个预取指令。否则,它是无操作的。 预取对程序的行为没有影响,但可以更改其性能特征。

prefetch_read_instructionExperimental

prefetch 内联函数是对代码生成器的提示,如果支持的话,它会插入一个预取指令。否则,它是无操作的。 预取对程序的行为没有影响,但可以更改其性能特征。

prefetch_write_dataExperimental

prefetch 内联函数是对代码生成器的提示,如果支持的话,它会插入一个预取指令。否则,它是无操作的。 预取对程序的行为没有影响,但可以更改其性能特征。

prefetch_write_instructionExperimental

prefetch 内联函数是对代码生成器的提示,如果支持的话,它会插入一个预取指令。否则,它是无操作的。 预取对程序的行为没有影响,但可以更改其性能特征。

ptr_guaranteed_eqExperimental

有关详细信息,请参见 <*const T>::guaranteed_eq 的文档。

ptr_guaranteed_neExperimental

有关详细信息,请参见 <*const T>::guaranteed_ne 的文档。

ptr_offset_fromExperimental

有关详细信息,请参见 <*const T>::offset_from 的文档。

rintf32Experimental

返回最接近 f32 的整数。 如果参数不是整数,则可能会引发不精确的浮点异常。

rintf64Experimental

返回最接近 f64 的整数。 如果参数不是整数,则可能会引发不精确的浮点异常。

rotate_leftExperimental

向左旋转。

rotate_rightExperimental

向右旋转。

roundf32Experimental

返回最接近 f32 的整数。将中途案例从零舍入。

roundf64Experimental

返回最接近 f64 的整数。将中途案例从零舍入。

rustc_peekExperimental

从函数附带的属性中获取其含义的魔术内联函数。

saturating_addExperimental

计算 a + b,在数字范围内达到饱和。

saturating_subExperimental

计算 a - b,在数字范围内达到饱和。

sinf32Experimental

返回 f32 的正弦值。

sinf64Experimental

返回 f64 的正弦值。

size_ofExperimental

类型的大小 (以字节为单位)。

size_of_valExperimental

引用值的大小 (以字节为单位)。

sqrtf32Experimental

返回 f32 的平方根

sqrtf64Experimental

返回 f64 的平方根

sub_with_overflowExperimental

执行检查的整数减法

truncf32Experimental

返回 f32 的整数部分。

truncf64Experimental

返回 f64 的整数部分。

tryExperimental

Rust 的 “try catch” 构造使用数据指针 data 调用函数指针 try_fn

type_idExperimental

获取一个标识符,该标识符对于指定的类型是全局唯一的。 无论调用哪个 crate,此函数都将为类型返回相同的值。

type_nameExperimental

获取包含类型名称的静态字符串切片。

unaligned_volatile_loadExperimental

src 指针执行易失性加载不需要将指针对齐。

unaligned_volatile_storeExperimental

dst 指针执行易失性存储。 指针不需要对齐。

unchecked_addExperimental

返回未经检查的加法运算的结果,导致 x + y > T::MAXx + y < T::MIN 出现不确定的行为。

unchecked_divExperimental

执行未经检查的除法,从而导致 y == 0x == T::MIN && y == -1 出现不确定的行为

unchecked_mulExperimental

返回未经检查的乘法的结果,当 x *y > T::MAXx* y < T::MIN 时导致未定义的行为。

unchecked_remExperimental

返回未经检查的除法的其余部分,从而在 y == 0x == T::MIN && y == -1 时导致未定义的行为

unchecked_shlExperimental

执行未经检查的左移,导致 y < 0y >= N 出现不确定的行为,其中 N 是 T 的宽度 (以位为单位)。

unchecked_shrExperimental

执行未经检查的右移,导致 y < 0y >= N 出现不确定的行为,其中 N 是 T 的宽度 (以位为单位)。

unchecked_subExperimental

返回未经检查的减法的结果,当 x - y > T::MAXx - y < T::MIN 时导致未定义的行为。

unlikelyExperimental

提示编译器分支条件可能为 false。 返回传递给它的值。

unreachableExperimental

通知优化器代码中的这一点不可访问,从而可以进行进一步的优化。

variant_countExperimental

返回强制转换为 usizeT 类型的成员的数量; 如果 T 没有成员,则返回 0。无人居住的成员将被计算在内。

volatile_copy_memoryExperimental

等效于适当的 llvm.memmove.p0i8.0i8.* 本征,大小为 count* size_of::<T>(),对齐方式为

volatile_copy_nonoverlapping_memoryExperimental

等效于适当的 llvm.memcpy.p0i8.0i8.* 本征,大小为 count*size_of::<T>(),对齐方式为

volatile_loadExperimental

src 指针执行易失性加载。

volatile_set_memoryExperimental

等效于适当的 llvm.memset.p0i8.* 内联函数,其大小为 count* size_of::<T>(),并且对齐方式为 min_align_of::<T>()

volatile_storeExperimental

dst 指针执行易失性存储。

wrapping_addExperimental

返回 (a + b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。

wrapping_mulExperimental

返回 (a * b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。

wrapping_subExperimental

返回 (a-b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。

copy

count * size_of::<T>() 字节从 src 复制到 dst。源和目标可能会重叠。

copy_nonoverlapping

count * size_of::<T>() 字节从 src 复制到 dst。源和目标必须不重叠。

drop_in_placeDeprecated
transmute

将一种类型的值的位重新解释为另一种类型。

write_bytes

将从 dst 开始的 count * size_of::<T>() 内存字节设置为 val