Compiler intrinsics.
The corresponding definitions are in librustc_codegen_llvm/intrinsic.rs
.
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].
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:
volatile
.copy⚠ |
Copies |
copy_nonoverlapping⚠ |
Copies |
drop_in_place⚠ |
Executes the destructor (if any) of the pointed-to value. |
transmute⚠ |
Reinterprets the bits of a value of one type as another type. |
write_bytes⚠ |
Sets |
abort⚠ |
Experimental Aborts the execution of the process. |
add_with_overflow |
Experimental Performs checked integer addition. The stabilized versions of this intrinsic are available on the integer primitives via the |
arith_offset⚠ |
Experimental Calculates the offset from a pointer, potentially wrapping. |
assume⚠ |
Experimental Informs the optimizer that a condition is always true. If the condition is false, the behavior is undefined. |
atomic_and⚠ |
Experimental Bitwise and with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_and_acq⚠ |
Experimental Bitwise and with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_and_acqrel⚠ |
Experimental Bitwise and with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_and_rel⚠ |
Experimental Bitwise and with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_and_relaxed⚠ |
Experimental Bitwise and with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_cxchg⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchg_acq⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchg_acq_failrelaxed⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchg_acqrel⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchg_acqrel_failrelaxed⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchg_failacq⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchg_failrelaxed⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchg_rel⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchg_relaxed⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak_acq⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak_acq_failrelaxed⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak_acqrel⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak_acqrel_failrelaxed⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak_failacq⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak_failrelaxed⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak_rel⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_cxchgweak_relaxed⚠ |
Experimental Stores a value if the current value is the same as the |
atomic_fence⚠ | Experimental |
atomic_fence_acq⚠ | Experimental |
atomic_fence_acqrel⚠ | Experimental |
atomic_fence_rel⚠ | Experimental |
atomic_load⚠ |
Experimental Loads the current value of the pointer. The stabilized version of this intrinsic is available on the |
atomic_load_acq⚠ |
Experimental Loads the current value of the pointer. The stabilized version of this intrinsic is available on the |
atomic_load_relaxed⚠ |
Experimental Loads the current value of the pointer. The stabilized version of this intrinsic is available on the |
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 Bitwise nand with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_nand_acq⚠ |
Experimental Bitwise nand with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_nand_acqrel⚠ |
Experimental Bitwise nand with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_nand_rel⚠ |
Experimental Bitwise nand with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_nand_relaxed⚠ |
Experimental Bitwise nand with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_or⚠ |
Experimental Bitwise or with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_or_acq⚠ |
Experimental Bitwise or with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_or_acqrel⚠ |
Experimental Bitwise or with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_or_rel⚠ |
Experimental Bitwise or with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_or_relaxed⚠ |
Experimental Bitwise or with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_singlethreadfence⚠ |
Experimental A compiler-only memory barrier. |
atomic_singlethreadfence_acq⚠ | Experimental |
atomic_singlethreadfence_acqrel⚠ | Experimental |
atomic_singlethreadfence_rel⚠ | Experimental |
atomic_store⚠ |
Experimental Stores the value at the specified memory location. The stabilized version of this intrinsic is available on the |
atomic_store_rel⚠ |
Experimental Stores the value at the specified memory location. The stabilized version of this intrinsic is available on the |
atomic_store_relaxed⚠ |
Experimental Stores the value at the specified memory location. The stabilized version of this intrinsic is available on the |
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 Adds to the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xadd_acq⚠ |
Experimental Adds to the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xadd_acqrel⚠ |
Experimental Adds to the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xadd_rel⚠ |
Experimental Adds to the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xadd_relaxed⚠ |
Experimental Adds to the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xchg⚠ |
Experimental Stores the value at the specified memory location, returning the old value. The stabilized version of this intrinsic is available on the |
atomic_xchg_acq⚠ |
Experimental Stores the value at the specified memory location, returning the old value. The stabilized version of this intrinsic is available on the |
atomic_xchg_acqrel⚠ |
Experimental Stores the value at the specified memory location, returning the old value. The stabilized version of this intrinsic is available on the |
atomic_xchg_rel⚠ |
Experimental Stores the value at the specified memory location, returning the old value. The stabilized version of this intrinsic is available on the |
atomic_xchg_relaxed⚠ |
Experimental Stores the value at the specified memory location, returning the old value. The stabilized version of this intrinsic is available on the |
atomic_xor⚠ |
Experimental Bitwise xor with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xor_acq⚠ |
Experimental Bitwise xor with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xor_acqrel⚠ |
Experimental Bitwise xor with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xor_rel⚠ |
Experimental Bitwise xor with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xor_relaxed⚠ |
Experimental Bitwise xor with the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xsub⚠ |
Experimental Subtract from the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xsub_acq⚠ |
Experimental Subtract from the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xsub_acqrel⚠ |
Experimental Subtract from the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xsub_rel⚠ |
Experimental Subtract from the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
atomic_xsub_relaxed⚠ |
Experimental Subtract from the current value, returning the previous value. The stabilized version of this intrinsic is available on the |
bitreverse |
Experimental Reverses the bits in an integer type |
breakpoint⚠ |
Experimental Executes a breakpoint trap, for inspection by a debugger. |
bswap |
Experimental Reverses the bytes in an integer type |
ceilf32⚠ |
Experimental Returns the smallest integer greater than or equal to an |
ceilf64⚠ |
Experimental Returns the smallest integer greater than or equal to an |
copysignf32⚠ |
Experimental Copies the sign from |
copysignf64⚠ |
Experimental Copies the sign from |
cosf32⚠ |
Experimental Returns the cosine of an |
cosf64⚠ |
Experimental Returns the cosine of an |
ctlz |
Experimental Returns the number of leading unset bits (zeroes) in an integer type |
ctlz_nonzero⚠ |
Experimental Like |
ctpop |
Experimental Returns the number of bits set in an integer type |
cttz |
Experimental Returns the number of trailing unset bits (zeroes) in an integer type |
cttz_nonzero⚠ |
Experimental Like |
discriminant_value⚠ |
Experimental Returns the value of the discriminant for the variant in 'v', cast to a |
exact_div⚠ |
Experimental Performs an exact division, resulting in undefined behavior where |
exp2f32⚠ |
Experimental Returns 2 raised to the power of an |
exp2f64⚠ |
Experimental Returns 2 raised to the power of an |
expf32⚠ |
Experimental Returns the exponential of an |
expf64⚠ |
Experimental Returns the exponential of an |
fabsf32⚠ |
Experimental Returns the absolute value of an |
fabsf64⚠ |
Experimental Returns the absolute value of an |
fadd_fast⚠ |
Experimental Float addition that allows optimizations based on algebraic rules. May assume inputs are finite. |
fdiv_fast⚠ |
Experimental Float division that allows optimizations based on algebraic rules. May assume inputs are finite. |
floorf32⚠ |
Experimental Returns the largest integer less than or equal to an |
floorf64⚠ |
Experimental Returns the largest integer less than or equal to an |
fmaf32⚠ |
Experimental Returns |
fmaf64⚠ |
Experimental Returns |
fmul_fast⚠ |
Experimental Float multiplication that allows optimizations based on algebraic rules. May assume inputs are finite. |
forget⚠ |
Experimental Moves a value out of scope without running drop glue. |
frem_fast⚠ |
Experimental Float remainder that allows optimizations based on algebraic rules. May assume inputs are finite. |
fsub_fast⚠ |
Experimental Float subtraction that allows optimizations based on algebraic rules. May assume inputs are finite. |
init⚠ |
Experimental Creates a value initialized to zero. |
likely⚠ |
Experimental Hints to the compiler that branch condition is likely to be true. Returns the value passed to it. |
log10f32⚠ |
Experimental Returns the base 10 logarithm of an |
log10f64⚠ |
Experimental Returns the base 10 logarithm of an |
log2f32⚠ |
Experimental Returns the base 2 logarithm of an |
log2f64⚠ |
Experimental Returns the base 2 logarithm of an |
logf32⚠ |
Experimental Returns the natural logarithm of an |
logf64⚠ |
Experimental Returns the natural logarithm of an |
maxnumf32 |
Experimental Returns the maximum of two |
maxnumf64 |
Experimental Returns the maximum of two |
min_align_of | Experimental |
min_align_of_val⚠ | Experimental |
minnumf32 |
Experimental Returns the minimum of two |
minnumf64 |
Experimental Returns the minimum of two |
move_val_init⚠ |
Experimental Moves a value to an uninitialized memory location. |
mul_with_overflow |
Experimental Performs checked integer multiplication The stabilized versions of this intrinsic are available on the integer primitives via the |
nearbyintf32⚠ |
Experimental Returns the nearest integer to an |
nearbyintf64⚠ |
Experimental Returns the nearest integer to an |
needs_drop |
Experimental Returns |
nontemporal_store⚠ |
Experimental Emits a |
offset⚠ |
Experimental Calculates the offset from a pointer. |
overflowing_add |
Experimental Returns (a + b) mod 2N, where N is the width of T in bits. The stabilized versions of this intrinsic are available on the integer primitives via the |
overflowing_mul |
Experimental Returns (a * b) mod 2N, where N is the width of T in bits. The stabilized versions of this intrinsic are available on the integer primitives via the |
overflowing_sub |
Experimental Returns (a - b) mod 2N, where N is the width of T in bits. The stabilized versions of this intrinsic are available on the integer primitives via the |
panic_if_uninhabited⚠ |
Experimental A guard for unsafe functions that cannot ever be executed if |
powf32⚠ |
Experimental Raises an |
powf64⚠ |
Experimental Raises an |
powif32⚠ |
Experimental Raises an |
powif64⚠ |
Experimental Raises an |
pref_align_of⚠ | Experimental |
prefetch_read_data⚠ |
Experimental The |
prefetch_read_instruction⚠ |
Experimental The |
prefetch_write_data⚠ |
Experimental The |
prefetch_write_instruction⚠ |
Experimental The |
rintf32⚠ |
Experimental Returns the nearest integer to an |
rintf64⚠ |
Experimental Returns the nearest integer to an |
rotate_left |
Experimental Performs rotate left. The stabilized versions of this intrinsic are available on the integer primitives via the |
rotate_right |
Experimental Performs rotate right. The stabilized versions of this intrinsic are available on the integer primitives via the |
roundf32⚠ |
Experimental Returns the nearest integer to an |
roundf64⚠ |
Experimental Returns the nearest integer to an |
rustc_peek⚠ |
Experimental Magic intrinsic that derives its meaning from attributes attached to the function. |
saturating_add |
Experimental Computes |
saturating_sub |
Experimental Computes |
sinf32⚠ |
Experimental Returns the sine of an |
sinf64⚠ |
Experimental Returns the sine of an |
size_of |
Experimental The size of a type in bytes. |
size_of_val⚠ |
Experimental The size of the referenced value in bytes. |
sqrtf32⚠ |
Experimental Returns the square root of an |
sqrtf64⚠ |
Experimental Returns the square root of an |
sub_with_overflow |
Experimental Performs checked integer subtraction The stabilized versions of this intrinsic are available on the integer primitives via the |
truncf32⚠ |
Experimental Returns the integer part of an |
truncf64⚠ |
Experimental Returns the integer part of an |
try⚠ |
Experimental Rust's "try catch" construct which invokes the function pointer |
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. |
unaligned_volatile_load⚠ |
Experimental Performs a volatile load from the |
unaligned_volatile_store⚠ |
Experimental Performs a volatile store to the |
unchecked_add⚠ |
Experimental Returns the result of an unchecked addition, resulting in undefined behavior when |
unchecked_div⚠ |
Experimental Performs an unchecked division, resulting in undefined behavior where y = 0 or x = |
unchecked_mul⚠ |
Experimental Returns the result of an unchecked multiplication, resulting in undefined behavior when |
unchecked_rem⚠ |
Experimental Returns the remainder of an unchecked division, resulting in undefined behavior where y = 0 or x = |
unchecked_shl⚠ |
Experimental Performs an unchecked left shift, resulting in undefined behavior when y < 0 or y >= 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 or y >= N, where N is the width of T in bits. |
unchecked_sub⚠ |
Experimental Returns the result of an unchecked substraction, resulting in undefined behavior when |
uninit⚠ |
Experimental Creates an uninitialized value. |
unlikely⚠ |
Experimental Hints to the compiler that branch condition is likely to be false. Returns the value passed to it. |
unreachable⚠ |
Experimental Tells LLVM that this point in the code is not reachable, enabling further optimizations. |
volatile_copy_memory⚠ |
Experimental Equivalent to the appropriate |
volatile_copy_nonoverlapping_memory⚠ |
Experimental Equivalent to the appropriate |
volatile_load⚠ |
Experimental Performs a volatile load from the |
volatile_set_memory⚠ |
Experimental Equivalent to the appropriate |
volatile_store⚠ |
Experimental Performs a volatile store to the |
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/intrinsics/index.html