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