| #define _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, VEC_TYPE, WIDTH, ADDR_SPACE) \ |
| _CLC_OVERLOAD _CLC_DECL VEC_TYPE vload##SUFFIX##WIDTH(size_t offset, const ADDR_SPACE MEM_TYPE *x); |
| |
| #define _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, ADDR_SPACE) \ |
| _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##2, 2, ADDR_SPACE) \ |
| _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##3, 3, ADDR_SPACE) \ |
| _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##4, 4, ADDR_SPACE) \ |
| _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##8, 8, ADDR_SPACE) \ |
| _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##16, 16, ADDR_SPACE) |
| |
| #define _CLC_VECTOR_VLOAD_PRIM3(SUFFIX, MEM_TYPE, PRIM_TYPE) \ |
| _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __private) \ |
| _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __local) \ |
| _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __constant) \ |
| _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __global) |
| |
| #define _CLC_VECTOR_VLOAD_PRIM1(PRIM_TYPE) \ |
| _CLC_VECTOR_VLOAD_PRIM3(, PRIM_TYPE, PRIM_TYPE) |
| |
| // Declare vector load prototypes |
| _CLC_VECTOR_VLOAD_PRIM1(char) |
| _CLC_VECTOR_VLOAD_PRIM1(uchar) |
| _CLC_VECTOR_VLOAD_PRIM1(short) |
| _CLC_VECTOR_VLOAD_PRIM1(ushort) |
| _CLC_VECTOR_VLOAD_PRIM1(int) |
| _CLC_VECTOR_VLOAD_PRIM1(uint) |
| _CLC_VECTOR_VLOAD_PRIM1(long) |
| _CLC_VECTOR_VLOAD_PRIM1(ulong) |
| _CLC_VECTOR_VLOAD_PRIM1(float) |
| _CLC_VECTOR_VLOAD_PRIM3(_half, half, float) |
| // Use suffix to declare aligned vloada_halfN |
| _CLC_VECTOR_VLOAD_PRIM3(a_half, half, float) |
| |
| #ifdef cl_khr_fp64 |
| #pragma OPENCL EXTENSION cl_khr_fp64: enable |
| _CLC_VECTOR_VLOAD_PRIM1(double) |
| #endif |
| #ifdef cl_khr_fp16 |
| #pragma OPENCL EXTENSION cl_khr_fp16: enable |
| _CLC_VECTOR_VLOAD_PRIM1(half) |
| #endif |
| |
| // Scalar vload_half also needs to be declared |
| _CLC_VLOAD_DECL(_half, half, float, , __constant) |
| _CLC_VLOAD_DECL(_half, half, float, , __global) |
| _CLC_VLOAD_DECL(_half, half, float, , __local) |
| _CLC_VLOAD_DECL(_half, half, float, , __private) |
| |
| // Scalar vloada_half is not part of the specs but CTS expects it |
| _CLC_VLOAD_DECL(a_half, half, float, , __constant) |
| _CLC_VLOAD_DECL(a_half, half, float, , __global) |
| _CLC_VLOAD_DECL(a_half, half, float, , __local) |
| _CLC_VLOAD_DECL(a_half, half, float, , __private) |
| |
| #undef _CLC_VLOAD_DECL |
| #undef _CLC_VECTOR_VLOAD_DECL |
| #undef _CLC_VECTOR_VLOAD_PRIM3 |
| #undef _CLC_VECTOR_VLOAD_PRIM1 |