Author: jvesely Date: Wed Aug 17 15:02:11 2016 New Revision: 278962 URL: http://llvm.org/viewvc/llvm-project?rev=278962&view=rev Log: Implement vstore_half{,n}
Signed-off-by: Jan Vesely <jan.ves...@rutgers.edu> Added: libclc/trunk/generic/lib/shared/vstore_half.inc Modified: libclc/trunk/generic/include/clc/shared/vstore.h libclc/trunk/generic/lib/shared/vstore.cl Modified: libclc/trunk/generic/include/clc/shared/vstore.h URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/shared/vstore.h?rev=278962&r1=278961&r2=278962&view=diff ============================================================================== --- libclc/trunk/generic/include/clc/shared/vstore.h (original) +++ libclc/trunk/generic/include/clc/shared/vstore.h Wed Aug 17 15:02:11 2016 @@ -1,17 +1,20 @@ -#define _CLC_VSTORE_DECL(PRIM_TYPE, VEC_TYPE, WIDTH, ADDR_SPACE) \ - _CLC_OVERLOAD _CLC_DECL void vstore##WIDTH(VEC_TYPE vec, size_t offset, ADDR_SPACE PRIM_TYPE *out); +#define _CLC_VSTORE_DECL(SUFFIX, PRIM_TYPE, VEC_TYPE, WIDTH, ADDR_SPACE) \ + _CLC_OVERLOAD _CLC_DECL void vstore##SUFFIX##WIDTH(VEC_TYPE vec, size_t offset, ADDR_SPACE PRIM_TYPE *out); -#define _CLC_VECTOR_VSTORE_DECL(PRIM_TYPE, ADDR_SPACE) \ - _CLC_VSTORE_DECL(PRIM_TYPE, PRIM_TYPE##2, 2, ADDR_SPACE) \ - _CLC_VSTORE_DECL(PRIM_TYPE, PRIM_TYPE##3, 3, ADDR_SPACE) \ - _CLC_VSTORE_DECL(PRIM_TYPE, PRIM_TYPE##4, 4, ADDR_SPACE) \ - _CLC_VSTORE_DECL(PRIM_TYPE, PRIM_TYPE##8, 8, ADDR_SPACE) \ - _CLC_VSTORE_DECL(PRIM_TYPE, PRIM_TYPE##16, 16, ADDR_SPACE) +#define _CLC_VECTOR_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, ADDR_SPACE) \ + _CLC_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##2, 2, ADDR_SPACE) \ + _CLC_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##3, 3, ADDR_SPACE) \ + _CLC_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##4, 4, ADDR_SPACE) \ + _CLC_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##8, 8, ADDR_SPACE) \ + _CLC_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE##16, 16, ADDR_SPACE) + +#define _CLC_VECTOR_VSTORE_PRIM3(SUFFIX, MEM_TYPE, PRIM_TYPE) \ + _CLC_VECTOR_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __private) \ + _CLC_VECTOR_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __local) \ + _CLC_VECTOR_VSTORE_DECL(SUFFIX, MEM_TYPE, PRIM_TYPE, __global) \ #define _CLC_VECTOR_VSTORE_PRIM1(PRIM_TYPE) \ - _CLC_VECTOR_VSTORE_DECL(PRIM_TYPE, __private) \ - _CLC_VECTOR_VSTORE_DECL(PRIM_TYPE, __local) \ - _CLC_VECTOR_VSTORE_DECL(PRIM_TYPE, __global) \ + _CLC_VECTOR_VSTORE_PRIM3(,PRIM_TYPE, PRIM_TYPE) \ #define _CLC_VECTOR_VSTORE_PRIM() \ _CLC_VECTOR_VSTORE_PRIM1(char) \ @@ -23,14 +26,18 @@ _CLC_VECTOR_VSTORE_PRIM1(long) \ _CLC_VECTOR_VSTORE_PRIM1(ulong) \ _CLC_VECTOR_VSTORE_PRIM1(float) \ - + _CLC_VECTOR_VSTORE_PRIM3(_half, half, float) + #ifdef cl_khr_fp64 -#define _CLC_VECTOR_VSTORE() \ - _CLC_VECTOR_VSTORE_PRIM1(double) \ - _CLC_VECTOR_VSTORE_PRIM() -#else -#define _CLC_VECTOR_VSTORE() \ - _CLC_VECTOR_VSTORE_PRIM() +#pragma cl_khr_fp64: enable + _CLC_VECTOR_VSTORE_PRIM1(double) + _CLC_VECTOR_VSTORE_PRIM3(_half, half, double) + _CLC_VSTORE_DECL(_half, half, double, , __private) + _CLC_VSTORE_DECL(_half, half, double, , __local) + _CLC_VSTORE_DECL(_half, half, double, , __global) #endif -_CLC_VECTOR_VSTORE() +_CLC_VECTOR_VSTORE_PRIM() +_CLC_VSTORE_DECL(_half, half, float, , __private) +_CLC_VSTORE_DECL(_half, half, float, , __local) +_CLC_VSTORE_DECL(_half, half, float, , __global) Modified: libclc/trunk/generic/lib/shared/vstore.cl URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/shared/vstore.cl?rev=278962&r1=278961&r2=278962&view=diff ============================================================================== --- libclc/trunk/generic/lib/shared/vstore.cl (original) +++ libclc/trunk/generic/lib/shared/vstore.cl Wed Aug 17 15:02:11 2016 @@ -50,3 +50,35 @@ VSTORE_TYPES() #pragma OPENCL EXTENSION cl_khr_fp64 : enable VSTORE_ADDR_SPACES(double) #endif + +/* vstore_half are legal even without cl_khr_fp16 */ + +#define VEC_STORE1(val) mem[offset++] = val; +#define VEC_STORE2(val) \ + VEC_STORE1(val.lo) \ + VEC_STORE1(val.hi) +#define VEC_STORE3(val) \ + VEC_STORE1(val.s0) \ + VEC_STORE1(val.s1) \ + VEC_STORE1(val.s2) +#define VEC_STORE4(val) \ + VEC_STORE2(val.lo) \ + VEC_STORE2(val.hi) +#define VEC_STORE8(val) \ + VEC_STORE4(val.lo) \ + VEC_STORE4(val.hi) +#define VEC_STORE16(val) \ + VEC_STORE8(val.lo) \ + VEC_STORE8(val.hi) + +#define __FUNC(SUFFIX, VEC_SIZE, TYPE, AS) \ + _CLC_OVERLOAD _CLC_DEF void vstore_half##SUFFIX(TYPE vec, size_t offset, AS half *mem) { \ + offset *= VEC_SIZE; \ + VEC_STORE##VEC_SIZE(vec) \ + } + +#define FUNC(SUFFIX, VEC_SIZE, TYPE, AS) __FUNC(SUFFIX, VEC_SIZE, TYPE, AS) + +#define __CLC_BODY "vstore_half.inc" +#include <clc/math/gentype.inc> + Added: libclc/trunk/generic/lib/shared/vstore_half.inc URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/shared/vstore_half.inc?rev=278962&view=auto ============================================================================== --- libclc/trunk/generic/lib/shared/vstore_half.inc (added) +++ libclc/trunk/generic/lib/shared/vstore_half.inc Wed Aug 17 15:02:11 2016 @@ -0,0 +1,10 @@ + +#ifdef __CLC_VECSIZE + FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_GENTYPE, __private); + FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_GENTYPE, __local); + FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_GENTYPE, __global); +#else + FUNC(, 1, __CLC_GENTYPE, __private); + FUNC(, 1, __CLC_GENTYPE, __local); + FUNC(, 1, __CLC_GENTYPE, __global); +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits