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