Nugget
compiler_gcc_store.h
1 // Copyright (c) Electronic Arts Inc. All rights reserved.
4 
5 
6 #ifndef EASTL_ATOMIC_INTERNAL_COMPILER_GCC_STORE_H
7 #define EASTL_ATOMIC_INTERNAL_COMPILER_GCC_STORE_H
8 
9 #if defined(EA_PRAGMA_ONCE_SUPPORTED)
10  #pragma once
11 #endif
12 
13 
14 #define EASTL_GCC_ATOMIC_STORE_N(integralType, ptr, val, gccMemoryOrder) \
15  { \
16  integralType valIntegral = EASTL_ATOMIC_TYPE_PUN_CAST(integralType, (val)); \
17  __atomic_store(EASTL_ATOMIC_VOLATILE_INTEGRAL_CAST(integralType, (ptr)), &valIntegral, gccMemoryOrder); \
18  }
19 
20 
21 #define EASTL_GCC_ATOMIC_STORE_8(ptr, val, gccMemoryOrder) \
22  EASTL_GCC_ATOMIC_STORE_N(uint8_t, ptr, val, gccMemoryOrder)
23 
24 #define EASTL_GCC_ATOMIC_STORE_16(ptr, val, gccMemoryOrder) \
25  EASTL_GCC_ATOMIC_STORE_N(uint16_t, ptr, val, gccMemoryOrder)
26 
27 #define EASTL_GCC_ATOMIC_STORE_32(ptr, val, gccMemoryOrder) \
28  EASTL_GCC_ATOMIC_STORE_N(uint32_t, ptr, val, gccMemoryOrder)
29 
30 #define EASTL_GCC_ATOMIC_STORE_64(ptr, val, gccMemoryOrder) \
31  EASTL_GCC_ATOMIC_STORE_N(uint64_t, ptr, val, gccMemoryOrder)
32 
33 #define EASTL_GCC_ATOMIC_STORE_128(ptr, val, gccMemoryOrder) \
34  EASTL_GCC_ATOMIC_STORE_N(__uint128_t, ptr, val, gccMemoryOrder)
35 
36 
38 //
39 // void EASTL_COMPILER_ATOMIC_STORE_*_N(type, type * ptr, type val)
40 //
41 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_8(type, ptr, val) \
42  EASTL_GCC_ATOMIC_STORE_8(ptr, val, __ATOMIC_RELAXED)
43 
44 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_16(type, ptr, val) \
45  EASTL_GCC_ATOMIC_STORE_16(ptr, val, __ATOMIC_RELAXED)
46 
47 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_32(type, ptr, val) \
48  EASTL_GCC_ATOMIC_STORE_32(ptr, val, __ATOMIC_RELAXED)
49 
50 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_64(type, ptr, val) \
51  EASTL_GCC_ATOMIC_STORE_64(ptr, val, __ATOMIC_RELAXED)
52 
53 #define EASTL_COMPILER_ATOMIC_STORE_RELAXED_128(type, ptr, val) \
54  EASTL_GCC_ATOMIC_STORE_128(ptr, val, __ATOMIC_RELAXED)
55 
56 
57 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_8(type, ptr, val) \
58  EASTL_GCC_ATOMIC_STORE_8(ptr, val, __ATOMIC_RELEASE)
59 
60 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_16(type, ptr, val) \
61  EASTL_GCC_ATOMIC_STORE_16(ptr, val, __ATOMIC_RELEASE)
62 
63 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_32(type, ptr, val) \
64  EASTL_GCC_ATOMIC_STORE_32(ptr, val, __ATOMIC_RELEASE)
65 
66 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_64(type, ptr, val) \
67  EASTL_GCC_ATOMIC_STORE_64(ptr, val, __ATOMIC_RELEASE)
68 
69 #define EASTL_COMPILER_ATOMIC_STORE_RELEASE_128(type, ptr, val) \
70  EASTL_GCC_ATOMIC_STORE_128(ptr, val, __ATOMIC_RELEASE)
71 
72 
73 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_8(type, ptr, val) \
74  EASTL_GCC_ATOMIC_STORE_8(ptr, val, __ATOMIC_SEQ_CST)
75 
76 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_16(type, ptr, val) \
77  EASTL_GCC_ATOMIC_STORE_16(ptr, val, __ATOMIC_SEQ_CST)
78 
79 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_32(type, ptr, val) \
80  EASTL_GCC_ATOMIC_STORE_32(ptr, val, __ATOMIC_SEQ_CST)
81 
82 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_64(type, ptr, val) \
83  EASTL_GCC_ATOMIC_STORE_64(ptr, val, __ATOMIC_SEQ_CST)
84 
85 #define EASTL_COMPILER_ATOMIC_STORE_SEQ_CST_128(type, ptr, val) \
86  EASTL_GCC_ATOMIC_STORE_128(ptr, val, __ATOMIC_SEQ_CST)
87 
88 
89 #endif /* EASTL_ATOMIC_INTERNAL_COMPILER_GCC_STORE_H */