Skip to content

Compiler Atomics, Volatile Access & Fences

include/compiler/atomic.h View source View on GitHub
#define ca_read_once(x)
source
Expansion
#define ca_read_once(x) (*(const volatile typeof(x) *) &(x))
#define ca_write_once(x, val)
source
Expansion
#define ca_write_once(x, val) \
    do { \
        *(volatile typeof(x) *) &(x) = (val); \
    } while (0)

Compiler optimization barrier

#define ca_barrier()
source
Expansion
#define ca_barrier() asm volatile("" ::: "memory")
#define ca_mb()
source
Expansion
#define ca_mb() __atomic_thread_fence(__ATOMIC_SEQ_CST)
#define ca_rmb()
source
Expansion
#define ca_rmb() __atomic_thread_fence(__ATOMIC_ACQUIRE)
#define ca_wmb()
source
Expansion
#define ca_wmb() __atomic_thread_fence(__ATOMIC_RELEASE)
#define ca_pause()
source
Expansion
#define ca_pause() asm volatile("pause" ::: "memory")
#define ca_pause()
source
Expansion
#define ca_pause() asm volatile("isb" ::: "memory")
#define ca_pause()
source
Expansion
#define ca_pause() ca_barrier()