static inline int a_cas(volatile int *p, int t, int s) { return __sync_val_compare_and_swap(p, t, s); } static inline void *a_cas_p(volatile void **p, void *t, void *s) { return __sync_val_compare_and_swap(p, t, s); } static inline int a_swap(volatile int *p, int v) { int old; do old = *p; while (!__sync_bool_compare_and_swap(p, old, v)); return old; } static inline int a_fetch_add(volatile int *p, int v) { return __sync_fetch_and_add(p, v); } static inline void a_and(volatile int *p, int v) { __sync_fetch_and_and(p, v); } static inline void a_or(volatile int *p, int v) { __sync_fetch_and_or(p, v); } static void a_barrier() { __sync_synchronize(); } static inline void a_crash() { __builtin_trap(); } static inline int a_ctz_l(unsigned long x) { return __builtin_ctzl(x); } static inline int a_ctz_64(uint64_t x) { return __builtin_ctzll(x); } #define a_cas a_cas #define a_cas_p a_cas_p #define a_swap a_swap #define a_fetch_add #define a_and #define a_or #define a_barrier #define a_crash #define a_ctz_l #define a_ctz_64 #endif