12345678910111213141516171819202122232425262728 |
- #ifndef __has_builtin
- #define __has_builtin(x) 0
- #endif
- #ifndef __has_feature
- #define __has_feature(x) 0
- #endif
- /**
- * Swap macro that enforces a happens-before relationship with a corresponding
- * ATOMIC_LOAD.
- */
- #if __has_builtin(__c11_atomic_exchange)
- #define ATOMIC_SWAP(addr, val)\
- __c11_atomic_exchange(reinterpret_cast<_Atomic(__typeof__(val))*>(addr), val, __ATOMIC_ACQ_REL)
- #elif __has_builtin(__sync_swap)
- #define ATOMIC_SWAP(addr, val)\
- __sync_swap(addr, val)
- #else
- #define ATOMIC_SWAP(addr, val)\
- __sync_lock_test_and_set(addr, val)
- #endif
- #if __has_builtin(__c11_atomic_load)
- #define ATOMIC_LOAD(addr)\
- __c11_atomic_load(reinterpret_cast<_Atomic(__typeof__(*addr))*>(addr), __ATOMIC_ACQUIRE)
- #else
- #define ATOMIC_LOAD(addr)\
- (__sync_synchronize(), *addr)
- #endif
|