20 #if defined(__clang__) 21 #pragma clang diagnostic push 22 #pragma clang diagnostic ignored "-Watomic-alignment" 55 __atomic_store_n(&a->
value, initial, __ATOMIC_RELAXED);
70 return __atomic_load_n(&a->
value, __ATOMIC_RELAXED);
84 __atomic_store_n(&a->
value, v, __ATOMIC_RELAXED);
97 return __atomic_add_fetch(&a->
value, 1, __ATOMIC_RELAXED);
110 return __atomic_sub_fetch(&a->
value, 1, __ATOMIC_RELAXED);
123 (void)__atomic_fetch_or(&a->
value, mask, __ATOMIC_RELAXED);
137 (void)__atomic_fetch_and(&a->
value, ~mask, __ATOMIC_RELAXED);
142 #if defined(__clang__) 143 #pragma clang diagnostic pop static void sys_atomic_init(sys_atomic_t *a, uint32_t initial)
Initialize an atomic with an initial value.
uint32_t value
Raw atomic storage; use sys_atomic_* APIs instead.
static uint32_t sys_atomic_inc(sys_atomic_t *a)
Atomically increment and return the new value.
static uint32_t sys_atomic_get(const sys_atomic_t *a)
Load the current value atomically.
static void sys_atomic_clear_bits(sys_atomic_t *a, uint32_t mask)
Atomically clear bits (AND with ~mask).
static uint32_t sys_atomic_dec(sys_atomic_t *a)
Atomically decrement and return the new value.
static void sys_atomic_set(sys_atomic_t *a, uint32_t v)
Store a new value atomically.
Underlying atomic uint32_t value.
static void sys_atomic_set_bits(sys_atomic_t *a, uint32_t mask)
Atomically set bits (OR with mask).