1 #define _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, VEC_TYPE, WIDTH, ADDR_SPACE) \ 2 _CLC_OVERLOAD _CLC_DECL VEC_TYPE vload##SUFFIX##WIDTH(size_t offset, const ADDR_SPACE MEM_TYPE *x); 3 4 #define _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, ADDR_SPACE) \ 5 _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##2, 2, ADDR_SPACE) \ 6 _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##3, 3, ADDR_SPACE) \ 7 _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##4, 4, ADDR_SPACE) \ 8 _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##8, 8, ADDR_SPACE) \ 9 _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##16, 16, ADDR_SPACE) 10 11 #define _CLC_VECTOR_VLOAD_PRIM3(SUFFIX, MEM_TYPE, PRIM_TYPE) \ 12 _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __private) \ 13 _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __local) \ 14 _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __constant) \ 15 _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __global) 16 17 #define _CLC_VECTOR_VLOAD_PRIM1(PRIM_TYPE) \ 18 _CLC_VECTOR_VLOAD_PRIM3(, PRIM_TYPE, PRIM_TYPE) 19 20 // Declare vector load prototypes 21 _CLC_VECTOR_VLOAD_PRIM1(char) 22 _CLC_VECTOR_VLOAD_PRIM1(uchar) 23 _CLC_VECTOR_VLOAD_PRIM1(short) 24 _CLC_VECTOR_VLOAD_PRIM1(ushort) 25 _CLC_VECTOR_VLOAD_PRIM1(int) 26 _CLC_VECTOR_VLOAD_PRIM1(uint) 27 _CLC_VECTOR_VLOAD_PRIM1(long) 28 _CLC_VECTOR_VLOAD_PRIM1(ulong) 29 _CLC_VECTOR_VLOAD_PRIM1(float) 30 _CLC_VECTOR_VLOAD_PRIM3(_half, half, float) 31 // Use suffix to declare aligned vloada_halfN 32 _CLC_VECTOR_VLOAD_PRIM3(a_half, half, float) 33 34 #ifdef cl_khr_fp64 35 #pragma OPENCL EXTENSION cl_khr_fp64: enable 36 _CLC_VECTOR_VLOAD_PRIM1(double) 37 #endif 38 #ifdef cl_khr_fp16 39 #pragma OPENCL EXTENSION cl_khr_fp16: enable 40 _CLC_VECTOR_VLOAD_PRIM1(half) 41 #endif 42 43 // Scalar vload_half also needs to be declared 44 _CLC_VLOAD_DECL(_half, half, float, , __constant) 45 _CLC_VLOAD_DECL(_half, half, float, , __global) 46 _CLC_VLOAD_DECL(_half, half, float, , __local) 47 _CLC_VLOAD_DECL(_half, half, float, , __private) 48 49 // Scalar vloada_half is not part of the specs but CTS expects it 50 _CLC_VLOAD_DECL(a_half, half, float, , __constant) 51 _CLC_VLOAD_DECL(a_half, half, float, , __global) 52 _CLC_VLOAD_DECL(a_half, half, float, , __local) 53 _CLC_VLOAD_DECL(a_half, half, float, , __private) 54 55 #undef _CLC_VLOAD_DECL 56 #undef _CLC_VECTOR_VLOAD_DECL 57 #undef _CLC_VECTOR_VLOAD_PRIM3 58 #undef _CLC_VECTOR_VLOAD_PRIM1 59