18 #if defined(__clang__) 19 #pragma clang diagnostic push 20 #pragma clang diagnostic ignored "-Watomic-alignment" 51 __atomic_store_n(&a->value, initial, __ATOMIC_RELAXED);
66 return __atomic_load_n(&a->value, __ATOMIC_RELAXED);
80 __atomic_store_n(&a->value, v, __ATOMIC_RELAXED);
93 return __atomic_add_fetch(&a->value, 1, __ATOMIC_RELAXED);
106 return __atomic_sub_fetch(&a->value, 1, __ATOMIC_RELAXED);
119 (void)__atomic_fetch_or(&a->value, mask, __ATOMIC_RELAXED);
133 (void)__atomic_fetch_and(&a->value, ~mask, __ATOMIC_RELAXED);
136 #if defined(__clang__) 137 #pragma clang diagnostic pop static void sys_atomic_set_bits(sys_atomic_t *a, uint32_t mask)
Atomically set bits (OR with mask).
static uint32_t sys_atomic_dec(sys_atomic_t *a)
Atomically decrement and return the new value.
struct sys_atomic_t __attribute__((aligned(4)))
Underlying atomic uint32_t value.
static void sys_atomic_init(sys_atomic_t *a, uint32_t initial)
Initialize an atomic with an initial value.
static void sys_atomic_set(sys_atomic_t *a, uint32_t v)
Store a new value atomically.
static uint32_t sys_atomic_inc(sys_atomic_t *a)
Atomically increment and return the new value.
static void sys_atomic_clear_bits(sys_atomic_t *a, uint32_t mask)
Atomically clear bits (AND with ~mask).
static uint32_t sys_atomic_get(const sys_atomic_t *a)
Load the current value atomically.
Underlying atomic uint32_t value.