|
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