1#include <clc/clc.h> 2 3#define VLOAD_VECTORIZE(PRIM_TYPE, ADDR_SPACE) \ 4 _CLC_OVERLOAD _CLC_DEF PRIM_TYPE##2 vload2(size_t offset, const ADDR_SPACE PRIM_TYPE *x) { \ 5 return (PRIM_TYPE##2)(x[2*offset] , x[2*offset+1]); \ 6 } \ 7\ 8 _CLC_OVERLOAD _CLC_DEF PRIM_TYPE##3 vload3(size_t offset, const ADDR_SPACE PRIM_TYPE *x) { \ 9 return (PRIM_TYPE##3)(x[3*offset] , x[3*offset+1], x[3*offset+2]); \ 10 } \ 11\ 12 _CLC_OVERLOAD _CLC_DEF PRIM_TYPE##4 vload4(size_t offset, const ADDR_SPACE PRIM_TYPE *x) { \ 13 return (PRIM_TYPE##4)(x[4*offset], x[4*offset+1], x[4*offset+2], x[4*offset+3]); \ 14 } \ 15\ 16 _CLC_OVERLOAD _CLC_DEF PRIM_TYPE##8 vload8(size_t offset, const ADDR_SPACE PRIM_TYPE *x) { \ 17 return (PRIM_TYPE##8)(vload4(0, &x[8*offset]), vload4(1, &x[8*offset])); \ 18 } \ 19\ 20 _CLC_OVERLOAD _CLC_DEF PRIM_TYPE##16 vload16(size_t offset, const ADDR_SPACE PRIM_TYPE *x) { \ 21 return (PRIM_TYPE##16)(vload8(0, &x[16*offset]), vload8(1, &x[16*offset])); \ 22 } \ 23 24#define VLOAD_ADDR_SPACES(__CLC_SCALAR_GENTYPE) \ 25 VLOAD_VECTORIZE(__CLC_SCALAR_GENTYPE, __private) \ 26 VLOAD_VECTORIZE(__CLC_SCALAR_GENTYPE, __local) \ 27 VLOAD_VECTORIZE(__CLC_SCALAR_GENTYPE, __constant) \ 28 VLOAD_VECTORIZE(__CLC_SCALAR_GENTYPE, __global) \ 29 30#define VLOAD_TYPES() \ 31 VLOAD_ADDR_SPACES(char) \ 32 VLOAD_ADDR_SPACES(uchar) \ 33 VLOAD_ADDR_SPACES(short) \ 34 VLOAD_ADDR_SPACES(ushort) \ 35 VLOAD_ADDR_SPACES(int) \ 36 VLOAD_ADDR_SPACES(uint) \ 37 VLOAD_ADDR_SPACES(long) \ 38 VLOAD_ADDR_SPACES(ulong) \ 39 VLOAD_ADDR_SPACES(float) \ 40 41VLOAD_TYPES() 42 43#ifdef cl_khr_fp64 44#pragma OPENCL EXTENSION cl_khr_fp64 : enable 45 VLOAD_ADDR_SPACES(double) 46#endif 47