20 #if defined(HAVE_ATOMICS)
22 #ifdef HAVE_MBARRIER_H
25 #define pg_compiler_barrier_impl() __compiler_barrier()
27 #ifndef pg_memory_barrier_impl
33 # define pg_memory_barrier_impl() __machine_rw_barrier()
35 #ifndef pg_read_barrier_impl
36 # define pg_read_barrier_impl() __machine_r_barrier()
38 #ifndef pg_write_barrier_impl
39 # define pg_write_barrier_impl() __machine_w_barrier()
49 #define PG_HAVE_ATOMIC_U32_SUPPORT
55 #define PG_HAVE_ATOMIC_U64_SUPPORT
64 volatile uint64
value pg_attribute_aligned(8);
72 #if defined(HAVE_ATOMICS)
76 #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32
84 current = atomic_cas_32(&ptr->
value, *expected,
newval);
85 ret = current == *expected;
90 #define PG_HAVE_ATOMIC_EXCHANGE_U32
97 #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64
100 uint64 *expected, uint64
newval)
105 current = atomic_cas_64(&ptr->
value, *expected,
newval);
106 ret = current == *expected;
111 #define PG_HAVE_ATOMIC_EXCHANGE_U64
struct pg_atomic_uint32 pg_atomic_uint32
bool pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 *expected, uint32 newval)
bool pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 *expected, uint64 newval)
struct pg_atomic_uint64 pg_atomic_uint64