atomic.h revision 245302
1178354Ssam 2178354Ssam#ifndef __has_builtin 3178354Ssam#define __has_builtin(x) 0 4178354Ssam#endif 5178354Ssam#ifndef __has_feature 6178354Ssam#define __has_feature(x) 0 7178354Ssam#endif 8178354Ssam/** 9178354Ssam * Swap macro that enforces a happens-before relationship with a corresponding 10178354Ssam * ATOMIC_LOAD. 11178354Ssam */ 12178354Ssam#if __has_feature(cxx_atomic) 13178354Ssam#define ATOMIC_SWAP(addr, val)\ 14178354Ssam __atomic_exchange(addr, val, __ATOMIC_ACQ_REL) 15178354Ssam#elif __has_builtin(__sync_swap) 16178354Ssam#define ATOMIC_SWAP(addr, val)\ 17178354Ssam __sync_swap(addr, val) 18178354Ssam#else 19178354Ssam#define ATOMIC_SWAP(addr, val)\ 20178354Ssam __sync_lock_test_and_set(addr, val) 21178354Ssam#endif 22178354Ssam 23178354Ssam#if __has_feature(cxx_atomic) 24178354Ssam#define ATOMIC_LOAD(addr)\ 25178354Ssam __atomic_load(addr, __ATOMIC_ACQUIRE) 26178354Ssam#else 27178354Ssam#define ATOMIC_LOAD(addr)\ 28178354Ssam (__sync_synchronize(), *addr) 29178354Ssam#endif 30178354Ssam