diff options
author | Luo Xionghu <xionghu.luo@intel.com> | 2015-11-26 13:59:56 +0800 |
---|---|---|
committer | Yang Rong <rong.r.yang@intel.com> | 2016-03-15 16:16:43 +0800 |
commit | 628441620dccc07afbdb20c1de1bfda4328c810d (patch) | |
tree | 26a10422e4db3b73684c36a8407543768cfa6e87 | |
parent | 13aa0a99a9328d66c8be5c8e966b7db81b8256cc (diff) | |
download | beignet-628441620dccc07afbdb20c1de1bfda4328c810d.tar.gz |
gbe/libocl: define the vloada_xxx function instead of using MACRO.
these function need to be overloadable for link.
Signed-off-by: Luo Xionghu <xionghu.luo@intel.com>
Reviewed-by: Yang Rong <rong.r.yang@intel.com>
-rw-r--r-- | backend/src/libocl/include/ocl_vload.h | 13 | ||||
-rw-r--r-- | backend/src/libocl/src/ocl_vload.cl | 21 |
2 files changed, 26 insertions, 8 deletions
diff --git a/backend/src/libocl/include/ocl_vload.h b/backend/src/libocl/include/ocl_vload.h index 9e2706e3..ec5935dc 100644 --- a/backend/src/libocl/include/ocl_vload.h +++ b/backend/src/libocl/include/ocl_vload.h @@ -103,12 +103,17 @@ DECL_UNTYPED_RW_ALL(double) #define DECL_HALF_LD_SPACE(SPACE) \ OVERLOADABLE float vload_half(size_t offset, const SPACE half *p); \ +OVERLOADABLE float vloada_half(size_t offset, const SPACE half *p); \ OVERLOADABLE float2 vload_half2(size_t offset, const SPACE half *p); \ +OVERLOADABLE float2 vloada_half2(size_t offset, const SPACE half *p); \ OVERLOADABLE float3 vload_half3(size_t offset, const SPACE half *p); \ OVERLOADABLE float3 vloada_half3(size_t offset, const SPACE half *p); \ OVERLOADABLE float4 vload_half4(size_t offset, const SPACE half *p); \ +OVERLOADABLE float4 vloada_half4(size_t offset, const SPACE half *p); \ OVERLOADABLE float8 vload_half8(size_t offset, const SPACE half *p); \ -OVERLOADABLE float16 vload_half16(size_t offset, const SPACE half *p); +OVERLOADABLE float8 vloada_half8(size_t offset, const SPACE half *p); \ +OVERLOADABLE float16 vload_half16(size_t offset, const SPACE half *p); \ +OVERLOADABLE float16 vloada_half16(size_t offset, const SPACE half *p); \ #define DECL_HALF_ST_SPACE_ROUND(SPACE, ROUND, FUNC) \ OVERLOADABLE void vstore_half##ROUND(float data, size_t offset, SPACE half *p); \ @@ -141,10 +146,4 @@ DECL_HALF_ST_SPACE(__generic) #undef DECL_HALF_ST_SPACE #undef DECL_HALF_ST_SPACE_ROUND -#define vloada_half vload_half -#define vloada_half2 vload_half2 -#define vloada_half4 vload_half4 -#define vloada_half8 vload_half8 -#define vloada_half16 vload_half16 - #endif /* __OCL_VLOAD_H__ */ diff --git a/backend/src/libocl/src/ocl_vload.cl b/backend/src/libocl/src/ocl_vload.cl index 2d0befb6..466478fb 100644 --- a/backend/src/libocl/src/ocl_vload.cl +++ b/backend/src/libocl/src/ocl_vload.cl @@ -173,10 +173,17 @@ OVERLOADABLE short f32to16_rtz(float f) { OVERLOADABLE float vload_half(size_t offset, const SPACE half *p) { \ return __gen_ocl_f16to32(*(SPACE short *)(p + offset)); \ } \ +OVERLOADABLE float vloada_half(size_t offset, const SPACE half *p) { \ + return vload_half(offset, p); \ +} \ OVERLOADABLE float2 vload_half2(size_t offset, const SPACE half *p) { \ return (float2)(vload_half(offset*2, p), \ vload_half(offset*2 + 1, p)); \ } \ +OVERLOADABLE float2 vloada_half2(size_t offset, const SPACE half *p) { \ + return (float2)(vloada_half(offset*2, p), \ + vloada_half(offset*2 + 1, p)); \ +} \ OVERLOADABLE float3 vload_half3(size_t offset, const SPACE half *p) { \ return (float3)(vload_half(offset*3, p), \ vload_half(offset*3 + 1, p), \ @@ -191,14 +198,26 @@ OVERLOADABLE float4 vload_half4(size_t offset, const SPACE half *p) { \ return (float4)(vload_half2(offset*2, p), \ vload_half2(offset*2 + 1, p)); \ } \ +OVERLOADABLE float4 vloada_half4(size_t offset, const SPACE half *p) { \ + return (float4)(vloada_half2(offset*2, p), \ + vloada_half2(offset*2 + 1, p)); \ +} \ OVERLOADABLE float8 vload_half8(size_t offset, const SPACE half *p) { \ return (float8)(vload_half4(offset*2, p), \ vload_half4(offset*2 + 1, p)); \ } \ +OVERLOADABLE float8 vloada_half8(size_t offset, const SPACE half *p) { \ + return (float8)(vloada_half4(offset*2, p), \ + vloada_half4(offset*2 + 1, p)); \ +} \ OVERLOADABLE float16 vload_half16(size_t offset, const SPACE half *p) { \ return (float16)(vload_half8(offset*2, p), \ vload_half8(offset*2 + 1, p)); \ -} +}\ +OVERLOADABLE float16 vloada_half16(size_t offset, const SPACE half *p) { \ + return (float16)(vloada_half8(offset*2, p), \ + vloada_half8(offset*2 + 1, p)); \ +}\ #define DECL_HALF_ST_SPACE_ROUND(SPACE, ROUND, FUNC) \ OVERLOADABLE void vstore_half##ROUND(float data, size_t offset, SPACE half *p) { \ |