Function core::arch::x86_64::cmpxchg16b
source · pub unsafe fn cmpxchg16b(
dst: *mut u128,
old: u128,
new: u128,
success: Ordering,
failure: Ordering
) -> u128
stdsimd
#48556)cmpxchg16b
only.Expand description
Compares and exchange 16 bytes (128 bits) of data atomically.
This intrinsic corresponds to the cmpxchg16b
instruction on x86_64
processors. It performs an atomic compare-and-swap, updating the ptr
memory location to val
if the current value in memory equals old
.
Return value
This function returns the previous value at the memory location. If it is
equal to old
then the memory was updated to new
.
Memory Orderings
This atomic operations has the same semantics of memory orderings as
AtomicUsize::compare_exchange
does, only operating on 16 bytes of memory
instead of just a pointer.
For more information on memory orderings here see the compare_exchange
documentation for other Atomic*
types in the standard library.
Unsafety
This method is unsafe because it takes a raw pointer and will attempt to read and possibly write the memory at the pointer. The pointer must also be aligned on a 16-byte boundary.
This method also requires the cmpxchg16b
CPU feature to be available at
runtime to work correctly. If the CPU running the binary does not actually
support cmpxchg16b
and the program enters an execution path that
eventually would reach this function the behavior is undefined.
The failure ordering must be Ordering::SeqCst
, Ordering::Acquire
or
Ordering::Relaxed
, or this function call is undefined. See the Atomic*
documentation’s compare_exchange
function for more information. When
compare_exchange
panics, this is undefined behavior. Currently this
function aborts the process with an undefined instruction.