20 #ifdef PG_HAVE_MEMORY_BARRIER_EMULATION
22 #error "barriers are required (and provided) on WIN32 platforms"
27 #ifdef PG_HAVE_MEMORY_BARRIER_EMULATION
43 #ifdef PG_HAVE_COMPILER_BARRIER_EMULATION
52 #ifdef PG_HAVE_ATOMIC_FLAG_SIMULATION
58 "size mismatch of atomic_flag vs slock_t");
60 #ifndef HAVE_SPINLOCKS
99 return ptr->
value == 0;
104 #ifdef PG_HAVE_ATOMIC_U32_SIMULATION
109 "size mismatch of atomic_uint32 vs slock_t");
115 #ifndef HAVE_SPINLOCKS
153 ret = ptr->
value == *expected;
154 *expected = ptr->
value;
179 #ifdef PG_HAVE_ATOMIC_U64_SIMULATION
185 "size mismatch of atomic_uint64 vs slock_t");
191 #ifndef HAVE_SPINLOCKS
201 uint64 *expected, uint64
newval)
216 ret = ptr->
value == *expected;
217 *expected = ptr->
value;
bool pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 *expected, uint32 newval)
void pg_atomic_clear_flag_impl(volatile pg_atomic_flag *ptr)
void pg_extern_compiler_barrier(void)
uint64 pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_)
void pg_atomic_init_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 val_)
uint32 pg_atomic_fetch_add_u32_impl(volatile pg_atomic_uint32 *ptr, int32 add_)
bool pg_atomic_unlocked_test_flag_impl(volatile pg_atomic_flag *ptr)
bool pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr)
void pg_atomic_write_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 val)
void pg_atomic_init_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 val_)
void pg_spinlock_barrier(void)
bool pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 *expected, uint64 newval)
void pg_atomic_init_flag_impl(volatile pg_atomic_flag *ptr)
#define StaticAssertDecl(condition, errmessage)
void s_init_lock_sema(volatile slock_t *lock, bool nested)
#define SpinLockInit(lock)
#define SpinLockRelease(lock)
#define SpinLockAcquire(lock)