6 #ifndef EASTL_ATOMIC_INTERNAL_COMPILER_GCC_STORE_H
7 #define EASTL_ATOMIC_INTERNAL_COMPILER_GCC_STORE_H
9 #if defined(EA_PRAGMA_ONCE_SUPPORTED)
14 #define EASTL_GCC_ATOMIC_STORE_N(integralType, ptr, val, gccMemoryOrder) \
16 integralType valIntegral = EASTL_ATOMIC_TYPE_PUN_CAST(integralType, (val)); \
17 __atomic_store(EASTL_ATOMIC_VOLATILE_INTEGRAL_CAST(integralType, (ptr)), &valIntegral, gccMemoryOrder); \
21 #define EASTL_GCC_ATOMIC_STORE_8(ptr, val, gccMemoryOrder) \
22 EASTL_GCC_ATOMIC_STORE_N(uint8_t, ptr, val, gccMemoryOrder)
24 #define EASTL_GCC_ATOMIC_STORE_16(ptr, val, gccMemoryOrder) \
25 EASTL_GCC_ATOMIC_STORE_N(uint16_t, ptr, val, gccMemoryOrder)
27 #define EASTL_GCC_ATOMIC_STORE_32(ptr, val, gccMemoryOrder) \
28 EASTL_GCC_ATOMIC_STORE_N(uint32_t, ptr, val, gccMemoryOrder)
30 #define EASTL_GCC_ATOMIC_STORE_64(ptr, val, gccMemoryOrder) \
31 EASTL_GCC_ATOMIC_STORE_N(uint64_t, ptr, val, gccMemoryOrder)
33 #define EASTL_GCC_ATOMIC_STORE_128(ptr, val, gccMemoryOrder) \
34 EASTL_GCC_ATOMIC_STORE_N(__uint128_t, ptr, val, gccMemoryOrder)
41 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_8(type, ptr, val) \
42 EASTL_GCC_ATOMIC_STORE_8(ptr, val, __ATOMIC_RELAXED)
44 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_16(type, ptr, val) \
45 EASTL_GCC_ATOMIC_STORE_16(ptr, val, __ATOMIC_RELAXED)
47 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_32(type, ptr, val) \
48 EASTL_GCC_ATOMIC_STORE_32(ptr, val, __ATOMIC_RELAXED)
50 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_64(type, ptr, val) \
51 EASTL_GCC_ATOMIC_STORE_64(ptr, val, __ATOMIC_RELAXED)
53 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_128(type, ptr, val) \
54 EASTL_GCC_ATOMIC_STORE_128(ptr, val, __ATOMIC_RELAXED)
57 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_8(type, ptr, val) \
58 EASTL_GCC_ATOMIC_STORE_8(ptr, val, __ATOMIC_RELEASE)
60 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_16(type, ptr, val) \
61 EASTL_GCC_ATOMIC_STORE_16(ptr, val, __ATOMIC_RELEASE)
63 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_32(type, ptr, val) \
64 EASTL_GCC_ATOMIC_STORE_32(ptr, val, __ATOMIC_RELEASE)
66 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_64(type, ptr, val) \
67 EASTL_GCC_ATOMIC_STORE_64(ptr, val, __ATOMIC_RELEASE)
69 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_128(type, ptr, val) \
70 EASTL_GCC_ATOMIC_STORE_128(ptr, val, __ATOMIC_RELEASE)
73 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_8(type, ptr, val) \
74 EASTL_GCC_ATOMIC_STORE_8(ptr, val, __ATOMIC_SEQ_CST)
76 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_16(type, ptr, val) \
77 EASTL_GCC_ATOMIC_STORE_16(ptr, val, __ATOMIC_SEQ_CST)
79 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_32(type, ptr, val) \
80 EASTL_GCC_ATOMIC_STORE_32(ptr, val, __ATOMIC_SEQ_CST)
82 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_64(type, ptr, val) \
83 EASTL_GCC_ATOMIC_STORE_64(ptr, val, __ATOMIC_SEQ_CST)
85 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_128(type, ptr, val) \
86 EASTL_GCC_ATOMIC_STORE_128(ptr, val, __ATOMIC_SEQ_CST)