This source file includes following definitions.
- pmix_atomic_add_fetch_size_t
- pmix_atomic_fetch_add_size_t
- pmix_atomic_sub_fetch_size_t
- pmix_atomic_fetch_sub_size_t
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 #ifndef PMIX_SYS_ATOMIC_H
53 #define PMIX_SYS_ATOMIC_H 1
54
55 #include "pmix_config.h"
56
57 #include <stdbool.h>
58
59 #include "src/atomics/sys/architecture.h"
60 #include "src/include/pmix_stdatomic.h"
61
62 #if PMIX_ASSEMBLY_BUILTIN == PMIX_BUILTIN_C11
63
64 #include "atomic_stdc.h"
65
66 #else
67
68
69
70 #ifdef PMIX_DISABLE_INLINE_ASM
71 #undef PMIX_C_GCC_INLINE_ASSEMBLY
72 #define PMIX_C_GCC_INLINE_ASSEMBLY 0
73 #endif
74
75
76
77
78 #if defined(c_plusplus) || defined(__cplusplus)
79
80 #define PMIX_GCC_INLINE_ASSEMBLY 0
81 #else
82 #define PMIX_GCC_INLINE_ASSEMBLY PMIX_C_GCC_INLINE_ASSEMBLY
83 #endif
84
85
86 BEGIN_C_DECLS
87
88
89
90
91
92
93
94
95
96
97
98
99
100 struct pmix_atomic_lock_t {
101 union {
102 pmix_atomic_int32_t lock;
103 volatile unsigned char sparc_lock;
104 char padding[sizeof(int)];
105 } u;
106 };
107 typedef struct pmix_atomic_lock_t pmix_atomic_lock_t;
108
109
110
111
112
113
114
115 #if !PMIX_GCC_INLINE_ASSEMBLY
116 #define PMIX_HAVE_INLINE_ATOMIC_MEM_BARRIER 0
117 #define PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_32 0
118 #define PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_64 0
119 #define PMIX_HAVE_INLINE_ATOMIC_ADD_32 0
120 #define PMIX_HAVE_INLINE_ATOMIC_AND_32 0
121 #define PMIX_HAVE_INLINE_ATOMIC_OR_32 0
122 #define PMIX_HAVE_INLINE_ATOMIC_XOR_32 0
123 #define PMIX_HAVE_INLINE_ATOMIC_SUB_32 0
124 #define PMIX_HAVE_INLINE_ATOMIC_ADD_64 0
125 #define PMIX_HAVE_INLINE_ATOMIC_AND_64 0
126 #define PMIX_HAVE_INLINE_ATOMIC_OR_64 0
127 #define PMIX_HAVE_INLINE_ATOMIC_XOR_64 0
128 #define PMIX_HAVE_INLINE_ATOMIC_SUB_64 0
129 #define PMIX_HAVE_INLINE_ATOMIC_SWAP_32 0
130 #define PMIX_HAVE_INLINE_ATOMIC_SWAP_64 0
131 #else
132 #define PMIX_HAVE_INLINE_ATOMIC_MEM_BARRIER 1
133 #define PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_32 1
134 #define PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_64 1
135 #define PMIX_HAVE_INLINE_ATOMIC_ADD_32 1
136 #define PMIX_HAVE_INLINE_ATOMIC_AND_32 1
137 #define PMIX_HAVE_INLINE_ATOMIC_OR_32 1
138 #define PMIX_HAVE_INLINE_ATOMIC_XOR_32 1
139 #define PMIX_HAVE_INLINE_ATOMIC_SUB_32 1
140 #define PMIX_HAVE_INLINE_ATOMIC_ADD_64 1
141 #define PMIX_HAVE_INLINE_ATOMIC_AND_64 1
142 #define PMIX_HAVE_INLINE_ATOMIC_OR_64 1
143 #define PMIX_HAVE_INLINE_ATOMIC_XOR_64 1
144 #define PMIX_HAVE_INLINE_ATOMIC_SUB_64 1
145 #define PMIX_HAVE_INLINE_ATOMIC_SWAP_32 1
146 #define PMIX_HAVE_INLINE_ATOMIC_SWAP_64 1
147 #endif
148
149
150
151
152 enum {
153 PMIX_ATOMIC_LOCK_UNLOCKED = 0,
154 PMIX_ATOMIC_LOCK_LOCKED = 1
155 };
156
157 #define PMIX_ATOMIC_LOCK_INIT {.u = {.lock = PMIX_ATOMIC_LOCK_UNLOCKED}}
158
159
160
161
162
163
164
165 #if defined(DOXYGEN)
166
167 #elif PMIX_ASSEMBLY_BUILTIN == PMIX_BUILTIN_SYNC
168 #include "src/atomics/sys/sync_builtin/atomic.h"
169 #elif PMIX_ASSEMBLY_BUILTIN == PMIX_BUILTIN_GCC
170 #include "src/atomics/sys/gcc_builtin/atomic.h"
171 #elif PMIX_ASSEMBLY_ARCH == PMIX_X86_64
172 #include "src/atomics/sys/x86_64/atomic.h"
173 #elif PMIX_ASSEMBLY_ARCH == PMIX_ARM
174 #include "src/atomics/sys/arm/atomic.h"
175 #elif PMIX_ASSEMBLY_ARCH == PMIX_ARM64
176 #include "src/atomics/sys/arm64/atomic.h"
177 #elif PMIX_ASSEMBLY_ARCH == PMIX_IA32
178 #include "src/atomics/sys/ia32/atomic.h"
179 #elif PMIX_ASSEMBLY_ARCH == PMIX_IA64
180 #include "src/atomics/sys/ia64/atomic.h"
181 #elif PMIX_ASSEMBLY_ARCH == PMIX_MIPS
182 #include "src/atomics/sys/mips/atomic.h"
183 #elif PMIX_ASSEMBLY_ARCH == PMIX_POWERPC32
184 #include "src/atomics/sys/powerpc/atomic.h"
185 #elif PMIX_ASSEMBLY_ARCH == PMIX_POWERPC64
186 #include "src/atomics/sys/powerpc/atomic.h"
187 #elif PMIX_ASSEMBLY_ARCH == PMIX_SPARC
188 #include "src/atomics/sys/sparc/atomic.h"
189 #elif PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_32
190 #include "src/atomics/sys/sparcv9/atomic.h"
191 #elif PMIX_ASSEMBLY_ARCH == PMIX_SPARCV9_64
192 #include "src/atomics/sys/sparcv9/atomic.h"
193 #endif
194
195 #ifndef DOXYGEN
196
197
198
199 #ifndef PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32
200 #define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32 0
201 #endif
202 #ifndef PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64
203 #define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64 0
204 #endif
205 #ifndef PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_128
206 #define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_128 0
207 #endif
208 #ifndef PMIX_HAVE_ATOMIC_LLSC_32
209 #define PMIX_HAVE_ATOMIC_LLSC_32 0
210 #endif
211 #ifndef PMIX_HAVE_ATOMIC_LLSC_64
212 #define PMIX_HAVE_ATOMIC_LLSC_64 0
213 #endif
214 #endif
215
216
217
218
219
220
221
222 #if !defined(PMIX_HAVE_ATOMIC_MEM_BARRIER) && !defined(DOXYGEN)
223
224 #define PMIX_HAVE_ATOMIC_MEM_BARRIER 0
225 #endif
226
227 #if defined(DOXYGEN) || PMIX_HAVE_ATOMIC_MEM_BARRIER
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242 #if PMIX_HAVE_INLINE_ATOMIC_MEM_BARRIER
243 static inline
244 #endif
245 void pmix_atomic_mb(void);
246
247
248
249
250
251
252
253
254
255
256
257 #if PMIX_HAVE_INLINE_ATOMIC_MEM_BARRIER
258 static inline
259 #endif
260 void pmix_atomic_rmb(void);
261
262
263
264
265
266
267
268
269
270
271
272 #if PMIX_HAVE_INLINE_ATOMIC_MEM_BARRIER
273 static inline
274 #endif
275 void pmix_atomic_wmb(void);
276
277 #endif
278
279
280
281
282
283
284
285
286 #if !defined(PMIX_HAVE_ATOMIC_SPINLOCKS) && !defined(DOXYGEN)
287
288
289 #define PMIX_HAVE_ATOMIC_SPINLOCKS 0
290 #endif
291
292 #if defined(DOXYGEN) || PMIX_HAVE_ATOMIC_SPINLOCKS || (PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32 || PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64)
293
294
295
296
297
298
299
300 #if PMIX_HAVE_ATOMIC_SPINLOCKS == 0
301 static inline
302 #endif
303 void pmix_atomic_lock_init(pmix_atomic_lock_t* lock, int32_t value);
304
305
306
307
308
309
310
311
312 #if PMIX_HAVE_ATOMIC_SPINLOCKS == 0
313 static inline
314 #endif
315 int pmix_atomic_trylock(pmix_atomic_lock_t *lock);
316
317
318
319
320
321
322
323 #if PMIX_HAVE_ATOMIC_SPINLOCKS == 0
324 static inline
325 #endif
326 void pmix_atomic_lock(pmix_atomic_lock_t *lock);
327
328
329
330
331
332
333
334 #if PMIX_HAVE_ATOMIC_SPINLOCKS == 0
335 static inline
336 #endif
337 void pmix_atomic_unlock(pmix_atomic_lock_t *lock);
338
339
340 #if PMIX_HAVE_ATOMIC_SPINLOCKS == 0
341 #undef PMIX_HAVE_ATOMIC_SPINLOCKS
342 #define PMIX_HAVE_ATOMIC_SPINLOCKS (PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32 || PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64)
343 #define PMIX_NEED_INLINE_ATOMIC_SPINLOCKS 1
344 #endif
345
346 #endif
347
348
349
350
351
352
353
354 #if !defined(PMIX_HAVE_ATOMIC_CMPSET_32) && !defined(DOXYGEN)
355 #define PMIX_HAVE_ATOMIC_CMPSET_32 0
356 #endif
357 #if defined(DOXYGEN) || PMIX_HAVE_ATOMIC_CMPSET_32
358
359 #if PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_32
360 static inline
361 #endif
362 bool pmix_atomic_compare_exchange_strong_32 (pmix_atomic_int32_t *addr, int32_t *oldval,
363 int32_t newval);
364
365 #if PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_32
366 static inline
367 #endif
368 bool pmix_atomic_compare_exchange_strong_acq_32 (pmix_atomic_int32_t *addr, int32_t *oldval,
369 int32_t newval);
370
371 #if PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_32
372 static inline
373 #endif
374 bool pmix_atomic_compare_exchange_strong_rel_32 (pmix_atomic_int32_t *addr, int32_t *oldval,
375 int32_t newval);
376 #endif
377
378
379 #if !defined(PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64) && !defined(DOXYGEN)
380 #define PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64 0
381 #endif
382 #if defined(DOXYGEN) || PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64
383
384 #if PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_64
385 static inline
386 #endif
387 bool pmix_atomic_compare_exchange_strong_64 (pmix_atomic_int64_t *addr, int64_t *oldval,
388 int64_t newval);
389
390 #if PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_64
391 static inline
392 #endif
393 bool pmix_atomic_compare_exchange_strong_acq_64 (pmix_atomic_int64_t *addr, int64_t *oldval,
394 int64_t newval);
395
396 #if PMIX_HAVE_INLINE_ATOMIC_COMPARE_EXCHANGE_64
397 static inline
398 #endif
399 bool pmix_atomic_compare_exchange_strong_rel_64 (pmix_atomic_int64_t *addr, int64_t *oldval,
400 int64_t newval);
401
402 #endif
403
404 #if !defined(PMIX_HAVE_ATOMIC_MATH_32) && !defined(DOXYGEN)
405
406 #define PMIX_HAVE_ATOMIC_MATH_32 0
407 #endif
408
409 #if defined(DOXYGEN) || PMIX_HAVE_ATOMIC_MATH_32 || PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32
410
411 static inline int32_t pmix_atomic_add_fetch_32(pmix_atomic_int32_t *addr, int delta);
412 static inline int32_t pmix_atomic_fetch_add_32(pmix_atomic_int32_t *addr, int delta);
413 static inline int32_t pmix_atomic_and_fetch_32(pmix_atomic_int32_t *addr, int32_t value);
414 static inline int32_t pmix_atomic_fetch_and_32(pmix_atomic_int32_t *addr, int32_t value);
415 static inline int32_t pmix_atomic_or_fetch_32(pmix_atomic_int32_t *addr, int32_t value);
416 static inline int32_t pmix_atomic_fetch_or_32(pmix_atomic_int32_t *addr, int32_t value);
417 static inline int32_t pmix_atomic_xor_fetch_32(pmix_atomic_int32_t *addr, int32_t value);
418 static inline int32_t pmix_atomic_fetch_xor_32(pmix_atomic_int32_t *addr, int32_t value);
419 static inline int32_t pmix_atomic_sub_fetch_32(pmix_atomic_int32_t *addr, int delta);
420 static inline int32_t pmix_atomic_fetch_sub_32(pmix_atomic_int32_t *addr, int delta);
421 static inline int32_t pmix_atomic_min_fetch_32 (pmix_atomic_int32_t *addr, int32_t value);
422 static inline int32_t pmix_atomic_fetch_min_32 (pmix_atomic_int32_t *addr, int32_t value);
423 static inline int32_t pmix_atomic_max_fetch_32 (pmix_atomic_int32_t *addr, int32_t value);
424 static inline int32_t pmix_atomic_fetch_max_32 (pmix_atomic_int32_t *addr, int32_t value);
425
426 #endif
427
428 #if ! PMIX_HAVE_ATOMIC_MATH_32
429
430 #undef PMIX_HAVE_ATOMIC_MATH_32
431 #define PMIX_HAVE_ATOMIC_MATH_32 PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32
432 #endif
433
434 #ifndef PMIX_HAVE_ATOMIC_MATH_64
435
436 #define PMIX_HAVE_ATOMIC_MATH_64 0
437 #endif
438
439 #if defined(DOXYGEN) || PMIX_HAVE_ATOMIC_MATH_64 || PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64
440
441 static inline int64_t pmix_atomic_add_fetch_64(pmix_atomic_int64_t *addr, int64_t delta);
442 static inline int64_t pmix_atomic_fetch_add_64(pmix_atomic_int64_t *addr, int64_t delta);
443 static inline int64_t pmix_atomic_and_fetch_64(pmix_atomic_int64_t *addr, int64_t value);
444 static inline int64_t pmix_atomic_fetch_and_64(pmix_atomic_int64_t *addr, int64_t value);
445 static inline int64_t pmix_atomic_or_fetch_64(pmix_atomic_int64_t *addr, int64_t value);
446 static inline int64_t pmix_atomic_fetch_or_64(pmix_atomic_int64_t *addr, int64_t value);
447 static inline int64_t pmix_atomic_fetch_xor_64(pmix_atomic_int64_t *addr, int64_t value);
448 static inline int64_t pmix_atomic_sub_fetch_64(pmix_atomic_int64_t *addr, int64_t delta);
449 static inline int64_t pmix_atomic_fetch_sub_64(pmix_atomic_int64_t *addr, int64_t delta);
450 static inline int64_t pmix_atomic_min_fetch_64 (pmix_atomic_int64_t *addr, int64_t value);
451 static inline int64_t pmix_atomic_fetch_min_64 (pmix_atomic_int64_t *addr, int64_t value);
452 static inline int64_t pmix_atomic_max_fetch_64 (pmix_atomic_int64_t *addr, int64_t value);
453 static inline int64_t pmix_atomic_fetch_max_64 (pmix_atomic_int64_t *addr, int64_t value);
454
455 #endif
456
457 #if ! PMIX_HAVE_ATOMIC_MATH_64
458
459 #undef PMIX_HAVE_ATOMIC_MATH_64
460 #define PMIX_HAVE_ATOMIC_MATH_64 PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64
461 #endif
462
463
464
465
466
467
468 #if defined(DOXYGEN) || PMIX_ENABLE_DEBUG
469 static inline size_t
470 pmix_atomic_add_fetch_size_t(pmix_atomic_size_t *addr, size_t delta)
471 {
472 #if SIZEOF_SIZE_T == 4
473 return (size_t) pmix_atomic_add_fetch_32((int32_t*) addr, delta);
474 #elif SIZEOF_SIZE_T == 8
475 return (size_t) pmix_atomic_add_fetch_64((int64_t*) addr, delta);
476 #else
477 #error "Unknown size_t size"
478 #endif
479 }
480
481 static inline size_t
482 pmix_atomic_fetch_add_size_t(pmix_atomic_size_t *addr, size_t delta)
483 {
484 #if SIZEOF_SIZE_T == 4
485 return (size_t) pmix_atomic_fetch_add_32((int32_t*) addr, delta);
486 #elif SIZEOF_SIZE_T == 8
487 return (size_t) pmix_atomic_fetch_add_64((int64_t*) addr, delta);
488 #else
489 #error "Unknown size_t size"
490 #endif
491 }
492
493 static inline size_t
494 pmix_atomic_sub_fetch_size_t(pmix_atomic_size_t *addr, size_t delta)
495 {
496 #if SIZEOF_SIZE_T == 4
497 return (size_t) pmix_atomic_sub_fetch_32((int32_t*) addr, delta);
498 #elif SIZEOF_SIZE_T == 8
499 return (size_t) pmix_atomic_sub_fetch_64((int64_t*) addr, delta);
500 #else
501 #error "Unknown size_t size"
502 #endif
503 }
504
505 static inline size_t
506 pmix_atomic_fetch_sub_size_t(pmix_atomic_size_t *addr, size_t delta)
507 {
508 #if SIZEOF_SIZE_T == 4
509 return (size_t) pmix_atomic_fetch_sub_32((int32_t*) addr, delta);
510 #elif SIZEOF_SIZE_T == 8
511 return (size_t) pmix_atomic_fetch_sub_64((int64_t*) addr, delta);
512 #else
513 #error "Unknown size_t size"
514 #endif
515 }
516
517 #else
518 #if SIZEOF_SIZE_T == 4
519 #define pmix_atomic_add_fetch_size_t(addr, delta) ((size_t) pmix_atomic_add_fetch_32((pmix_atomic_int32_t *) addr, delta))
520 #define pmix_atomic_fetch_add_size_t(addr, delta) ((size_t) pmix_atomic_fetch_add_32((pmix_atomic_int32_t *) addr, delta))
521 #define pmix_atomic_sub_fetch_size_t(addr, delta) ((size_t) pmix_atomic_sub_fetch_32((pmix_atomic_int32_t *) addr, delta))
522 #define pmix_atomic_fetch_sub_size_t(addr, delta) ((size_t) pmix_atomic_fetch_sub_32((pmix_atomic_int32_t *) addr, delta))
523 #elif SIZEOF_SIZE_T == 8
524 #define pmix_atomic_add_fetch_size_t(addr, delta) ((size_t) pmix_atomic_add_fetch_64((pmix_atomic_int64_t *) addr, delta))
525 #define pmix_atomic_fetch_add_size_t(addr, delta) ((size_t) pmix_atomic_fetch_add_64((pmix_atomic_int64_t *) addr, delta))
526 #define pmix_atomic_sub_fetch_size_t(addr, delta) ((size_t) pmix_atomic_sub_fetch_64((pmix_atomic_int64_t *) addr, delta))
527 #define pmix_atomic_fetch_sub_size_t(addr, delta) ((size_t) pmix_atomic_fetch_sub_64((pmix_atomic_int64_t *) addr, delta))
528 #else
529 #error "Unknown size_t size"
530 #endif
531 #endif
532
533 #if defined(DOXYGEN) || (PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_32 || PMIX_HAVE_ATOMIC_COMPARE_EXCHANGE_64)
534
535
536
537 static inline bool pmix_atomic_compare_exchange_strong_xx (pmix_atomic_intptr_t *addr, intptr_t *oldval,
538 int64_t newval, size_t length);
539 static inline bool pmix_atomic_compare_exchange_strong_acq_xx (pmix_atomic_intptr_t *addr, intptr_t *oldval,
540 int64_t newval, size_t length);
541 static inline bool pmix_atomic_compare_exchange_strong_rel_xx (pmix_atomic_intptr_t *addr, intptr_t *oldval,
542 int64_t newval, size_t length);
543
544
545 static inline bool pmix_atomic_compare_exchange_strong_ptr (pmix_atomic_intptr_t* addr, intptr_t *oldval,
546 intptr_t newval);
547 static inline bool pmix_atomic_compare_exchange_strong_acq_ptr (pmix_atomic_intptr_t* addr, intptr_t *oldval,
548 intptr_t newval);
549 static inline bool pmix_atomic_compare_exchange_strong_rel_ptr (pmix_atomic_intptr_t* addr, intptr_t *oldval,
550 intptr_t newval);
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565 #define pmix_atomic_compare_exchange_strong( ADDR, OLDVAL, NEWVAL ) \
566 pmix_atomic_compare_exchange_strong_xx( (pmix_atomic_intptr_t*)(ADDR), (intptr_t *)(OLDVAL), \
567 (intptr_t)(NEWVAL), sizeof(*(ADDR)) )
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582 #define pmix_atomic_compare_exchange_strong_acq( ADDR, OLDVAL, NEWVAL ) \
583 pmix_atomic_compare_exchange_strong_acq_xx( (pmix_atomic_intptr_t*)(ADDR), (intptr_t *)(OLDVAL), \
584 (intptr_t)(NEWVAL), sizeof(*(ADDR)) )
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599 #define pmix_atomic_compare_exchange_strong_rel( ADDR, OLDVAL, NEWVAL ) \
600 pmix_atomic_compare_exchange_strong_rel_xx( (pmix_atomic_intptr_t*)(ADDR), (intptr_t *)(OLDVAL), \
601 (intptr_t)(NEWVAL), sizeof(*(ADDR)) )
602
603
604 #endif
605
606 #if defined(DOXYGEN) || (PMIX_HAVE_ATOMIC_MATH_32 || PMIX_HAVE_ATOMIC_MATH_64)
607
608 static inline void pmix_atomic_add_xx(pmix_atomic_intptr_t* addr,
609 int32_t value, size_t length);
610 static inline void pmix_atomic_sub_xx(pmix_atomic_intptr_t* addr,
611 int32_t value, size_t length);
612
613 static inline intptr_t pmix_atomic_add_fetch_ptr( pmix_atomic_intptr_t* addr, void* delta );
614 static inline intptr_t pmix_atomic_fetch_add_ptr( pmix_atomic_intptr_t* addr, void* delta );
615 static inline intptr_t pmix_atomic_sub_fetch_ptr( pmix_atomic_intptr_t* addr, void* delta );
616 static inline intptr_t pmix_atomic_fetch_sub_ptr( pmix_atomic_intptr_t* addr, void* delta );
617
618
619
620
621
622
623
624
625
626
627
628 #define pmix_atomic_add( ADDR, VALUE ) \
629 pmix_atomic_add_xx( (pmix_atomic_intptr_t*)(ADDR), (int32_t)(VALUE), \
630 sizeof(*(ADDR)) )
631
632
633
634
635
636
637
638
639
640
641
642 #define pmix_atomic_sub( ADDR, VALUE ) \
643 pmix_atomic_sub_xx( (pmix_atomic_intptr_t*)(ADDR), (int32_t)(VALUE), \
644 sizeof(*(ADDR)) )
645
646 #endif
647
648
649
650
651
652
653 #include "src/atomics/sys/atomic_impl.h"
654
655 #endif
656
657 END_C_DECLS
658
659 #endif