1285d2fb8SJan Vesely #define _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, VEC_TYPE, WIDTH, ADDR_SPACE) \ 2285d2fb8SJan Vesely _CLC_OVERLOAD _CLC_DECL VEC_TYPE vload##SUFFIX##WIDTH(size_t offset, const ADDR_SPACE MEM_TYPE *x); 366ecbc7cSTom Stellard 4285d2fb8SJan Vesely #define _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, ADDR_SPACE) \ 5285d2fb8SJan Vesely _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##2, 2, ADDR_SPACE) \ 6285d2fb8SJan Vesely _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##3, 3, ADDR_SPACE) \ 7285d2fb8SJan Vesely _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##4, 4, ADDR_SPACE) \ 8285d2fb8SJan Vesely _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##8, 8, ADDR_SPACE) \ 9285d2fb8SJan Vesely _CLC_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##16, 16, ADDR_SPACE) 10285d2fb8SJan Vesely 11285d2fb8SJan Vesely #define _CLC_VECTOR_VLOAD_PRIM3(SUFFIX, MEM_TYPE, PRIM_TYPE) \ 12285d2fb8SJan Vesely _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __private) \ 13285d2fb8SJan Vesely _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __local) \ 14285d2fb8SJan Vesely _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __constant) \ 15*12061c71SJan Vesely _CLC_VECTOR_VLOAD_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __global) 1666ecbc7cSTom Stellard 1766ecbc7cSTom Stellard #define _CLC_VECTOR_VLOAD_PRIM1(PRIM_TYPE) \ 18*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM3(, PRIM_TYPE, PRIM_TYPE) 1966ecbc7cSTom Stellard 20*12061c71SJan Vesely // Declare vector load prototypes 21*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(char) 22*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(uchar) 23*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(short) 24*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(ushort) 25*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(int) 26*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(uint) 27*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(long) 28*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(ulong) 29*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(float) 30285d2fb8SJan Vesely _CLC_VECTOR_VLOAD_PRIM3(_half, half, float) 31*12061c71SJan Vesely // Use suffix to declare aligned vloada_halfN 32*12061c71SJan Vesely _CLC_VECTOR_VLOAD_PRIM3(a_half, half, float) 3366ecbc7cSTom Stellard 3466ecbc7cSTom Stellard #ifdef cl_khr_fp64 35285d2fb8SJan Vesely #pragma OPENCL EXTENSION cl_khr_fp64: enable 36285d2fb8SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(double) 37285d2fb8SJan Vesely #endif 38285d2fb8SJan Vesely #ifdef cl_khr_fp16 39285d2fb8SJan Vesely #pragma OPENCL EXTENSION cl_khr_fp16: enable 40285d2fb8SJan Vesely _CLC_VECTOR_VLOAD_PRIM1(half) 4166ecbc7cSTom Stellard #endif 4266ecbc7cSTom Stellard 43*12061c71SJan Vesely // Scalar vload_half also needs to be declared 44285d2fb8SJan Vesely _CLC_VLOAD_DECL(_half, half, float, , __constant) 45285d2fb8SJan Vesely _CLC_VLOAD_DECL(_half, half, float, , __global) 46285d2fb8SJan Vesely _CLC_VLOAD_DECL(_half, half, float, , __local) 47285d2fb8SJan Vesely _CLC_VLOAD_DECL(_half, half, float, , __private) 48285d2fb8SJan Vesely 49*12061c71SJan Vesely // Scalar vloada_half is not part of the specs but CTS expects it 50*12061c71SJan Vesely _CLC_VLOAD_DECL(a_half, half, float, , __constant) 51*12061c71SJan Vesely _CLC_VLOAD_DECL(a_half, half, float, , __global) 52*12061c71SJan Vesely _CLC_VLOAD_DECL(a_half, half, float, , __local) 53*12061c71SJan Vesely _CLC_VLOAD_DECL(a_half, half, float, , __private) 54*12061c71SJan Vesely 55285d2fb8SJan Vesely #undef _CLC_VLOAD_DECL 56285d2fb8SJan Vesely #undef _CLC_VECTOR_VLOAD_DECL 57285d2fb8SJan Vesely #undef _CLC_VECTOR_VLOAD_PRIM3 58285d2fb8SJan Vesely #undef _CLC_VECTOR_VLOAD_PRIM1 59