|
|
|
@ -19,6 +19,28 @@ |
|
|
|
|
|
|
|
|
|
#if defined(HAVE_ATOMICS) |
|
|
|
|
|
|
|
|
|
#ifdef HAVE_MBARRIER_H |
|
|
|
|
#include <mbarrier.h> |
|
|
|
|
|
|
|
|
|
#define pg_compiler_barrier_impl() __compiler_barrier() |
|
|
|
|
|
|
|
|
|
#ifndef pg_memory_barrier_impl |
|
|
|
|
# define pg_memory_barrier_impl() __machine_rw_barrier() |
|
|
|
|
#endif |
|
|
|
|
#ifndef pg_read_barrier_impl |
|
|
|
|
/*
|
|
|
|
|
* Despite the name this is actually a full barrier. Expanding to mfence and |
|
|
|
|
* membar #StoreStore | #LoadStore | #StoreLoad | #LoadLoad on x86/sparc |
|
|
|
|
* respectively. |
|
|
|
|
*/ |
|
|
|
|
# define pg_read_barrier_impl() __machine_r_barrier() |
|
|
|
|
#endif |
|
|
|
|
#ifndef pg_write_barrier_impl |
|
|
|
|
# define pg_write_barrier_impl() __machine_w_barrier() |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#endif /* HAVE_MBARRIER_H */ |
|
|
|
|
|
|
|
|
|
/* Older versions of the compiler don't have atomic.h... */ |
|
|
|
|
#ifdef HAVE_ATOMIC_H |
|
|
|
|
|
|
|
|
|