Module std::intrinsics [−][src]
core_intrinsics
)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
中止进程的执行。
执行检查的整数加法。
计算与指针的偏移量 (可能会自动换行)。
如果 T
未定义,则无法执行的不安全函数的守卫:
这将静态地为 panic,或者什么也不做。
如果 T
具有无效的位模式,则永远不能执行的不安全函数的守卫:这将静态地 panic,或者什么也不做。
如果 T
不允许零初始化,则永远不能执行的不安全函数的守卫:这将静态 panic,或者什么也不做。
对当前值按位与,返回前一个值。
对当前值按位与,返回前一个值。
对当前值按位与,返回前一个值。
对当前值按位与,返回前一个值。
对当前值按位与,返回前一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
如果当前值与 old
值相同,则存储一个值。
原子栅栏。
原子栅栏。
原子栅栏。
原子栅栏。
加载指针的当前值。
加载指针的当前值。
加载指针的当前值。
使用带符号的比较将当前值设为最大值。
使用带符号的比较将当前值设为最大值。
使用带符号的比较将当前值设为最大值。
使用带符号的比较将当前值设为最大值。
当前值的最大值。
使用带符号的比较将当前值设为最小值。
使用带符号的比较将当前值设为最小值。
使用带符号的比较将当前值设为最小值。
使用带符号的比较将当前值设为最小值。
使用带符号的比较将当前值设为最小值。
对当前值按位与,返回前一个值。
对当前值按位与,返回前一个值。
对当前值按位与,返回前一个值。
对当前值按位与,返回前一个值。
对当前值按位与,返回前一个值。
按位或具有当前值,返回前一个值。
按位或具有当前值,返回前一个值。
按位或具有当前值,返回前一个值。
按位或具有当前值,返回前一个值。
仅编译器的内存屏障。
仅编译器的内存屏障。
仅编译器的内存屏障。
仅编译器的内存屏障。
将值存储在指定的存储位置。
将值存储在指定的存储位置。
将值存储在指定的存储位置。
使用无符号比较将当前值设为最大值。
使用无符号比较将当前值设为最大值。
使用无符号比较将当前值设为最大值。
使用无符号比较将当前值设为最大值。
使用无符号比较将当前值设为最大值。
使用无符号比较,使用当前值的最小值。
使用无符号比较,使用当前值的最小值。
使用无符号比较,使用当前值的最小值。
使用无符号比较,使用当前值的最小值。
使用无符号比较,使用当前值的最小值。
加到当前值,返回前一个值。
加到当前值,返回前一个值。
加到当前值,返回前一个值。
加到当前值,返回前一个值。
加到当前值,返回前一个值。
将值存储在指定的内存位置,并返回旧值。
将值存储在指定的内存位置,并返回旧值。
将值存储在指定的内存位置,并返回旧值。
将值存储在指定的内存位置,并返回旧值。
将值存储在指定的内存位置,并返回旧值。
与当前值按位异或,返回前一个值。
与当前值按位异或,返回前一个值。
与当前值按位异或,返回前一个值。
与当前值按位异或,返回前一个值。
与当前值按位异或,返回前一个值。
从当前值减去,返回前一个值。
从当前值减去,返回前一个值。
从当前值减去,返回前一个值。
从当前值减去,返回前一个值。
从当前值减去,返回前一个值。
反转整数类型 T
中的位。
有关详细信息,请参见 std::hint::black_box
的文档。
执行一个断点陷阱,以供调试器检查。
反转整数类型 T
中的字节。
获取对静态 Location
的引用,以指示在何处调用了它。
在编译时分配。不应在运行时调用。
根据上下文选择要调用的函数。
将 f32
值的符号从 y
复制到 x
。
将 f64
值的符号从 y
复制到 x
。
返回整数类型 T
的前导未设置位 (zeroes) 的数量。
类似于 ctlz
,但是非常不安全,因为当给定值 0
的 x
时,它返回 undef
。
返回整数类型 T
中设置的位数
返回整数类型 T
的尾随未设置位 (zeroes) 的数量。
类似于 cttz
,但是非常不安全,因为当给定值 0
的 x
时,它返回 undef
。
返回 ‘v’ 中变体的判别式的值;
如果 T
没有判别,则返回 0
。
使用 LLVM 的 fptoui/fptosi 进行转换,对于越界的值可能会返回 undef (https://github.com/rust-lang/rust/issues/10184)
将值移出作用域。而无需运行丢弃守卫。
提示编译器分支条件很可能是正确的。 返回传递给它的值。
返回两个 f32
值的最大值。
返回两个 f64
值的最大值。
类型的最小对齐方式。
参考值的所需对齐方式。
返回两个 f32
值中的最小值。
返回两个 f64
值中的最小值。
执行检查的整数乘法
返回最接近 f32
的整数。
返回最接近 f64
的整数。
如果 T
给出的实际类型需要丢弃 glue,则返回 true
。如果为 T
提供的实际类型实现 Copy
,则返回 false
。
根据 LLVM 发出 !nontemporal
存储 (请参见其文档)。
可能永远都不会变得稳定。
类型的首选对齐方式。
prefetch
内部函数是对代码生成器的提示,如果支持的话,它会插入一个预取指令。否则,它是无操作的。
预取对程序的行为没有影响,但可以更改其性能特征。
prefetch
内部函数是对代码生成器的提示,如果支持的话,它会插入一个预取指令。否则,它是无操作的。
预取对程序的行为没有影响,但可以更改其性能特征。
prefetch
内部函数是对代码生成器的提示,如果支持的话,它会插入一个预取指令。否则,它是无操作的。
预取对程序的行为没有影响,但可以更改其性能特征。
prefetch
内部函数是对代码生成器的提示,如果支持的话,它会插入一个预取指令。否则,它是无操作的。
预取对程序的行为没有影响,但可以更改其性能特征。
有关详细信息,请参见 <*const T>::guaranteed_eq
的文档。
有关详细信息,请参见 <*const T>::guaranteed_ne
的文档。
有关详细信息,请参见 <*const T>::offset_from
的文档。
向左旋转。
向右旋转。
从函数附带的属性中获取其含义的 magic 内部函数。
计算 a + b
,在数字范围内达到饱和。
计算 a - b
,在数字范围内达到饱和。
类型的大小 (以字节为单位)。
引用值的大小 (以字节为单位)。
执行检查的整数减法
获取一个标识符,该标识符对于指定的类型是全局唯一的。 无论调用哪个 crate,此函数都将为类型返回相同的值。
获取包含类型名称的静态字符串切片。
从 src
指针执行易失性加载不需要将指针对齐。
对 dst
指针执行易失性存储。
指针不需要对齐。
返回未经检查的加法运算的结果,导致 x + y > T::MAX
或 x + y < T::MIN
出现不确定的行为。
执行未经检查的除法,从而导致 y == 0
或 x == T::MIN && y == -1
出现不确定的行为
返回未经检查的乘法的结果,当 x *y > T::MAX
或 x* y < T::MIN
时导致未定义的行为。
返回未经检查的除法的其余部分,从而在 y == 0
或 x == T::MIN && y == -1
时导致未定义的行为
执行未经检查的左移,导致 y < 0
或 y >= N
出现不确定的行为,其中 N 是 T 的宽度 (以位为单位)。
执行未经检查的右移,导致 y < 0
或 y >= N
出现不确定的行为,其中 N 是 T 的宽度 (以位为单位)。
返回未经检查的减法的结果,当 x - y > T::MAX
或 x - y < T::MIN
时导致未定义的行为。
提示编译器分支条件可能为 false。 返回传递给它的值。
通知优化器代码中的这一点不可访问,从而可以进行进一步的优化。
返回 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>()
从 src
指针执行易失性加载。
等效于适当的 llvm.memset.p0i8.*
内部函数,其大小为 count* size_of::<T>()
,并且对齐方式为 min_align_of::<T>()
。
对 dst
指针执行易失性存储。
返回 (a + b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。
返回 (a * b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。
返回 (a-b) mod 2 N,其中 N 是 T 的宽度 (以位为单位)。
将 count * size_of::<T>()
字节从 src
复制到 dst
。源和目标必须不重叠。
将从 dst
开始的 count * size_of::<T>()
内存字节设置为 val
。