This source file includes following definitions.
- pmix_atomic_mb
- pmix_atomic_rmb
- pmix_atomic_wmb
- pmix_atomic_compare_exchange_strong_32
- pmix_atomic_fetch_add_32
- pmix_atomic_fetch_and_32
- pmix_atomic_fetch_or_32
- pmix_atomic_fetch_xor_32
- pmix_atomic_fetch_sub_32
- pmix_atomic_compare_exchange_strong_64
- pmix_atomic_fetch_add_64
- pmix_atomic_fetch_and_64
- pmix_atomic_fetch_or_64
- pmix_atomic_fetch_xor_64
- pmix_atomic_fetch_sub_64
- pmix_atomic_compare_exchange_strong_128
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifndef PMIX_SYS_ARCH_ATOMIC_H
27 #define PMIX_SYS_ARCH_ATOMIC_H 1
28
29
30
31
32
33
34 #define PMIX_HAVE_ATOMIC_MEM_BARRIER 1
35
36 static inline void pmix_atomic_mb(void)
37 {
38 __sync_synchronize();
39 }
40
41 static inline void pmix_atomic_rmb(void)
42 {
43 __sync_synchronize();
44 }
45
46 static inline void pmix_atomic_wmb(void)
47 {
48 __sync_synchronize();
49 }
50
51 #define PMIXMB() pmix_atomic_mb()
52
53
54
55
56
57
58
59 #define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32 1
60
61 static inline bool pmix_atomic_compare_exchange_strong_32 (pmix_atomic_int32_t *addr, int32_t *oldval, int32_t newval)
62 {
63 int32_t prev = __sync_val_compare_and_swap (addr, *oldval, newval);
64 bool ret = prev == *oldval;
65 *oldval = prev;
66 return ret;
67 }
68
69 #define pmix_atomic_compare_exchange_strong_acq_32 pmix_atomic_compare_exchange_strong_32
70 #define pmix_atomic_compare_exchange_strong_rel_32 pmix_atomic_compare_exchange_strong_32
71
72 #define PMIX_HAVE_ATOMIC_MATH_32 1
73
74 #define PMIX_HAVE_ATOMIC_ADD_32 1
75 static inline int32_t pmix_atomic_fetch_add_32(pmix_atomic_int32_t *addr, int32_t delta)
76 {
77 return __sync_fetch_and_add(addr, delta);
78 }
79
80 #define PMIX_HAVE_ATOMIC_AND_32 1
81 static inline int32_t pmix_atomic_fetch_and_32(pmix_atomic_int32_t *addr, int32_t value)
82 {
83 return __sync_fetch_and_and(addr, value);
84 }
85
86 #define PMIX_HAVE_ATOMIC_OR_32 1
87 static inline int32_t pmix_atomic_fetch_or_32(pmix_atomic_int32_t *addr, int32_t value)
88 {
89 return __sync_fetch_and_or(addr, value);
90 }
91
92 #define PMIX_HAVE_ATOMIC_XOR_32 1
93 static inline int32_t pmix_atomic_fetch_xor_32(pmix_atomic_int32_t *addr, int32_t value)
94 {
95 return __sync_fetch_and_xor(addr, value);
96 }
97
98 #define PMIX_HAVE_ATOMIC_SUB_32 1
99 static inline int32_t pmix_atomic_fetch_sub_32(pmix_atomic_int32_t *addr, int32_t delta)
100 {
101 return __sync_fetch_and_sub(addr, delta);
102 }
103
104 #if PMIX_ASM_SYNC_HAVE_64BIT
105
106 #define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64 1
107
108 static inline bool pmix_atomic_compare_exchange_strong_64 (pmix_atomic_int64_t *addr, int64_t *oldval, int64_t newval)
109 {
110 int64_t prev = __sync_val_compare_and_swap (addr, *oldval, newval);
111 bool ret = prev == *oldval;
112 *oldval = prev;
113 return ret;
114 }
115
116 #define pmix_atomic_compare_exchange_strong_acq_64 pmix_atomic_compare_exchange_strong_64
117 #define pmix_atomic_compare_exchange_strong_rel_64 pmix_atomic_compare_exchange_strong_64
118
119 #define PMIX_HAVE_ATOMIC_MATH_64 1
120 #define PMIX_HAVE_ATOMIC_ADD_64 1
121 static inline int64_t pmix_atomic_fetch_add_64(pmix_atomic_int64_t *addr, int64_t delta)
122 {
123 return __sync_fetch_and_add(addr, delta);
124 }
125
126 #define PMIX_HAVE_ATOMIC_AND_64 1
127 static inline int64_t pmix_atomic_fetch_and_64(pmix_atomic_int64_t *addr, int64_t value)
128 {
129 return __sync_fetch_and_and(addr, value);
130 }
131
132 #define PMIX_HAVE_ATOMIC_OR_64 1
133 static inline int64_t pmix_atomic_fetch_or_64(pmix_atomic_int64_t *addr, int64_t value)
134 {
135 return __sync_fetch_and_or(addr, value);
136 }
137
138 #define PMIX_HAVE_ATOMIC_XOR_64 1
139 static inline int64_t pmix_atomic_fetch_xor_64(pmix_atomic_int64_t *addr, int64_t value)
140 {
141 return __sync_fetch_and_xor(addr, value);
142 }
143
144 #define PMIX_HAVE_ATOMIC_SUB_64 1
145 static inline int64_t pmix_atomic_fetch_sub_64(pmix_atomic_int64_t *addr, int64_t delta)
146 {
147 return __sync_fetch_and_sub(addr, delta);
148 }
149
150 #endif
151
152 #if PMIX_HAVE_SYNC_BUILTIN_CSWAP_INT128
153 static inline bool pmix_atomic_compare_exchange_strong_128 (pmix_atomic_int128_t *addr,
154 pmix_int128_t *oldval, pmix_int128_t newval)
155 {
156 pmix_int128_t prev = __sync_val_compare_and_swap (addr, *oldval, newval);
157 bool ret = prev == *oldval;
158 *oldval = prev;
159 return ret;
160 }
161
162 #define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_128 1
163
164 #endif
165
166 #endif