12
12
#include < cstdint>
13
13
#include < type_traits>
14
14
15
- namespace cl {
16
- namespace __spirv {
17
-
18
15
#ifdef __SYCL_DEVICE_ONLY__
19
-
20
16
template <typename dataT>
21
- extern OpTypeEvent *
22
- OpGroupAsyncCopy (int32_t Scope, __local dataT *Dest, __global dataT *Src,
23
- size_t NumElements, size_t Stride, OpTypeEvent *E) noexcept ;
17
+ extern __ocl_event_t __spirv_GroupAsyncCopy (int32_t Scope, __local dataT *Dest,
18
+ __global dataT *Src,
19
+ size_t NumElements, size_t Stride,
20
+ __ocl_event_t E) noexcept ;
24
21
25
22
template <typename dataT>
26
- extern OpTypeEvent *
27
- OpGroupAsyncCopy (int32_t Scope, __global dataT *Dest, __local dataT *Src,
28
- size_t NumElements, size_t Stride, OpTypeEvent *E) noexcept ;
23
+ extern __ocl_event_t __spirv_GroupAsyncCopy (int32_t Scope, __global dataT *Dest,
24
+ __local dataT *Src,
25
+ size_t NumElements, size_t Stride,
26
+ __ocl_event_t E) noexcept ;
29
27
30
- #define OpGroupAsyncCopyGlobalToLocal OpGroupAsyncCopy
31
- #define OpGroupAsyncCopyLocalToGlobal OpGroupAsyncCopy
28
+ #define OpGroupAsyncCopyGlobalToLocal __spirv_GroupAsyncCopy
29
+ #define OpGroupAsyncCopyLocalToGlobal __spirv_GroupAsyncCopy
32
30
33
31
// Atomic SPIR-V builtins
34
32
#define __SPIRV_ATOMIC_LOAD (AS, Type ) \
35
- extern Type OpAtomicLoad (AS const Type *P, Scope S, MemorySemantics O);
33
+ extern Type __spirv_AtomicLoad (AS const Type *P, Scope S, MemorySemantics O);
36
34
#define __SPIRV_ATOMIC_STORE (AS, Type ) \
37
- extern void OpAtomicStore (AS Type *P, Scope S, MemorySemantics O, Type V);
35
+ extern void __spirv_AtomicStore (AS Type *P, Scope S, MemorySemantics O, \
36
+ Type V);
38
37
#define __SPIRV_ATOMIC_EXCHANGE (AS, Type ) \
39
- extern Type OpAtomicExchange (AS Type *P, Scope S, MemorySemantics O, Type V);
38
+ extern Type __spirv_AtomicExchange (AS Type *P, Scope S, MemorySemantics O, \
39
+ Type V);
40
40
#define __SPIRV_ATOMIC_CMP_EXCHANGE (AS, Type ) \
41
- extern Type OpAtomicCompareExchange (AS Type *P, Scope S, MemorySemantics E, \
42
- MemorySemantics U, Type V, Type C);
41
+ extern Type __spirv_AtomicCompareExchange ( \
42
+ AS Type *P, Scope S, MemorySemantics E, MemorySemantics U, Type V, \
43
+ Type C);
43
44
#define __SPIRV_ATOMIC_IADD (AS, Type ) \
44
- extern Type OpAtomicIAdd (AS Type *P, Scope S, MemorySemantics O, Type V);
45
+ extern Type __spirv_AtomicIAdd (AS Type *P, Scope S, MemorySemantics O, \
46
+ Type V);
45
47
#define __SPIRV_ATOMIC_ISUB (AS, Type ) \
46
- extern Type OpAtomicISub (AS Type *P, Scope S, MemorySemantics O, Type V);
48
+ extern Type __spirv_AtomicISub (AS Type *P, Scope S, MemorySemantics O, \
49
+ Type V);
47
50
#define __SPIRV_ATOMIC_SMIN (AS, Type ) \
48
- extern Type OpAtomicSMin (AS Type *P, Scope S, MemorySemantics O, Type V);
51
+ extern Type __spirv_AtomicSMin (AS Type *P, Scope S, MemorySemantics O, \
52
+ Type V);
49
53
#define __SPIRV_ATOMIC_UMIN (AS, Type ) \
50
- extern Type OpAtomicUMin (AS Type *P, Scope S, MemorySemantics O, Type V);
54
+ extern Type __spirv_AtomicUMin (AS Type *P, Scope S, MemorySemantics O, \
55
+ Type V);
51
56
#define __SPIRV_ATOMIC_SMAX (AS, Type ) \
52
- extern Type OpAtomicSMax (AS Type *P, Scope S, MemorySemantics O, Type V);
57
+ extern Type __spirv_AtomicSMax (AS Type *P, Scope S, MemorySemantics O, \
58
+ Type V);
53
59
#define __SPIRV_ATOMIC_UMAX (AS, Type ) \
54
- extern Type OpAtomicUMax (AS Type *P, Scope S, MemorySemantics O, Type V);
60
+ extern Type __spirv_AtomicUMax (AS Type *P, Scope S, MemorySemantics O, \
61
+ Type V);
55
62
#define __SPIRV_ATOMIC_AND (AS, Type ) \
56
- extern Type OpAtomicAnd (AS Type *P, Scope S, MemorySemantics O, Type V);
63
+ extern Type __spirv_AtomicAnd (AS Type *P, Scope S, MemorySemantics O, Type V);
57
64
#define __SPIRV_ATOMIC_OR (AS, Type ) \
58
- extern Type OpAtomicOr (AS Type *P, Scope S, MemorySemantics O, Type V);
65
+ extern Type __spirv_AtomicOr (AS Type *P, Scope S, MemorySemantics O, Type V);
59
66
#define __SPIRV_ATOMIC_XOR (AS, Type ) \
60
- extern Type OpAtomicXor (AS Type *P, Scope S, MemorySemantics O, Type V);
67
+ extern Type __spirv_AtomicXor (AS Type *P, Scope S, MemorySemantics O, Type V);
61
68
62
69
#define __SPIRV_ATOMIC_FLOAT (AS, Type ) \
63
70
__SPIRV_ATOMIC_LOAD (AS, Type) \
@@ -87,14 +94,16 @@ OpGroupAsyncCopy(int32_t Scope, __global dataT *Dest, __local dataT *Src,
87
94
// of atomic min/max based on the signed-ness of the type
88
95
#define __SPIRV_ATOMIC_MINMAX (AS, Op ) \
89
96
template <typename T> \
90
- typename std::enable_if<std::is_signed<T>::value, T>::type OpAtomic##Op( \
91
- AS T *Ptr, Scope Scope, MemorySemantics Semantics, T Value) { \
92
- return OpAtomicS##Op (Ptr, Scope, Semantics, Value); \
97
+ typename std::enable_if<std::is_signed<T>::value, T>::type \
98
+ __spirv_Atomic##Op(AS T *Ptr, Scope Scope, MemorySemantics Semantics, \
99
+ T Value) { \
100
+ return __spirv_AtomicS##Op (Ptr, Scope, Semantics, Value); \
93
101
} \
94
102
template <typename T> \
95
- typename std::enable_if<!std::is_signed<T>::value, T>::type OpAtomic##Op( \
96
- AS T *Ptr, Scope Scope, MemorySemantics Semantics, T Value) { \
97
- return OpAtomicU##Op (Ptr, Scope, Semantics, Value); \
103
+ typename std::enable_if<!std::is_signed<T>::value, T>::type \
104
+ __spirv_Atomic##Op(AS T *Ptr, Scope Scope, MemorySemantics Semantics, \
105
+ T Value) { \
106
+ return __spirv_AtomicU##Op (Ptr, Scope, Semantics, Value); \
98
107
}
99
108
100
109
#define __SPIRV_ATOMICS (macro, Arg ) macro(__global, Arg) macro(__local, Arg)
@@ -109,64 +118,69 @@ __SPIRV_ATOMICS(__SPIRV_ATOMIC_UNSIGNED, unsigned long long)
109
118
__SPIRV_ATOMICS(__SPIRV_ATOMIC_MINMAX, Min)
110
119
__SPIRV_ATOMICS(__SPIRV_ATOMIC_MINMAX, Max)
111
120
112
- extern bool OpGroupAll (int32_t Scope, bool Predicate) noexcept ;
121
+ extern bool __spirv_GroupAll (int32_t Scope, bool Predicate) noexcept ;
113
122
114
- extern bool OpGroupAny (int32_t Scope, bool Predicate) noexcept ;
123
+ extern bool __spirv_GroupAny (int32_t Scope, bool Predicate) noexcept ;
115
124
116
125
template <typename dataT>
117
- extern dataT OpGroupBroadcast (int32_t Scope, dataT Value,
118
- uint32_t LocalId) noexcept ;
126
+ extern dataT __spirv_GroupBroadcast (int32_t Scope, dataT Value,
127
+ uint32_t LocalId) noexcept ;
119
128
120
129
template <typename dataT>
121
- extern dataT OpGroupIAdd (int32_t Scope, int32_t Op, dataT Value) noexcept ;
130
+ extern dataT __spirv_GroupIAdd (int32_t Scope, int32_t Op, dataT Value) noexcept ;
122
131
template <typename dataT>
123
- extern dataT OpGroupFAdd (int32_t Scope, int32_t Op, dataT Value) noexcept ;
132
+ extern dataT __spirv_GroupFAdd (int32_t Scope, int32_t Op, dataT Value) noexcept ;
124
133
template <typename dataT>
125
- extern dataT OpGroupUMin (int32_t Scope, int32_t Op, dataT Value) noexcept ;
134
+ extern dataT __spirv_GroupUMin (int32_t Scope, int32_t Op, dataT Value) noexcept ;
126
135
template <typename dataT>
127
- extern dataT OpGroupSMin (int32_t Scope, int32_t Op, dataT Value) noexcept ;
136
+ extern dataT __spirv_GroupSMin (int32_t Scope, int32_t Op, dataT Value) noexcept ;
128
137
template <typename dataT>
129
- extern dataT OpGroupFMin (int32_t Scope, int32_t Op, dataT Value) noexcept ;
138
+ extern dataT __spirv_GroupFMin (int32_t Scope, int32_t Op, dataT Value) noexcept ;
130
139
template <typename dataT>
131
- extern dataT OpGroupUMax (int32_t Scope, int32_t Op, dataT Value) noexcept ;
140
+ extern dataT __spirv_GroupUMax (int32_t Scope, int32_t Op, dataT Value) noexcept ;
132
141
template <typename dataT>
133
- extern dataT OpGroupSMax (int32_t Scope, int32_t Op, dataT Value) noexcept ;
142
+ extern dataT __spirv_GroupSMax (int32_t Scope, int32_t Op, dataT Value) noexcept ;
134
143
template <typename dataT>
135
- extern dataT OpGroupFMax (int32_t Scope, int32_t Op, dataT Value) noexcept ;
144
+ extern dataT __spirv_GroupFMax (int32_t Scope, int32_t Op, dataT Value) noexcept ;
136
145
template <typename dataT>
137
- extern dataT OpSubgroupShuffleINTEL (dataT Data, uint32_t InvocationId) noexcept ;
146
+ extern dataT __spirv_SubgroupShuffleINTEL (dataT Data,
147
+ uint32_t InvocationId) noexcept ;
138
148
template <typename dataT>
139
- extern dataT OpSubgroupShuffleDownINTEL (dataT Current, dataT Next,
140
- uint32_t Delta) noexcept ;
149
+ extern dataT __spirv_SubgroupShuffleDownINTEL (dataT Current, dataT Next,
150
+ uint32_t Delta) noexcept ;
141
151
template <typename dataT>
142
- extern dataT OpSubgroupShuffleUpINTEL (dataT Previous, dataT Current,
143
- uint32_t Delta) noexcept ;
152
+ extern dataT __spirv_SubgroupShuffleUpINTEL (dataT Previous, dataT Current,
153
+ uint32_t Delta) noexcept ;
144
154
template <typename dataT>
145
- extern dataT OpSubgroupShuffleXorINTEL (dataT Data, uint32_t Value) noexcept ;
155
+ extern dataT __spirv_SubgroupShuffleXorINTEL (dataT Data,
156
+ uint32_t Value) noexcept ;
146
157
147
158
template <typename dataT>
148
- extern dataT OpSubgroupBlockReadINTEL (const __global uint16_t *Ptr) noexcept ;
159
+ extern dataT
160
+ __spirv_SubgroupBlockReadINTEL (const __global uint16_t *Ptr) noexcept ;
149
161
150
162
template <typename dataT>
151
- extern void OpSubgroupBlockWriteINTEL (__global uint16_t *Ptr,
152
- dataT Data) noexcept ;
163
+ extern void __spirv_SubgroupBlockWriteINTEL (__global uint16_t *Ptr,
164
+ dataT Data) noexcept ;
153
165
154
166
template <typename dataT>
155
- extern dataT OpSubgroupBlockReadINTEL (const __global uint32_t *Ptr) noexcept ;
167
+ extern dataT
168
+ __spirv_SubgroupBlockReadINTEL (const __global uint32_t *Ptr) noexcept ;
156
169
157
170
template <typename dataT>
158
- extern void OpSubgroupBlockWriteINTEL (__global uint32_t *Ptr,
159
- dataT Data) noexcept ;
171
+ extern void __spirv_SubgroupBlockWriteINTEL (__global uint32_t *Ptr,
172
+ dataT Data) noexcept ;
160
173
161
- extern void prefetch (const __global char *Ptr, size_t NumBytes) noexcept ;
174
+ extern void __spirv_ocl_prefetch (const __global char *Ptr,
175
+ size_t NumBytes) noexcept ;
162
176
163
177
#else // if !__SYCL_DEVICE_ONLY__
164
178
165
179
template <typename dataT>
166
- extern OpTypeEvent *
180
+ extern __ocl_event_t
167
181
OpGroupAsyncCopyGlobalToLocal (int32_t Scope, dataT *Dest, dataT *Src,
168
182
size_t NumElements, size_t Stride,
169
- OpTypeEvent * E) noexcept {
183
+ __ocl_event_t E) noexcept {
170
184
for (int i = 0 ; i < NumElements; i++) {
171
185
Dest[i] = Src[i * Stride];
172
186
}
@@ -175,28 +189,26 @@ OpGroupAsyncCopyGlobalToLocal(int32_t Scope, dataT *Dest, dataT *Src,
175
189
}
176
190
177
191
template <typename dataT>
178
- extern OpTypeEvent *
192
+ extern __ocl_event_t
179
193
OpGroupAsyncCopyLocalToGlobal (int32_t Scope, dataT *Dest, dataT *Src,
180
194
size_t NumElements, size_t Stride,
181
- OpTypeEvent * E) noexcept {
195
+ __ocl_event_t E) noexcept {
182
196
for (int i = 0 ; i < NumElements; i++) {
183
197
Dest[i * Stride] = Src[i];
184
198
}
185
199
// A real instance of the class is not needed, return dummy pointer.
186
200
return nullptr ;
187
201
}
188
202
189
- extern void prefetch (const char *Ptr, size_t NumBytes) noexcept ;
203
+ extern void __spirv_ocl_prefetch (const char *Ptr, size_t NumBytes) noexcept ;
190
204
191
205
#endif // !__SYCL_DEVICE_ONLY__
192
206
193
- extern void OpControlBarrier (Scope Execution, Scope Memory,
194
- uint32_t Semantics) noexcept ;
207
+ extern void __spirv_ControlBarrier (Scope Execution, Scope Memory,
208
+ uint32_t Semantics) noexcept ;
195
209
196
- extern void OpMemoryBarrier (Scope Memory, uint32_t Semantics) noexcept ;
210
+ extern void __spirv_MemoryBarrier (Scope Memory, uint32_t Semantics) noexcept ;
197
211
198
- extern void OpGroupWaitEvents (int32_t Scope, uint32_t NumEvents,
199
- OpTypeEvent ** WaitEvents) noexcept ;
212
+ extern void __spirv_GroupWaitEvents (int32_t Scope, uint32_t NumEvents,
213
+ __ocl_event_t * WaitEvents) noexcept ;
200
214
201
- } // namespace __spirv
202
- } // namespace cl
0 commit comments