arch::[−][src] x86_64:: cmpxchg16b
pub unsafe fn cmpxchg16b(
dst: *mut u128,
) -> u128
Compares and exchange 16 bytes (128 bits) of data atomically.
This intrinsic corresponds to the
cmpxchg16b instruction on
processors. It performs an atomic compare-and-swap, updating the
memory location to
val if the current value in memory equals
This function returns the previous value at the memory location. If it is
old then the memory was updated to
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
documentation for other
Atomic* types in the standard library.
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
cmpxchg16b and the program enters an execution path that
eventually would reach this function the behavior is undefined.
success ordering must also be stronger or equal to
failure, or this
function call is undefined. See the
compare_exchange function for more information. When
panics, this is undefined behavior. Currently this function aborts the
process with an undefined instruction.