20 #ifndef OMPI_SYS_ARCH_ATOMIC_H
21 #define OMPI_SYS_ARCH_ATOMIC_H 1
28 #define OPAL_HAVE_ATOMIC_MEM_BARRIER 1
51 #define OPAL_HAVE_ATOMIC_CMPSET_32 1
52 static inline int opal_atomic_cmpset_acq_32(
volatile int32_t *addr,
53 int32_t oldval, int32_t newval)
55 return __sync_bool_compare_and_swap(addr, oldval, newval);
59 static inline int opal_atomic_cmpset_rel_32(
volatile int32_t *addr,
60 int32_t oldval, int32_t newval)
62 return __sync_bool_compare_and_swap(addr, oldval, newval);}
64 static inline int opal_atomic_cmpset_32(
volatile int32_t *addr,
65 int32_t oldval, int32_t newval)
67 return __sync_bool_compare_and_swap(addr, oldval, newval);
70 #define OPAL_HAVE_ATOMIC_MATH_32 1
72 #define OPAL_HAVE_ATOMIC_ADD_32 1
73 static inline int32_t opal_atomic_add_32(
volatile int32_t *addr, int32_t delta)
75 return __sync_fetch_and_add(addr, delta);
78 #define OPAL_HAVE_ATOMIC_SUB_32 1
79 static inline int32_t opal_atomic_sub_32(
volatile int32_t *addr, int32_t delta)
81 return __sync_fetch_and_sub(addr, delta);
84 #define OPAL_HAVE_ATOMIC_CMPSET_64 1
85 static inline int opal_atomic_cmpset_acq_64(
volatile int64_t *addr,
86 int64_t oldval, int64_t newval)
88 return __sync_bool_compare_and_swap(addr, oldval, newval);
91 static inline int opal_atomic_cmpset_rel_64(
volatile int64_t *addr,
92 int64_t oldval, int64_t newval)
94 return __sync_bool_compare_and_swap(addr, oldval, newval);}
97 static inline int opal_atomic_cmpset_64(
volatile int64_t *addr,
98 int64_t oldval, int64_t newval)
100 return __sync_bool_compare_and_swap(addr, oldval, newval);
103 #define OPAL_HAVE_ATOMIC_MATH_64 1
104 #define OPAL_HAVE_ATOMIC_ADD_64 1
105 static inline int64_t opal_atomic_add_64(
volatile int64_t *addr, int64_t delta)
107 return __sync_fetch_and_add(addr, delta);
110 #define OPAL_HAVE_ATOMIC_SUB_64 1
111 static inline int64_t opal_atomic_sub_64(
volatile int64_t *addr, int64_t delta)
113 return __sync_fetch_and_sub(addr, delta);
void opal_atomic_rmb(void)
Read memory barrier.
void opal_atomic_mb(void)
Memory barrier.
void opal_atomic_wmb(void)
Write memory barrier.