@@ -72,62 +72,62 @@ _CLC_OVERLOAD _CLC_DECL void __spirv_MemoryBarrier(unsigned int, unsigned int);
72
72
} \
73
73
}
74
74
75
- #define __CLC_NVVM_ATOMIC_IMPL (TYPE , TYPE_MANGLED , TYPE_NV , TYPE_MANGLED_NV , \
76
- OP , NAME_MANGLED , ADDR_SPACE , \
77
- ADDR_SPACE_MANGLED , ADDR_SPACE_NV ) \
78
- _CLC_DECL TYPE \
79
- NAME_MANGLED##PU3##ADDR_SPACE_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
80
- volatile ADDR_SPACE TYPE *pointer, enum Scope scope, \
81
- enum MemorySemanticsMask semantics, TYPE value) { \
82
- /* Semantics mask may include memory order, storage class and other info \
83
- Memory order is stored in the lowest 5 bits */ \
84
- unsigned int order = semantics & 0x1F ; \
85
- switch (order ) { \
86
- case None : \
87
- __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
88
- ADDR_SPACE , ADDR_SPACE_NV , ) \
89
- break ; \
90
- case Acquire : \
91
- if (__clc_nvvm_reflect_arch () >= 700 ) { \
92
- __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
93
- ADDR_SPACE , ADDR_SPACE_NV , _acquire ) \
94
- } else { \
95
- __CLC_NVVM_ATOMIC_IMPL_ACQUIRE_FENCE (TYPE , TYPE_NV , TYPE_MANGLED_NV , \
96
- OP , ADDR_SPACE , ADDR_SPACE_NV ) \
97
- } \
98
- break ; \
99
- case Release : \
100
- if (__clc_nvvm_reflect_arch () >= 700 ) { \
101
- __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
102
- ADDR_SPACE , ADDR_SPACE_NV , _release ) \
103
- } else { \
104
- __spirv_MemoryBarrier (scope , Release ); \
105
- __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
106
- ADDR_SPACE , ADDR_SPACE_NV , ) \
107
- } \
108
- break ; \
109
- case AcquireRelease : \
110
- if (__clc_nvvm_reflect_arch () >= 700 ) { \
111
- __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
112
- ADDR_SPACE , ADDR_SPACE_NV , _acq_rel ) \
113
- } else { \
114
- __spirv_MemoryBarrier (scope , Release ); \
115
- __CLC_NVVM_ATOMIC_IMPL_ACQUIRE_FENCE (TYPE , TYPE_NV , TYPE_MANGLED_NV , \
116
- OP , ADDR_SPACE , ADDR_SPACE_NV ) \
117
- } \
118
- break ; \
119
- } \
120
- __builtin_trap (); \
121
- __builtin_unreachable (); \
75
+ #define __CLC_NVVM_ATOMIC_IMPL ( \
76
+ TYPE , TYPE_MANGLED , TYPE_NV , TYPE_MANGLED_NV , OP , NAME_MANGLED , \
77
+ ADDR_SPACE , POINTER_AND_ADDR_SPACE_MANGLED , ADDR_SPACE_NV , SUBSTITUTION ) \
78
+ __attribute__((always_inline)) _CLC_DECL TYPE \
79
+ NAME_MANGLED##POINTER_AND_ADDR_SPACE_MANGLED##TYPE_MANGLED##N5__spv\
80
+ 5Scope4FlagENS##SUBSTITUTION##_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
81
+ volatile ADDR_SPACE TYPE *pointer, enum Scope scope, \
82
+ enum MemorySemanticsMask semantics, TYPE value) { \
83
+ /* Semantics mask may include memory order, storage class and other info \
84
+ Memory order is stored in the lowest 5 bits */ \
85
+ unsigned int order = semantics & 0x1F ; \
86
+ switch (order ) { \
87
+ case None : \
88
+ __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
89
+ ADDR_SPACE , ADDR_SPACE_NV , ) \
90
+ break ; \
91
+ case Acquire : \
92
+ if (__clc_nvvm_reflect_arch () >= 700 ) { \
93
+ __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
94
+ ADDR_SPACE , ADDR_SPACE_NV , _acquire ) \
95
+ } else { \
96
+ __CLC_NVVM_ATOMIC_IMPL_ACQUIRE_FENCE (TYPE , TYPE_NV , TYPE_MANGLED_NV , \
97
+ OP , ADDR_SPACE , ADDR_SPACE_NV ) \
98
+ } \
99
+ break ; \
100
+ case Release : \
101
+ if (__clc_nvvm_reflect_arch () >= 700 ) { \
102
+ __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
103
+ ADDR_SPACE , ADDR_SPACE_NV , _release ) \
104
+ } else { \
105
+ __spirv_MemoryBarrier (scope , Release ); \
106
+ __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
107
+ ADDR_SPACE , ADDR_SPACE_NV , ) \
108
+ } \
109
+ break ; \
110
+ case AcquireRelease : \
111
+ if (__clc_nvvm_reflect_arch () >= 700 ) { \
112
+ __CLC_NVVM_ATOMIC_IMPL_ORDER (TYPE , TYPE_NV , TYPE_MANGLED_NV , OP , \
113
+ ADDR_SPACE , ADDR_SPACE_NV , _acq_rel ) \
114
+ } else { \
115
+ __spirv_MemoryBarrier (scope , Release ); \
116
+ __CLC_NVVM_ATOMIC_IMPL_ACQUIRE_FENCE (TYPE , TYPE_NV , TYPE_MANGLED_NV , \
117
+ OP , ADDR_SPACE , ADDR_SPACE_NV ) \
118
+ } \
119
+ break ; \
120
+ } \
121
+ __builtin_trap (); \
122
+ __builtin_unreachable (); \
122
123
}
123
124
124
125
#define __CLC_NVVM_ATOMIC (TYPE , TYPE_MANGLED , TYPE_NV , TYPE_MANGLED_NV , OP , \
125
126
NAME_MANGLED ) \
126
- __attribute__((always_inline)) \
127
127
__CLC_NVVM_ATOMIC_IMPL(TYPE, TYPE_MANGLED, TYPE_NV, TYPE_MANGLED_NV, OP, \
128
- NAME_MANGLED, __global, AS1 , _global_) \
129
- __attribute__((always_inline)) \
130
- __CLC_NVVM_ATOMIC_IMPL(TYPE, TYPE_MANGLED, TYPE_NV, TYPE_MANGLED_NV, OP, \
131
- NAME_MANGLED, __local, AS3, _shared_)
132
-
128
+ NAME_MANGLED, __global, PU3AS1 , _global_, 1) \
129
+ __CLC_NVVM_ATOMIC_IMPL(TYPE, TYPE_MANGLED, TYPE_NV, TYPE_MANGLED_NV, OP, \
130
+ NAME_MANGLED, __local, PU3AS3, _shared_, 1) \
131
+ __CLC_NVVM_ATOMIC_IMPL(TYPE, TYPE_MANGLED, TYPE_NV, TYPE_MANGLED_NV, OP, \
132
+ NAME_MANGLED, , P, _gen_, 0)
133
133
#endif
0 commit comments