blob: f6d360e0d1d7ec35efb25c453114266a47b17c77 [file] [log] [blame]
Tom Stellard51441f82013-06-26 18:22:11 +00001#include <clc/clc.h>
2
3#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable
4
5#define VSTORE_VECTORIZE(PRIM_TYPE, ADDR_SPACE) \
6 _CLC_OVERLOAD _CLC_DEF void vstore2(PRIM_TYPE##2 vec, size_t offset, ADDR_SPACE PRIM_TYPE *mem) { \
Aaron Watry4cb7cf22013-07-16 14:28:58 +00007 mem[2*offset] = vec.s0; \
8 mem[2*offset+1] = vec.s1; \
Tom Stellard51441f82013-06-26 18:22:11 +00009 } \
10\
11 _CLC_OVERLOAD _CLC_DEF void vstore3(PRIM_TYPE##3 vec, size_t offset, ADDR_SPACE PRIM_TYPE *mem) { \
Aaron Watry4cb7cf22013-07-16 14:28:58 +000012 mem[3*offset] = vec.s0; \
13 mem[3*offset+1] = vec.s1; \
14 mem[3*offset+2] = vec.s2; \
Tom Stellard51441f82013-06-26 18:22:11 +000015 } \
16\
17 _CLC_OVERLOAD _CLC_DEF void vstore4(PRIM_TYPE##4 vec, size_t offset, ADDR_SPACE PRIM_TYPE *mem) { \
Aaron Watry4cb7cf22013-07-16 14:28:58 +000018 vstore2(vec.lo, 0, &mem[offset*4]); \
19 vstore2(vec.hi, 1, &mem[offset*4]); \
Tom Stellard51441f82013-06-26 18:22:11 +000020 } \
21\
22 _CLC_OVERLOAD _CLC_DEF void vstore8(PRIM_TYPE##8 vec, size_t offset, ADDR_SPACE PRIM_TYPE *mem) { \
Aaron Watry4cb7cf22013-07-16 14:28:58 +000023 vstore4(vec.lo, 0, &mem[offset*8]); \
24 vstore4(vec.hi, 1, &mem[offset*8]); \
Tom Stellard51441f82013-06-26 18:22:11 +000025 } \
26\
27 _CLC_OVERLOAD _CLC_DEF void vstore16(PRIM_TYPE##16 vec, size_t offset, ADDR_SPACE PRIM_TYPE *mem) { \
Aaron Watry4cb7cf22013-07-16 14:28:58 +000028 vstore8(vec.lo, 0, &mem[offset*16]); \
29 vstore8(vec.hi, 1, &mem[offset*16]); \
Tom Stellard51441f82013-06-26 18:22:11 +000030 } \
31
Tom Stellardd768ac02013-07-08 17:27:02 +000032#define VSTORE_ADDR_SPACES(__CLC_SCALAR___CLC_GENTYPE) \
33 VSTORE_VECTORIZE(__CLC_SCALAR___CLC_GENTYPE, __private) \
34 VSTORE_VECTORIZE(__CLC_SCALAR___CLC_GENTYPE, __local) \
35 VSTORE_VECTORIZE(__CLC_SCALAR___CLC_GENTYPE, __global) \
Tom Stellard51441f82013-06-26 18:22:11 +000036
37#define VSTORE_TYPES() \
38 VSTORE_ADDR_SPACES(char) \
39 VSTORE_ADDR_SPACES(uchar) \
40 VSTORE_ADDR_SPACES(short) \
41 VSTORE_ADDR_SPACES(ushort) \
Aaron Watry4cb7cf22013-07-16 14:28:58 +000042 VSTORE_ADDR_SPACES(int) \
43 VSTORE_ADDR_SPACES(uint) \
Tom Stellard51441f82013-06-26 18:22:11 +000044 VSTORE_ADDR_SPACES(long) \
45 VSTORE_ADDR_SPACES(ulong) \
46 VSTORE_ADDR_SPACES(float) \
47
48VSTORE_TYPES()
49
50#ifdef cl_khr_fp64
51#pragma OPENCL EXTENSION cl_khr_fp64 : enable
52 VSTORE_ADDR_SPACES(double)
53#endif