<br><br><div class="gmail_quote"><div dir="ltr">On Sat, Oct 21, 2017, 11:36 PM Jan Vesely <<a href="mailto:jan.vesely@rutgers.edu">jan.vesely@rutgers.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Float version passes newly posted piglit tests on turks, float and double pass on carrizo.<br>
v2: scalar vstorea_half<br>
<br>
Signed-off-by: Jan Vesely <<a href="mailto:jan.vesely@rutgers.edu" target="_blank">jan.vesely@rutgers.edu</a>><br>
---<br>
 generic/include/clc/shared/vstore.h | 41 +++++++++++++++++++++++++------------<br>
 generic/lib/shared/<a href="http://vstore.cl" rel="noreferrer" target="_blank">vstore.cl</a>        | 30 ++++++++++++++-------------<br>
 generic/lib/shared/vstore_half.inc  | 21 +++++++++++++------<br>
 3 files changed, 59 insertions(+), 33 deletions(-)<br>
<br>
diff --git a/generic/include/clc/shared/vstore.h b/generic/include/clc/shared/vstore.h<br>
index 0e3f694..17a0d29 100644<br>
--- a/generic/include/clc/shared/vstore.h<br>
+++ b/generic/include/clc/shared/vstore.h<br>
@@ -16,37 +16,52 @@<br>
 #define _CLC_VECTOR_VSTORE_PRIM1(PRIM_TYPE) \<br>
   _CLC_VECTOR_VSTORE_PRIM3(,PRIM_TYPE, PRIM_TYPE) \<br>
<br>
-#define _CLC_VECTOR_VSTORE_PRIM() \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(char) \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(uchar) \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(short) \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(ushort) \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(int) \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(uint) \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(long) \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(ulong) \<br>
-    _CLC_VECTOR_VSTORE_PRIM1(float) \<br>
-    _CLC_VECTOR_VSTORE_PRIM3(_half, half, float)<br>
+_CLC_VECTOR_VSTORE_PRIM1(char)<br>
+_CLC_VECTOR_VSTORE_PRIM1(uchar)<br>
+_CLC_VECTOR_VSTORE_PRIM1(short)<br>
+_CLC_VECTOR_VSTORE_PRIM1(ushort)<br>
+_CLC_VECTOR_VSTORE_PRIM1(int)<br>
+_CLC_VECTOR_VSTORE_PRIM1(uint)<br>
+_CLC_VECTOR_VSTORE_PRIM1(long)<br>
+_CLC_VECTOR_VSTORE_PRIM1(ulong)<br>
+_CLC_VECTOR_VSTORE_PRIM1(float)<br>
+_CLC_VECTOR_VSTORE_PRIM3(_half, half, float)<br>
+// Use suffix to declare aligned vstorea_halfN<br>
+_CLC_VECTOR_VSTORE_PRIM3(a_half, half, float)<br>
<br>
 #ifdef cl_khr_fp64<br>
   _CLC_VECTOR_VSTORE_PRIM1(double)<br>
   _CLC_VECTOR_VSTORE_PRIM3(_half, half, double)<br>
+  // Use suffix to declare aligned vstorea_halfN<br>
+  _CLC_VECTOR_VSTORE_PRIM3(a_half, half, double)<br>
+<br>
+  // Scalar vstore_half also needs to be declared<br>
   _CLC_VSTORE_DECL(_half, half, double, , __private)<br>
   _CLC_VSTORE_DECL(_half, half, double, , __local)<br>
   _CLC_VSTORE_DECL(_half, half, double, , __global)<br>
+<br>
+  // Scalar vstorea_half is ont part of the specs but CTS expects it<br></blockquote></div><div><br></div><div>"ont" again</div><div><br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+  _CLC_VSTORE_DECL(a_half, half, double, , __private)<br>
+  _CLC_VSTORE_DECL(a_half, half, double, , __local)<br>
+  _CLC_VSTORE_DECL(a_half, half, double, , __global)<br>
 #endif<br>
<br>
 #ifdef cl_khr_fp16<br>
   _CLC_VECTOR_VSTORE_PRIM1(half)<br>
 #endif<br>
<br>
-_CLC_VECTOR_VSTORE_PRIM()<br>
+// Scalar vstore_half also needs to be declared<br>
 _CLC_VSTORE_DECL(_half, half, float, , __private)<br>
 _CLC_VSTORE_DECL(_half, half, float, , __local)<br>
 _CLC_VSTORE_DECL(_half, half, float, , __global)<br>
<br>
+// Scalar vstorea_half is ont part of the specs but CTS expects it<br></blockquote></div><div><br></div><div>"ont" here as well</div><div><br></div><div>otherwise looks fine to me.</div><div><br></div><div>--Aaron</div><div><br></div><div><br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+_CLC_VSTORE_DECL(a_half, half, float, , __private)<br>
+_CLC_VSTORE_DECL(a_half, half, float, , __local)<br>
+_CLC_VSTORE_DECL(a_half, half, float, , __global)<br>
+<br>
+<br>
 #undef _CLC_VSTORE_DECL<br>
 #undef _CLC_VECTOR_VSTORE_DECL<br>
 #undef _CLC_VECTOR_VSTORE_PRIM3<br>
 #undef _CLC_VECTOR_VSTORE_PRIM1<br>
-#undef _CLC_VECTOR_VSTORE_PRIM<br>
diff --git a/generic/lib/shared/<a href="http://vstore.cl" rel="noreferrer" target="_blank">vstore.cl</a> b/generic/lib/shared/<a href="http://vstore.cl" rel="noreferrer" target="_blank">vstore.cl</a><br>
index 3343c16..e5383a8 100644<br>
--- a/generic/lib/shared/<a href="http://vstore.cl" rel="noreferrer" target="_blank">vstore.cl</a><br>
+++ b/generic/lib/shared/<a href="http://vstore.cl" rel="noreferrer" target="_blank">vstore.cl</a><br>
@@ -33,23 +33,22 @@<br>
     VSTORE_VECTORIZE(__CLC_SCALAR___CLC_GENTYPE, __local) \<br>
     VSTORE_VECTORIZE(__CLC_SCALAR___CLC_GENTYPE, __global) \<br>
<br>
-#define VSTORE_TYPES() \<br>
-    VSTORE_ADDR_SPACES(char) \<br>
-    VSTORE_ADDR_SPACES(uchar) \<br>
-    VSTORE_ADDR_SPACES(short) \<br>
-    VSTORE_ADDR_SPACES(ushort) \<br>
-    VSTORE_ADDR_SPACES(int) \<br>
-    VSTORE_ADDR_SPACES(uint) \<br>
-    VSTORE_ADDR_SPACES(long) \<br>
-    VSTORE_ADDR_SPACES(ulong) \<br>
-    VSTORE_ADDR_SPACES(float) \<br>
+VSTORE_ADDR_SPACES(char)<br>
+VSTORE_ADDR_SPACES(uchar)<br>
+VSTORE_ADDR_SPACES(short)<br>
+VSTORE_ADDR_SPACES(ushort)<br>
+VSTORE_ADDR_SPACES(int)<br>
+VSTORE_ADDR_SPACES(uint)<br>
+VSTORE_ADDR_SPACES(long)<br>
+VSTORE_ADDR_SPACES(ulong)<br>
+VSTORE_ADDR_SPACES(float)<br>
<br>
-VSTORE_TYPES()<br>
<br>
 #ifdef cl_khr_fp64<br>
 #pragma OPENCL EXTENSION cl_khr_fp64 : enable<br>
     VSTORE_ADDR_SPACES(double)<br>
 #endif<br>
+<br>
 #ifdef cl_khr_fp16<br>
 #pragma OPENCL EXTENSION cl_khr_fp16 : enable<br>
     VSTORE_ADDR_SPACES(half)<br>
@@ -95,13 +94,17 @@ DECLARE_HELPER(double, __local, __builtin_store_half);<br>
        VEC_STORE8(STYPE, AS, val.lo) \<br>
        VEC_STORE8(STYPE, AS, val.hi)<br>
<br>
-#define __FUNC(SUFFIX, VEC_SIZE, TYPE, STYPE, AS) \<br>
+#define __FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, STYPE, AS) \<br>
   _CLC_OVERLOAD _CLC_DEF void vstore_half##SUFFIX(TYPE vec, size_t offset, AS half *mem) { \<br>
     offset *= VEC_SIZE; \<br>
     VEC_STORE##VEC_SIZE(STYPE, AS, vec) \<br>
+  } \<br>
+  _CLC_OVERLOAD _CLC_DEF void vstorea_half##SUFFIX(TYPE vec, size_t offset, AS half *mem) { \<br>
+    offset *= OFFSET; \<br>
+    VEC_STORE##VEC_SIZE(STYPE, AS, vec) \<br>
   }<br>
<br>
-#define FUNC(SUFFIX, VEC_SIZE, TYPE, STYPE, AS) __FUNC(SUFFIX, VEC_SIZE, TYPE, STYPE, AS)<br>
+#define FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, STYPE, AS) __FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, STYPE, AS)<br>
<br>
 #define __CLC_BODY "vstore_half.inc"<br>
 #include <clc/math/gentype.inc><br>
@@ -115,6 +118,5 @@ DECLARE_HELPER(double, __local, __builtin_store_half);<br>
 #undef VEC_LOAD2<br>
 #undef VEC_LOAD1<br>
 #undef DECLARE_HELPER<br>
-#undef VSTORE_TYPES<br>
 #undef VSTORE_ADDR_SPACES<br>
 #undef VSTORE_VECTORIZE<br>
diff --git a/generic/lib/shared/vstore_half.inc b/generic/lib/shared/vstore_half.inc<br>
index fee52bc..ee4e38b 100644<br>
--- a/generic/lib/shared/vstore_half.inc<br>
+++ b/generic/lib/shared/vstore_half.inc<br>
@@ -1,10 +1,19 @@<br>
<br>
 #ifdef __CLC_VECSIZE<br>
-  FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __private);<br>
-  FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __local);<br>
-  FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __global);<br>
+<br>
+#if __CLC_VECSIZE == 3<br>
+#  define __CLC_OFFSET 4<br>
+#else<br>
+#  define __CLC_OFFSET __CLC_VECSIZE<br>
+#endif<br>
+<br>
+  FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __private);<br>
+  FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __local);<br>
+  FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __global);<br>
+<br>
+#undef __CLC_OFFSET<br>
 #else<br>
-  FUNC(, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __private);<br>
-  FUNC(, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __local);<br>
-  FUNC(, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __global);<br>
+  FUNC(, 1, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __private);<br>
+  FUNC(, 1, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __local);<br>
+  FUNC(, 1, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __global);<br>
 #endif<br>
--<br>
2.13.6<br>
<br>
</blockquote></div>