Skip to content

@atomic

Import this module with import @atomic.

Lock-free atomic operations backed by hand-written assembly (ARM64 and x86_64). Compiler-only feature.

All pointer arguments must be ^i64 (pointer to i64).

Function Signature Description
load (ptr ^i64) -> i64 Atomically load a value
store (ptr ^i64, val i64) Atomically store a value
add (ptr ^i64, val i64) -> i64 Atomic add; returns previous value
sub (ptr ^i64, val i64) -> i64 Atomic subtract; returns previous value
exchange (ptr ^i64, val i64) -> i64 Atomic swap; returns previous value
cas (ptr ^i64, expected i64, desired i64) -> bool Compare-and-swap; returns true on success
and (ptr ^i64, val i64) -> i64 Atomic bitwise AND; returns previous value
or (ptr ^i64, val i64) -> i64 Atomic bitwise OR; returns previous value
xor (ptr ^i64, val i64) -> i64 Atomic bitwise XOR; returns previous value
Function Signature Description
spinlock () -> SpinLock Create a new spinlock
spin_lock (lk SpinLock) Acquire a spinlock (spins until acquired)
spin_trylock (lk SpinLock) -> bool Try to acquire; returns true if acquired
spin_unlock (lk SpinLock) Release a spinlock
spinlock_destroy (lk SpinLock) Destroy a spinlock and free its resources
Function Signature Description
fence () Full memory barrier (sequential consistency)