core_intrinsics
)Expand description
Compiler intrinsics.
The corresponding definitions are in https://github.com/rust-lang/rust/blob/master/compiler/rustc_codegen_llvm/src/intrinsic.rs. The corresponding const implementations are in https://github.com/rust-lang/rust/blob/master/compiler/rustc_const_eval/src/interpret/intrinsics.rs.
§Const intrinsics
Note: any changes to the constness of intrinsics should be discussed with the language team. This includes changes in the stability of the constness.
In order to make an intrinsic usable at compile-time, it needs to be declared in the “new”
style, i.e. as a #[rustc_intrinsic]
function, not inside an extern
block. Then copy the
implementation from https://github.com/rust-lang/miri/blob/master/src/shims/intrinsics to
https://github.com/rust-lang/rust/blob/master/compiler/rustc_const_eval/src/interpret/intrinsics.rs
and make the intrinsic declaration a const fn
.
If an intrinsic is supposed to be used from a const fn
with a rustc_const_stable
attribute,
#[rustc_intrinsic_const_stable_indirect]
needs to be added to the intrinsic. Such a change requires
T-lang approval, because it may bake a feature into the language that cannot be replicated in
user code without compiler support.
§Volatiles
The volatile intrinsics provide operations intended to act on I/O memory, which are guaranteed to not be reordered by the compiler across other volatile intrinsics. See the LLVM documentation on [volatile].
§Atomics
The atomic intrinsics provide common atomic operations on machine words, with multiple possible memory orderings. They obey the same semantics as C++11. See the LLVM documentation on [atomics].
A quick refresher on memory ordering:
- Acquire - a barrier for acquiring a lock. Subsequent reads and writes take place after the barrier.
- Release - a barrier for releasing a lock. Preceding reads and writes take place before the barrier.
- Sequentially consistent - sequentially consistent operations are
guaranteed to happen in order. This is the standard mode for working
with atomic types and is equivalent to Java’s
volatile
.
§Unwinding
Rust intrinsics may, in general, unwind. If an intrinsic can never unwind, add the
#[rustc_nounwind]
attribute so that the compiler can make use of this fact.
However, even for intrinsics that may unwind, rustc assumes that a Rust intrinsics will never initiate a foreign (non-Rust) unwind, and thus for panic=abort we can always assume that these intrinsics cannot unwind.
Modules§
- fallback
Experimental - mir
Experimental - Rustc internal tooling for hand-writing MIR.
- simd
Experimental - SIMD compiler intrinsics.
Traits§
- Aggregate
RawPtr Experimental
Functions§
- copy⚠
Deprecated - Copies
count * size_of::<T>()
bytes fromsrc
todst
. The source and destination may overlap. - copy_
nonoverlapping ⚠Deprecated - Copies
count * size_of::<T>()
bytes fromsrc
todst
. The source and destination must not overlap. - drop_
in_ ⚠place Deprecated - transmute⚠
Deprecated - Reinterprets the bits of a value of one type as another type.
- write_
bytes ⚠Deprecated - Sets
count * size_of::<T>()
bytes of memory starting atdst
toval
. - abort
Experimental - Aborts the execution of the process.
- add_
with_ overflow Experimental - Performs checked integer addition.
- aggregate_
raw_ ptr Experimental - Lowers in MIR to
Rvalue::Aggregate
withAggregateKind::RawPtr
. - arith_
offset ⚠Experimental - Calculates the offset from a pointer, potentially wrapping.
- assert_
inhabited Experimental - A guard for unsafe functions that cannot ever be executed if
T
is uninhabited: This will statically either panic, or do nothing. - assert_
mem_ uninitialized_ valid Experimental - A guard for
std::mem::uninitialized
. This will statically either panic, or do nothing. - assert_
zero_ valid Experimental - A guard for unsafe functions that cannot ever be executed if
T
does not permit zero-initialization: This will statically either panic, or do nothing. - assume⚠
Experimental - Informs the optimizer that a condition is always true. If the condition is false, the behavior is undefined.
- atomic_
and_ ⚠acqrel Experimental - Bitwise and with the current value, returning the previous value.
- atomic_
and_ ⚠acquire Experimental - Bitwise and with the current value, returning the previous value.
- atomic_
and_ ⚠relaxed Experimental - Bitwise and with the current value, returning the previous value.
- atomic_
and_ ⚠release Experimental - Bitwise and with the current value, returning the previous value.
- atomic_
and_ ⚠seqcst Experimental - Bitwise and with the current value, returning the previous value.
- atomic_
cxchg_ ⚠acqrel_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠acqrel_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠acqrel_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠acquire_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠acquire_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠acquire_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠relaxed_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠relaxed_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠relaxed_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠release_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠release_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠release_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠seqcst_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠seqcst_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchg_ ⚠seqcst_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠acqrel_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠acqrel_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠acqrel_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠acquire_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠acquire_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠acquire_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠relaxed_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠relaxed_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠relaxed_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠release_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠release_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠release_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠seqcst_ acquire Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠seqcst_ relaxed Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
cxchgweak_ ⚠seqcst_ seqcst Experimental - Stores a value if the current value is the same as the
old
value. - atomic_
fence_ ⚠acqrel Experimental - An atomic fence.
- atomic_
fence_ ⚠acquire Experimental - An atomic fence.
- atomic_
fence_ ⚠release Experimental - An atomic fence.
- atomic_
fence_ ⚠seqcst Experimental - An atomic fence.
- atomic_
load_ ⚠acquire Experimental - Loads the current value of the pointer.
- atomic_
load_ ⚠relaxed Experimental - Loads the current value of the pointer.
- atomic_
load_ ⚠seqcst Experimental - Loads the current value of the pointer.
- atomic_
load_ ⚠unordered Experimental - Do NOT use this intrinsic; “unordered” operations do not exist in our memory model!
In terms of the Rust Abstract Machine, this operation is equivalent to
src.read()
, i.e., it performs a non-atomic read. - atomic_
max_ ⚠acqrel Experimental - Maximum with the current value using a signed comparison.
- atomic_
max_ ⚠acquire Experimental - Maximum with the current value using a signed comparison.
- atomic_
max_ ⚠relaxed Experimental - Maximum with the current value.
- atomic_
max_ ⚠release Experimental - Maximum with the current value using a signed comparison.
- atomic_
max_ ⚠seqcst Experimental - Maximum with the current value using a signed comparison.
- atomic_
min_ ⚠acqrel Experimental - Minimum with the current value using a signed comparison.
- atomic_
min_ ⚠acquire Experimental - Minimum with the current value using a signed comparison.
- atomic_
min_ ⚠relaxed Experimental - Minimum with the current value using a signed comparison.
- atomic_
min_ ⚠release Experimental - Minimum with the current value using a signed comparison.
- atomic_
min_ ⚠seqcst Experimental - Minimum with the current value using a signed comparison.
- atomic_
nand_ ⚠acqrel Experimental - Bitwise nand with the current value, returning the previous value.
- atomic_
nand_ ⚠acquire Experimental - Bitwise nand with the current value, returning the previous value.
- atomic_
nand_ ⚠relaxed Experimental - Bitwise nand with the current value, returning the previous value.
- atomic_
nand_ ⚠release Experimental - Bitwise nand with the current value, returning the previous value.
- atomic_
nand_ ⚠seqcst Experimental - Bitwise nand with the current value, returning the previous value.
- atomic_
or_ ⚠acqrel Experimental - Bitwise or with the current value, returning the previous value.
- atomic_
or_ ⚠acquire Experimental - Bitwise or with the current value, returning the previous value.
- atomic_
or_ ⚠relaxed Experimental - Bitwise or with the current value, returning the previous value.
- atomic_
or_ ⚠release Experimental - Bitwise or with the current value, returning the previous value.
- atomic_
or_ ⚠seqcst Experimental - Bitwise or with the current value, returning the previous value.
- atomic_
singlethreadfence_ ⚠acqrel Experimental - A compiler-only memory barrier.
- atomic_
singlethreadfence_ ⚠acquire Experimental - A compiler-only memory barrier.
- atomic_
singlethreadfence_ ⚠release Experimental - A compiler-only memory barrier.
- atomic_
singlethreadfence_ ⚠seqcst Experimental - A compiler-only memory barrier.
- atomic_
store_ ⚠relaxed Experimental - Stores the value at the specified memory location.
- atomic_
store_ ⚠release Experimental - Stores the value at the specified memory location.
- atomic_
store_ ⚠seqcst Experimental - Stores the value at the specified memory location.
- atomic_
store_ ⚠unordered Experimental - Do NOT use this intrinsic; “unordered” operations do not exist in our memory model!
In terms of the Rust Abstract Machine, this operation is equivalent to
dst.write(val)
, i.e., it performs a non-atomic write. - atomic_
umax_ ⚠acqrel Experimental - Maximum with the current value using an unsigned comparison.
- atomic_
umax_ ⚠acquire Experimental - Maximum with the current value using an unsigned comparison.
- atomic_
umax_ ⚠relaxed Experimental - Maximum with the current value using an unsigned comparison.
- atomic_
umax_ ⚠release Experimental - Maximum with the current value using an unsigned comparison.
- atomic_
umax_ ⚠seqcst Experimental - Maximum with the current value using an unsigned comparison.
- atomic_
umin_ ⚠acqrel Experimental - Minimum with the current value using an unsigned comparison.
- atomic_
umin_ ⚠acquire Experimental - Minimum with the current value using an unsigned comparison.
- atomic_
umin_ ⚠relaxed Experimental - Minimum with the current value using an unsigned comparison.
- atomic_
umin_ ⚠release Experimental - Minimum with the current value using an unsigned comparison.
- atomic_
umin_ ⚠seqcst Experimental - Minimum with the current value using an unsigned comparison.
- atomic_
xadd_ ⚠acqrel Experimental - Adds to the current value, returning the previous value.
- atomic_
xadd_ ⚠acquire Experimental - Adds to the current value, returning the previous value.
- atomic_
xadd_ ⚠relaxed Experimental - Adds to the current value, returning the previous value.
- atomic_
xadd_ ⚠release Experimental - Adds to the current value, returning the previous value.
- atomic_
xadd_ ⚠seqcst Experimental - Adds to the current value, returning the previous value.
- atomic_
xchg_ ⚠acqrel Experimental - Stores the value at the specified memory location, returning the old value.
- atomic_
xchg_ ⚠acquire Experimental - Stores the value at the specified memory location, returning the old value.
- atomic_
xchg_ ⚠relaxed Experimental - Stores the value at the specified memory location, returning the old value.
- atomic_
xchg_ ⚠release Experimental - Stores the value at the specified memory location, returning the old value.
- atomic_
xchg_ ⚠seqcst Experimental - Stores the value at the specified memory location, returning the old value.
- atomic_
xor_ ⚠acqrel Experimental - Bitwise xor with the current value, returning the previous value.
- atomic_
xor_ ⚠acquire Experimental - Bitwise xor with the current value, returning the previous value.
- atomic_
xor_ ⚠relaxed Experimental - Bitwise xor with the current value, returning the previous value.
- atomic_
xor_ ⚠release Experimental - Bitwise xor with the current value, returning the previous value.
- atomic_
xor_ ⚠seqcst Experimental - Bitwise xor with the current value, returning the previous value.
- atomic_
xsub_ ⚠acqrel Experimental - Subtract from the current value, returning the previous value.
- atomic_
xsub_ ⚠acquire Experimental - Subtract from the current value, returning the previous value.
- atomic_
xsub_ ⚠relaxed Experimental - Subtract from the current value, returning the previous value.
- atomic_
xsub_ ⚠release Experimental - Subtract from the current value, returning the previous value.
- atomic_
xsub_ ⚠seqcst Experimental - Subtract from the current value, returning the previous value.
- bitreverse
Experimental - Reverses the bits in an integer type
T
. - black_
box Experimental - See documentation of
std::hint::black_box
for details. - breakpoint
Experimental - Executes a breakpoint trap, for inspection by a debugger.
- bswap
Experimental - Reverses the bytes in an integer type
T
. - caller_
location Experimental - Gets a reference to a static
Location
indicating where it was called. - carrying_
mul_ add Experimental - Performs full-width multiplication and addition with a carry:
multiplier * multiplicand + addend + carry
. - catch_
unwind ⚠Experimental - Rust’s “try catch” construct for unwinding. Invokes the function pointer
try_fn
with the data pointerdata
, and callscatch_fn
if unwinding occurs whiletry_fn
runs. - ceilf16⚠
Experimental - Returns the smallest integer greater than or equal to an
f16
. - ceilf32⚠
Experimental - Returns the smallest integer greater than or equal to an
f32
. - ceilf64⚠
Experimental - Returns the smallest integer greater than or equal to an
f64
. - ceilf128⚠
Experimental - Returns the smallest integer greater than or equal to an
f128
. - cold_
path Experimental - Hints to the compiler that current code path is cold.
- compare_
bytes ⚠Experimental - Lexicographically compare
[left, left + bytes)
and[right, right + bytes)
as unsigned bytes, returning negative ifleft
is less, zero if all the bytes match, or positive ifleft
is greater. - const_
allocate ⚠Experimental - Allocates a block of memory at compile time. At runtime, just returns a null pointer.
- const_
deallocate ⚠Experimental - Deallocates a memory which allocated by
intrinsics::const_allocate
at compile time. At runtime, does nothing. - const_
eval_ select Experimental - Selects which function to call depending on the context.
- copysignf16⚠
Experimental - Copies the sign from
y
tox
forf16
values. - copysignf32⚠
Experimental - Copies the sign from
y
tox
forf32
values. - copysignf64⚠
Experimental - Copies the sign from
y
tox
forf64
values. - copysignf128⚠
Experimental - Copies the sign from
y
tox
forf128
values. - cosf16⚠
Experimental - Returns the cosine of an
f16
. - cosf32⚠
Experimental - Returns the cosine of an
f32
. - cosf64⚠
Experimental - Returns the cosine of an
f64
. - cosf128⚠
Experimental - Returns the cosine of an
f128
. - ctlz
Experimental - Returns the number of leading unset bits (zeroes) in an integer type
T
. - ctlz_
nonzero ⚠Experimental - Like
ctlz
, but extra-unsafe as it returnsundef
when given anx
with value0
. - ctpop
Experimental - Returns the number of bits set in an integer type
T
- cttz
Experimental - Returns the number of trailing unset bits (zeroes) in an integer type
T
. - cttz_
nonzero ⚠Experimental - Like
cttz
, but extra-unsafe as it returnsundef
when given anx
with value0
. - discriminant_
value Experimental - Returns the value of the discriminant for the variant in ‘v’;
if
T
has no discriminant, returns0
. - exact_
div ⚠Experimental - Performs an exact division, resulting in undefined behavior where
x % y != 0
ory == 0
orx == T::MIN && y == -1
- exp2f16⚠
Experimental - Returns 2 raised to the power of an
f16
. - exp2f32⚠
Experimental - Returns 2 raised to the power of an
f32
. - exp2f64⚠
Experimental - Returns 2 raised to the power of an
f64
. - exp2f128⚠
Experimental - Returns 2 raised to the power of an
f128
. - expf16⚠
Experimental - Returns the exponential of an
f16
. - expf32⚠
Experimental - Returns the exponential of an
f32
. - expf64⚠
Experimental - Returns the exponential of an
f64
. - expf128⚠
Experimental - Returns the exponential of an
f128
. - fabsf16⚠
Experimental - Returns the absolute value of an
f16
. - fabsf32⚠
Experimental - Returns the absolute value of an
f32
. - fabsf64⚠
Experimental - Returns the absolute value of an
f64
. - fabsf128⚠
Experimental - Returns the absolute value of an
f128
. - fadd_
algebraic Experimental - Float addition that allows optimizations based on algebraic rules.
- fadd_
fast ⚠Experimental - Float addition that allows optimizations based on algebraic rules. May assume inputs are finite.
- fdiv_
algebraic Experimental - Float division that allows optimizations based on algebraic rules.
- fdiv_
fast ⚠Experimental - Float division that allows optimizations based on algebraic rules. May assume inputs are finite.
- float_
to_ ⚠int_ unchecked Experimental - Converts with LLVM’s fptoui/fptosi, which may return undef for values out of range (https://github.com/rust-lang/rust/issues/10184)
- floorf16⚠
Experimental - Returns the largest integer less than or equal to an
f16
. - floorf32⚠
Experimental - Returns the largest integer less than or equal to an
f32
. - floorf64⚠
Experimental - Returns the largest integer less than or equal to an
f64
. - floorf128⚠
Experimental - Returns the largest integer less than or equal to an
f128
. - fmaf16⚠
Experimental - Returns
a * b + c
forf16
values. - fmaf32⚠
Experimental - Returns
a * b + c
forf32
values. - fmaf64⚠
Experimental - Returns
a * b + c
forf64
values. - fmaf128⚠
Experimental - Returns
a * b + c
forf128
values. - fmul_
algebraic Experimental - Float multiplication that allows optimizations based on algebraic rules.
- fmul_
fast ⚠Experimental - Float multiplication that allows optimizations based on algebraic rules. May assume inputs are finite.
- fmuladdf16⚠
Experimental - Returns
a * b + c
forf16
values, non-deterministically executing either a fused multiply-add or two operations with rounding of the intermediate result. - fmuladdf32⚠
Experimental - Returns
a * b + c
forf32
values, non-deterministically executing either a fused multiply-add or two operations with rounding of the intermediate result. - fmuladdf64⚠
Experimental - Returns
a * b + c
forf64
values, non-deterministically executing either a fused multiply-add or two operations with rounding of the intermediate result. - fmuladdf128⚠
Experimental - Returns
a * b + c
forf128
values, non-deterministically executing either a fused multiply-add or two operations with rounding of the intermediate result. - forget
Experimental - Moves a value out of scope without running drop glue.
- frem_
algebraic Experimental - Float remainder that allows optimizations based on algebraic rules.
- frem_
fast ⚠Experimental - Float remainder that allows optimizations based on algebraic rules. May assume inputs are finite.
- fsub_
algebraic Experimental - Float subtraction that allows optimizations based on algebraic rules.
- fsub_
fast ⚠Experimental - Float subtraction that allows optimizations based on algebraic rules. May assume inputs are finite.
- is_
val_ statically_ known Experimental - Returns whether the argument’s value is statically known at compile-time.
- likely
Experimental - Hints to the compiler that branch condition is likely to be true. Returns the value passed to it.
- log2f16⚠
Experimental - Returns the base 2 logarithm of an
f16
. - log2f32⚠
Experimental - Returns the base 2 logarithm of an
f32
. - log2f64⚠
Experimental - Returns the base 2 logarithm of an
f64
. - log2f128⚠
Experimental - Returns the base 2 logarithm of an
f128
. - log10f16⚠
Experimental - Returns the base 10 logarithm of an
f16
. - log10f32⚠
Experimental - Returns the base 10 logarithm of an
f32
. - log10f64⚠
Experimental - Returns the base 10 logarithm of an
f64
. - log10f128⚠
Experimental - Returns the base 10 logarithm of an
f128
. - logf16⚠
Experimental - Returns the natural logarithm of an
f16
. - logf32⚠
Experimental - Returns the natural logarithm of an
f32
. - logf64⚠
Experimental - Returns the natural logarithm of an
f64
. - logf128⚠
Experimental - Returns the natural logarithm of an
f128
. - maxnumf16
Experimental - Returns the maximum of two
f16
values. - maxnumf32
Experimental - Returns the maximum of two
f32
values. - maxnumf64
Experimental - Returns the maximum of two
f64
values. - maxnumf128
Experimental - Returns the maximum of two
f128
values. - min_
align_ of Experimental - The minimum alignment of a type.
- min_
align_ ⚠of_ val Experimental - The required alignment of the referenced value.
- minnumf16
Experimental - Returns the minimum of two
f16
values. - minnumf32
Experimental - Returns the minimum of two
f32
values. - minnumf64
Experimental - Returns the minimum of two
f64
values. - minnumf128
Experimental - Returns the minimum of two
f128
values. - mul_
with_ overflow Experimental - Performs checked integer multiplication
- nearbyintf16⚠
Experimental - Returns the nearest integer to an
f16
. Changing the rounding mode is not possible in Rust, so this rounds half-way cases to the number with an even least significant digit. - nearbyintf32⚠
Experimental - Returns the nearest integer to an
f32
. Changing the rounding mode is not possible in Rust, so this rounds half-way cases to the number with an even least significant digit. - nearbyintf64⚠
Experimental - Returns the nearest integer to an
f64
. Changing the rounding mode is not possible in Rust, so this rounds half-way cases to the number with an even least significant digit. - nearbyintf128⚠
Experimental - Returns the nearest integer to an
f128
. Changing the rounding mode is not possible in Rust, so this rounds half-way cases to the number with an even least significant digit. - needs_
drop Experimental - Returns
true
if the actual type given asT
requires drop glue; returnsfalse
if the actual type provided forT
implementsCopy
. - nontemporal_
store ⚠Experimental - Emits a
nontemporal
store, which gives a hint to the CPU that the data should not be held in cache. Except for performance, this is fully equivalent toptr.write(val)
. - offset⚠
Experimental - Calculates the offset from a pointer.
- powf16⚠
Experimental - Raises an
f16
to anf16
power. - powf32⚠
Experimental - Raises an
f32
to anf32
power. - powf64⚠
Experimental - Raises an
f64
to anf64
power. - powf128⚠
Experimental - Raises an
f128
to anf128
power. - powif16⚠
Experimental - Raises an
f16
to an integer power. - powif32⚠
Experimental - Raises an
f32
to an integer power. - powif64⚠
Experimental - Raises an
f64
to an integer power. - powif128⚠
Experimental - Raises an
f128
to an integer power. - pref_
align_ ⚠of Experimental - The preferred alignment of a type.
- prefetch_
read_ ⚠data Experimental - The
prefetch
intrinsic is a hint to the code generator to insert a prefetch instruction if supported; otherwise, it is a no-op. Prefetches have no effect on the behavior of the program but can change its performance characteristics. - prefetch_
read_ ⚠instruction Experimental - The
prefetch
intrinsic is a hint to the code generator to insert a prefetch instruction if supported; otherwise, it is a no-op. Prefetches have no effect on the behavior of the program but can change its performance characteristics. - prefetch_
write_ ⚠data Experimental - The
prefetch
intrinsic is a hint to the code generator to insert a prefetch instruction if supported; otherwise, it is a no-op. Prefetches have no effect on the behavior of the program but can change its performance characteristics. - prefetch_
write_ ⚠instruction Experimental - The
prefetch
intrinsic is a hint to the code generator to insert a prefetch instruction if supported; otherwise, it is a no-op. Prefetches have no effect on the behavior of the program but can change its performance characteristics. - ptr_
guaranteed_ cmp Experimental - See documentation of
<*const T>::guaranteed_eq
for details. Returns2
if the result is unknown. Returns1
if the pointers are guaranteed equal. Returns0
if the pointers are guaranteed inequal. - ptr_
mask Experimental - Masks out bits of the pointer according to a mask.
- ptr_
metadata Experimental - Lowers in MIR to
Rvalue::UnaryOp
withUnOp::PtrMetadata
. - ptr_
offset_ ⚠from Experimental - See documentation of
<*const T>::offset_from
for details. - ptr_
offset_ ⚠from_ unsigned Experimental - See documentation of
<*const T>::sub_ptr
for details. - raw_eq⚠
Experimental - Determines whether the raw bytes of the two values are equal.
- read_
via_ ⚠copy Experimental - This is an implementation detail of
crate::ptr::read
and should not be used anywhere else. See its comments for why this exists. - rintf16⚠
Experimental - Returns the nearest integer to an
f16
. Changing the rounding mode is not possible in Rust, so this rounds half-way cases to the number with an even least significant digit. - rintf32⚠
Experimental - Returns the nearest integer to an
f32
. Changing the rounding mode is not possible in Rust, so this rounds half-way cases to the number with an even least significant digit. - rintf64⚠
Experimental - Returns the nearest integer to an
f64
. Changing the rounding mode is not possible in Rust, so this rounds half-way cases to the number with an even least significant digit. - rintf128⚠
Experimental - Returns the nearest integer to an
f128
. Changing the rounding mode is not possible in Rust, so this rounds half-way cases to the number with an even least significant digit. - rotate_
left Experimental - Performs rotate left.
- rotate_
right Experimental - Performs rotate right.
- roundevenf16⚠
Experimental - Returns the nearest integer to an
f16
. Rounds half-way cases to the number with an even least significant digit. - roundevenf32⚠
Experimental - Returns the nearest integer to an
f32
. Rounds half-way cases to the number with an even least significant digit. - roundevenf64⚠
Experimental - Returns the nearest integer to an
f64
. Rounds half-way cases to the number with an even least significant digit. - roundevenf128⚠
Experimental - Returns the nearest integer to an
f128
. Rounds half-way cases to the number with an even least significant digit. - roundf16⚠
Experimental - Returns the nearest integer to an
f16
. Rounds half-way cases away from zero. - roundf32⚠
Experimental - Returns the nearest integer to an
f32
. Rounds half-way cases away from zero. - roundf64⚠
Experimental - Returns the nearest integer to an
f64
. Rounds half-way cases away from zero. - roundf128⚠
Experimental - Returns the nearest integer to an
f128
. Rounds half-way cases away from zero. - rustc_
peek Experimental - Magic intrinsic that derives its meaning from attributes attached to the function.
- saturating_
add Experimental - Computes
a + b
, saturating at numeric bounds. - saturating_
sub Experimental - Computes
a - b
, saturating at numeric bounds. - select_
unpredictable Experimental - Returns either
true_val
orfalse_val
depending on conditionb
with a hint to the compiler that this condition is unlikely to be correctly predicted by a CPU’s branch predictor (e.g. a binary search). - sinf16⚠
Experimental - Returns the sine of an
f16
. - sinf32⚠
Experimental - Returns the sine of an
f32
. - sinf64⚠
Experimental - Returns the sine of an
f64
. - sinf128⚠
Experimental - Returns the sine of an
f128
. - size_of
Experimental - The size of a type in bytes.
- size_
of_ ⚠val Experimental - The size of the referenced value in bytes.
- sqrtf16⚠
Experimental - Returns the square root of an
f16
- sqrtf32⚠
Experimental - Returns the square root of an
f32
- sqrtf64⚠
Experimental - Returns the square root of an
f64
- sqrtf128⚠
Experimental - Returns the square root of an
f128
- sub_
with_ overflow Experimental - Performs checked integer subtraction
- three_
way_ compare Experimental - Does a three-way comparison between the two integer arguments.
- transmute_
unchecked ⚠Experimental - Like
transmute
, but even less checked at compile-time: rather than giving an error forsize_of::<Src>() != size_of::<Dst>()
, it’s Undefined Behavior at runtime. - truncf16⚠
Experimental - Returns the integer part of an
f16
. - truncf32⚠
Experimental - Returns the integer part of an
f32
. - truncf64⚠
Experimental - Returns the integer part of an
f64
. - truncf128⚠
Experimental - Returns the integer part of an
f128
. - type_id
Experimental - Gets an identifier which is globally unique to the specified type. This function will return the same value for a type regardless of whichever crate it is invoked in.
- type_
name Experimental - Gets a static string slice containing the name of a type.
- typed_
swap_ ⚠nonoverlapping Experimental - Non-overlapping typed swap of a single value.
- ub_
checks Experimental - Returns whether we should perform some UB-checking at runtime. This eventually evaluates to
cfg!(ub_checks)
, but behaves different fromcfg!
when mixing crates built with different flags: if the crate has UB checks enabled or carries the#[rustc_preserve_ub_checks]
attribute, evaluation is delayed until monomorphization (or until the call gets inlined into a crate that does not delay evaluation further); otherwise it can happen any time. - unaligned_
volatile_ ⚠load Experimental - Performs a volatile load from the
src
pointer The pointer is not required to be aligned. - unaligned_
volatile_ ⚠store Experimental - Performs a volatile store to the
dst
pointer. The pointer is not required to be aligned. - unchecked_
add ⚠Experimental - Returns the result of an unchecked addition, resulting in
undefined behavior when
x + y > T::MAX
orx + y < T::MIN
. - unchecked_
div ⚠Experimental - Performs an unchecked division, resulting in undefined behavior
where
y == 0
orx == T::MIN && y == -1
- unchecked_
mul ⚠Experimental - Returns the result of an unchecked multiplication, resulting in
undefined behavior when
x * y > T::MAX
orx * y < T::MIN
. - unchecked_
rem ⚠Experimental - Returns the remainder of an unchecked division, resulting in
undefined behavior when
y == 0
orx == T::MIN && y == -1
- unchecked_
shl ⚠Experimental - Performs an unchecked left shift, resulting in undefined behavior when
y < 0
ory >= N
, where N is the width of T in bits. - unchecked_
shr ⚠Experimental - Performs an unchecked right shift, resulting in undefined behavior when
y < 0
ory >= N
, where N is the width of T in bits. - unchecked_
sub ⚠Experimental - Returns the result of an unchecked subtraction, resulting in
undefined behavior when
x - y > T::MAX
orx - y < T::MIN
. - unlikely
Experimental - Hints to the compiler that branch condition is likely to be false. Returns the value passed to it.
- unreachable⚠
Experimental - Informs the optimizer that this point in the code is not reachable, enabling further optimizations.
- variant_
count Experimental - Returns the number of variants of the type
T
cast to ausize
; ifT
has no variants, returns0
. Uninhabited variants will be counted. - volatile_
copy_ ⚠memory Experimental - Equivalent to the appropriate
llvm.memmove.p0i8.0i8.*
intrinsic, with a size ofcount * size_of::<T>()
and an alignment ofmin_align_of::<T>()
- volatile_
copy_ ⚠nonoverlapping_ memory Experimental - Equivalent to the appropriate
llvm.memcpy.p0i8.0i8.*
intrinsic, with a size ofcount
*size_of::<T>()
and an alignment ofmin_align_of::<T>()
- volatile_
load ⚠Experimental - Performs a volatile load from the
src
pointer. - volatile_
set_ ⚠memory Experimental - Equivalent to the appropriate
llvm.memset.p0i8.*
intrinsic, with a size ofcount * size_of::<T>()
and an alignment ofmin_align_of::<T>()
. - volatile_
store ⚠Experimental - Performs a volatile store to the
dst
pointer. - vtable_
align ⚠Experimental - The intrinsic will return the alignment stored in that vtable.
- vtable_
size ⚠Experimental - The intrinsic will return the size stored in that vtable.
- wrapping_
add Experimental - Returns (a + b) mod 2N, where N is the width of T in bits.
- wrapping_
mul Experimental - Returns (a * b) mod 2N, where N is the width of T in bits.
- wrapping_
sub Experimental - Returns (a - b) mod 2N, where N is the width of T in bits.
- write_
via_ ⚠move Experimental - This is an implementation detail of
crate::ptr::write
and should not be used anywhere else. See its comments for why this exists.