|
179 | 179 | _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE, \
|
180 | 180 | ARG2_TYPE)
|
181 | 181 |
|
182 |
| -// FIXME: Make _CLC_DEFINE_BINARY_BUILTIN avoid scalarization by default, and |
183 |
| -// introduce an explicit scalarizing version. |
184 |
| -#define _CLC_DEFINE_BINARY_BUILTIN_NO_SCALARIZE(RET_TYPE, FUNCTION, BUILTIN, \ |
185 |
| - ARG1_TYPE, ARG2_TYPE) \ |
186 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y) { \ |
187 |
| - return BUILTIN(x, y); \ |
188 |
| - } \ |
189 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, \ |
190 |
| - ARG2_TYPE##2 y) { \ |
191 |
| - return BUILTIN(x, y); \ |
192 |
| - } \ |
193 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, \ |
194 |
| - ARG2_TYPE##3 y) { \ |
195 |
| - return BUILTIN(x, y); \ |
196 |
| - } \ |
197 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, \ |
198 |
| - ARG2_TYPE##4 y) { \ |
199 |
| - return BUILTIN(x, y); \ |
200 |
| - } \ |
201 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, \ |
202 |
| - ARG2_TYPE##8 y) { \ |
203 |
| - return BUILTIN(x, y); \ |
204 |
| - } \ |
205 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x, \ |
206 |
| - ARG2_TYPE##16 y) { \ |
207 |
| - return BUILTIN(x, y); \ |
208 |
| - } |
209 |
| - |
210 |
| -#define _CLC_DEFINE_BINARY_BUILTIN_WITH_SCALAR_SECOND_ARG( \ |
211 |
| - RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, ARG2_TYPE) \ |
212 |
| - _CLC_DEFINE_BINARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, \ |
213 |
| - ARG2_TYPE) \ |
214 |
| - _CLC_BINARY_VECTORIZE_SCALAR_SECOND_ARG(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, \ |
215 |
| - FUNCTION, ARG1_TYPE, ARG2_TYPE) |
216 |
| - |
217 |
| -#define _CLC_DEFINE_UNARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE) \ |
218 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x) { return BUILTIN(x); } \ |
219 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x) { \ |
220 |
| - return BUILTIN(x); \ |
221 |
| - } \ |
222 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x) { \ |
223 |
| - return BUILTIN(x); \ |
224 |
| - } \ |
225 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x) { \ |
226 |
| - return BUILTIN(x); \ |
227 |
| - } \ |
228 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x) { \ |
229 |
| - return BUILTIN(x); \ |
230 |
| - } \ |
231 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x) { \ |
232 |
| - return BUILTIN(x); \ |
233 |
| - } |
234 |
| - |
235 |
| -#define _CLC_DEFINE_TERNARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, \ |
236 |
| - ARG2_TYPE, ARG3_TYPE) \ |
237 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y, \ |
238 |
| - ARG3_TYPE z) { \ |
239 |
| - return BUILTIN(x, y, z); \ |
240 |
| - } \ |
241 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x, ARG2_TYPE##2 y, \ |
242 |
| - ARG3_TYPE##2 z) { \ |
243 |
| - return BUILTIN(x, y, z); \ |
244 |
| - } \ |
245 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x, ARG2_TYPE##3 y, \ |
246 |
| - ARG3_TYPE##3 z) { \ |
247 |
| - return BUILTIN(x, y, z); \ |
248 |
| - } \ |
249 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x, ARG2_TYPE##4 y, \ |
250 |
| - ARG3_TYPE##4 z) { \ |
251 |
| - return BUILTIN(x, y, z); \ |
252 |
| - } \ |
253 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x, ARG2_TYPE##8 y, \ |
254 |
| - ARG3_TYPE##8 z) { \ |
255 |
| - return BUILTIN(x, y, z); \ |
256 |
| - } \ |
257 |
| - _CLC_DEF _CLC_OVERLOAD RET_TYPE##16 FUNCTION( \ |
258 |
| - ARG1_TYPE##16 x, ARG2_TYPE##16 y, ARG3_TYPE##16 z) { \ |
259 |
| - return BUILTIN(x, y, z); \ |
260 |
| - } |
261 |
| - |
262 |
| -#ifdef cl_khr_fp16 |
263 |
| - |
264 |
| -#pragma OPENCL EXTENSION cl_khr_fp16 : enable |
265 |
| - |
266 |
| -#define _CLC_DEFINE_UNARY_BUILTIN_FP16(FUNCTION) \ |
267 |
| - _CLC_DEF _CLC_OVERLOAD half FUNCTION(half x) { \ |
268 |
| - return (half)FUNCTION((float)x); \ |
269 |
| - } \ |
270 |
| - _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, FUNCTION, half) |
271 |
| - |
272 |
| -#define _CLC_DEFINE_BINARY_BUILTIN_FP16(FUNCTION) \ |
273 |
| - _CLC_DEF _CLC_OVERLOAD half FUNCTION(half x, half y) { \ |
274 |
| - return (half)FUNCTION((float)x, (float)y); \ |
275 |
| - } \ |
276 |
| - _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, FUNCTION, half, half) |
277 |
| - |
278 |
| -#pragma OPENCL EXTENSION cl_khr_fp16 : disable |
279 |
| - |
280 |
| -#else |
281 |
| - |
282 |
| -#define _CLC_DEFINE_UNARY_BUILTIN_FP16(FUNCTION) |
283 |
| -#define _CLC_DEFINE_BINARY_BUILTIN_FP16(FUNCTION) |
284 |
| - |
285 |
| -#endif |
286 |
| - |
287 | 182 | #endif // __CLC_CLCMACRO_H__
|
0 commit comments