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
In order to make an intrinsic unstable usable at compile-time, copy the implementation from
https://github.com/rust-lang/miri/blob/master/src/intrinsics to
https://github.com/rust-lang/rust/blob/master/compiler/rustc_const_eval/src/interpret/intrinsics.rs
and make the intrinsic declaration below a const fn
. This should be done in coordination with
wg-const-eval.
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.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
and_ ⚠acquire Experimental - Bitwise and with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
and_ ⚠relaxed Experimental - Bitwise and with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
and_ ⚠release Experimental - Bitwise and with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
and_ ⚠seqcst Experimental - Bitwise and with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
cxchg_ ⚠acqrel_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠acqrel_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠acqrel_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠acquire_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠acquire_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠acquire_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠relaxed_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠relaxed_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠relaxed_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠release_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠release_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠release_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠seqcst_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠seqcst_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchg_ ⚠seqcst_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠acqrel_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠acqrel_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠acqrel_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠acquire_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠acquire_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠acquire_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠relaxed_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠relaxed_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠relaxed_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠release_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠release_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠release_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠seqcst_ acquire Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠seqcst_ relaxed Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - atomic_
cxchgweak_ ⚠seqcst_ seqcst Experimental - Stores a value if the current value is the same as the
old
value.T
must be an integer or pointer type. - 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.
T
must be an integer or pointer type. - atomic_
load_ ⚠relaxed Experimental - Loads the current value of the pointer.
T
must be an integer or pointer type. - atomic_
load_ ⚠seqcst Experimental - Loads the current value of the pointer.
T
must be an integer or pointer type. - 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.
T
must be a signed integer type. - atomic_
max_ ⚠acquire Experimental - Maximum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
max_ ⚠relaxed Experimental - Maximum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
max_ ⚠release Experimental - Maximum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
max_ ⚠seqcst Experimental - Maximum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
min_ ⚠acqrel Experimental - Minimum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
min_ ⚠acquire Experimental - Minimum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
min_ ⚠relaxed Experimental - Minimum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
min_ ⚠release Experimental - Minimum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
min_ ⚠seqcst Experimental - Minimum with the current value using a signed comparison.
T
must be a signed integer type. - atomic_
nand_ ⚠acqrel Experimental - Bitwise nand with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
nand_ ⚠acquire Experimental - Bitwise nand with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
nand_ ⚠relaxed Experimental - Bitwise nand with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
nand_ ⚠release Experimental - Bitwise nand with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
nand_ ⚠seqcst Experimental - Bitwise nand with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
or_ ⚠acqrel Experimental - Bitwise or with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
or_ ⚠acquire Experimental - Bitwise or with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
or_ ⚠relaxed Experimental - Bitwise or with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
or_ ⚠release Experimental - Bitwise or with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
or_ ⚠seqcst Experimental - Bitwise or with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - 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.
T
must be an integer or pointer type. - atomic_
store_ ⚠release Experimental - Stores the value at the specified memory location.
T
must be an integer or pointer type. - atomic_
store_ ⚠seqcst Experimental - Stores the value at the specified memory location.
T
must be an integer or pointer type. - 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.
T
must be an unsigned integer type. - atomic_
umax_ ⚠acquire Experimental - Maximum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
umax_ ⚠relaxed Experimental - Maximum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
umax_ ⚠release Experimental - Maximum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
umax_ ⚠seqcst Experimental - Maximum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
umin_ ⚠acqrel Experimental - Minimum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
umin_ ⚠acquire Experimental - Minimum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
umin_ ⚠relaxed Experimental - Minimum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
umin_ ⚠release Experimental - Minimum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
umin_ ⚠seqcst Experimental - Minimum with the current value using an unsigned comparison.
T
must be an unsigned integer type. - atomic_
xadd_ ⚠acqrel Experimental - Adds to the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xadd_ ⚠acquire Experimental - Adds to the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xadd_ ⚠relaxed Experimental - Adds to the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xadd_ ⚠release Experimental - Adds to the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xadd_ ⚠seqcst Experimental - Adds to the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xchg_ ⚠acqrel Experimental - Stores the value at the specified memory location, returning the old value.
T
must be an integer or pointer type. - atomic_
xchg_ ⚠acquire Experimental - Stores the value at the specified memory location, returning the old value.
T
must be an integer or pointer type. - atomic_
xchg_ ⚠relaxed Experimental - Stores the value at the specified memory location, returning the old value.
T
must be an integer or pointer type. - atomic_
xchg_ ⚠release Experimental - Stores the value at the specified memory location, returning the old value.
T
must be an integer or pointer type. - atomic_
xchg_ ⚠seqcst Experimental - Stores the value at the specified memory location, returning the old value.
T
must be an integer or pointer type. - atomic_
xor_ ⚠acqrel Experimental - Bitwise xor with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xor_ ⚠acquire Experimental - Bitwise xor with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xor_ ⚠relaxed Experimental - Bitwise xor with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xor_ ⚠release Experimental - Bitwise xor with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xor_ ⚠seqcst Experimental - Bitwise xor with the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xsub_ ⚠acqrel Experimental - Subtract from the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xsub_ ⚠acquire Experimental - Subtract from the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xsub_ ⚠relaxed Experimental - Subtract from the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xsub_ ⚠release Experimental - Subtract from the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - atomic_
xsub_ ⚠seqcst Experimental - Subtract from the current value, returning the previous value.
T
must be an integer or pointer type. IfT
is a pointer type, the provenance ofsrc
is ignored: both the return value and the new value stored at*dst
will have the provenance of the old value stored there. - 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. Returns1
if unwinding occurred andcatch_fn
was called; returns0
otherwise. - 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.
- contract_
check_ ensures Experimental - Check if the post-condition
cond
has been met. - contract_
check_ requires Experimental - Check if the pre-condition
cond
has been met. - contract_
checks Experimental - Returns whether we should perform contract-checking at runtime.
- 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
. - disjoint_
bitor ⚠Experimental - Combine two values which have no bits in common.
- 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
- 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. - rintf32⚠
Experimental - Provided for compatibility with stdarch. DO NOT USE.
- rintf64⚠
Experimental - Provided for compatibility with stdarch. DO NOT USE.
- rotate_
left Experimental - Performs rotate left.
- rotate_
right Experimental - Performs rotate right.
- round_
ties_ even_ f16 Experimental - Returns the nearest integer to an
f16
. Rounds half-way cases to the number with an even least significant digit. - round_
ties_ even_ f32 Experimental - Returns the nearest integer to an
f32
. Rounds half-way cases to the number with an even least significant digit. - round_
ties_ even_ f64 Experimental - Returns the nearest integer to an
f64
. Rounds half-way cases to the number with an even least significant digit. - round_
ties_ even_ f128 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 arguments, which must be of character or integer (signed or unsigned) type.
- 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.