Module std::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

volatile 内部函数提供旨在作用于 I/O 内存的操作,并保证编译器不会在其他 volatile 内部函数之间对它们进行重新排序。请参见 [volatile] 上的 LLVM 文档。

Atomics

原子内部函数对机器字提供常见的原子操作,并具有多种可能的存储顺序。它们遵循与 C++ 11 相同的语义。请参见 [atomics] 上的 LLVM 文档。

关于内存排序的快速回顾:

  • 获取 - 获取锁的障碍。屏障之后将进行后续的读取和写入。
  • 释放 - 释放锁的障碍物。之前的读取和写入发生在该屏障之前。
  • 顺序一致 - 顺序一致的操作可保证按顺序进行。这是处理原子类型的标准模式,等效于 Java 的 volatile

Functions

abortExperimental

中止进程的执行。

add_with_overflowExperimental

执行检查的整数加法。

arith_offsetExperimental

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

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

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

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

assumeExperimental

通知优化器某个条件始终为 true。 如果条件为 false,则行为未定义的。

atomic_andExperimental

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

atomic_and_acqExperimental

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

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

atomic_and_relExperimental

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

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

atomic_cxchgExperimental

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

atomic_fenceExperimental

原子栅栏。

原子栅栏。

原子栅栏。

原子栅栏。

atomic_loadExperimental

加载指针的当前值。

atomic_load_acqExperimental

加载指针的当前值。

加载指针的当前值。

atomic_maxExperimental

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

atomic_max_acqExperimental

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

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

atomic_max_relExperimental

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

当前值的最大值。

atomic_minExperimental

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

atomic_min_acqExperimental

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

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

atomic_min_relExperimental

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

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

atomic_nandExperimental

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

atomic_nand_acqExperimental

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

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

atomic_nand_relExperimental

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

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

atomic_orExperimental

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

atomic_or_acqExperimental

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

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

atomic_or_relExperimental

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

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

仅编译器的内存屏障。

仅编译器的内存屏障。

仅编译器的内存屏障。

仅编译器的内存屏障。

atomic_storeExperimental

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

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

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

atomic_umaxExperimental

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

atomic_umax_acqExperimental

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

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

atomic_umax_relExperimental

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

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

atomic_uminExperimental

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

atomic_umin_acqExperimental

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

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

atomic_umin_relExperimental

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

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

atomic_xaddExperimental

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

atomic_xadd_acqExperimental

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

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

atomic_xadd_relExperimental

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

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

atomic_xchgExperimental

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

atomic_xchg_acqExperimental

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

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

atomic_xchg_relExperimental

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

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

atomic_xorExperimental

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

atomic_xor_acqExperimental

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

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

atomic_xor_relExperimental

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

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

atomic_xsubExperimental

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

atomic_xsub_acqExperimental

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

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

atomic_xsub_relExperimental

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

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

bitreverseExperimental

反转整数类型 T 中的位。

black_boxExperimental

有关详细信息,请参见 std::hint::black_box 的文档。

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

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

使用 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

类型的最小对齐方式。

参考值的所需对齐方式。

minnumf32Experimental

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

minnumf64Experimental

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

mul_with_overflowExperimental

执行检查的整数乘法

nearbyintf32Experimental

返回最接近 f32 的整数。

nearbyintf64Experimental

返回最接近 f64 的整数。

needs_dropExperimental

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

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

offsetExperimental

计算与指针的偏移量。

powf32Experimental

f32 提升到 f32 的幂。

powf64Experimental

f64 提升到 f64 的幂。

powif32Experimental

f32 提升为整数幂。

powif64Experimental

f64 提升为整数幂。

pref_align_ofExperimental

类型的首选对齐方式。

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

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

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

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

ptr_guaranteed_eqExperimental

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

ptr_guaranteed_neExperimental

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

ptr_offset_fromExperimental

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

raw_eqExperimental

确定两个值的原始字节是否相等。

rintf32Experimental

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

rintf64Experimental

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

rotate_leftExperimental

向左旋转。

rotate_rightExperimental

向右旋转。

roundf32Experimental

返回最接近 f32 的整数。在离零一半的情况下进行舍入。

roundf64Experimental

返回最接近 f64 的整数。在离零一半的情况下进行舍入。

rustc_peekExperimental

从函数附带的属性中获取其含义的 magic 内部函数。

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

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

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

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

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

相当于适当的 llvm.memmove.p0i8.0i8.* 内部函数,大小为 count * size_of::<T>(),对齐方式为 min_align_of::<T>()

相当于适当的 llvm.memcpy.p0i8.0i8.* 内部函数,大小为 count * size_of::<T>(),对齐方式为 min_align_of::<T>()

volatile_loadExperimental

src 指针执行易失性加载。

等效于适当的 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 的宽度 (以位为单位)。

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

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

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

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