swr/rast: fix memory paths for avx512 optimized avx/sse
authorTim Rowley <timothy.o.rowley@intel.com>
Thu, 20 Jul 2017 15:51:30 +0000 (10:51 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Fri, 21 Jul 2017 20:13:14 +0000 (15:13 -0500)
Source/destination will not be AVX512 aligned, use the
unaligned load/store intrinsics.

Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
src/gallium/drivers/swr/rasterizer/common/simdlib_128_avx512.inl
src/gallium/drivers/swr/rasterizer/common/simdlib_256_avx512.inl

index aaa74146ad9ea204d3ed7a4d5a2c75d895a7e162..012f3105e9f9ac9426f8c5cb1f1bc4ed0e1061ac 100644 (file)
@@ -294,12 +294,12 @@ SIMD_IWRAPPER_2_8(unpacklo_epi8);
 //-----------------------------------------------------------------------
 static SIMDINLINE Float SIMDCALL load_ps(float const *p)   // return *p    (loads SIMD width elements from memory)
 {
-    return __conv(_mm512_maskz_load_ps(__mmask16(0xf), p));
+    return __conv(_mm512_maskz_loadu_ps(__mmask16(0xf), p));
 }
 
 static SIMDINLINE Integer SIMDCALL load_si(Integer const *p)  // return *p
 {
-    return __conv(_mm512_maskz_load_epi32(__mmask16(0xf), p));
+    return __conv(_mm512_maskz_loadu_epi32(__mmask16(0xf), p));
 }
 
 static SIMDINLINE Float SIMDCALL loadu_ps(float const *p)  // return *p    (same as load_ps but allows for unaligned mem)
@@ -353,17 +353,17 @@ static SIMDINLINE void SIMDCALL maskstore_ps(float *p, Integer mask, Float src)
 {
     __mmask16 m = 0xf;
     m = _mm512_mask_test_epi32_mask(m, __conv(mask), _mm512_set1_epi32(0x80000000));
-    _mm512_mask_store_ps(p, m, __conv(src));
+    _mm512_mask_storeu_ps(p, m, __conv(src));
 }
 
 static SIMDINLINE void SIMDCALL store_ps(float *p, Float a)    // *p = a   (stores all elements contiguously in memory)
 {
-    _mm512_mask_store_ps(p, __mmask16(0xf), __conv(a));
+    _mm512_mask_storeu_ps(p, __mmask16(0xf), __conv(a));
 }
 
 static SIMDINLINE void SIMDCALL store_si(Integer *p, Integer a)   // *p = a
 {
-    _mm512_mask_store_epi32(p, __mmask16(0xf), __conv(a));
+    _mm512_mask_storeu_epi32(p, __mmask16(0xf), __conv(a));
 }
 
 //=======================================================================
index 5103bdafa22d33348f6d91108115132647680467..a8d2a4b8bfd3acab37630c1f72e156e3eaccc630 100644 (file)
@@ -295,12 +295,12 @@ SIMD_IWRAPPER_2_8(unpacklo_epi8);
 //-----------------------------------------------------------------------
 static SIMDINLINE Float SIMDCALL load_ps(float const *p)   // return *p    (loads SIMD width elements from memory)
 {
-    return __conv(_mm512_maskz_load_ps(__mmask16(0xff), p));
+    return __conv(_mm512_maskz_loadu_ps(__mmask16(0xff), p));
 }
 
 static SIMDINLINE Integer SIMDCALL load_si(Integer const *p)  // return *p
 {
-    return __conv(_mm512_maskz_load_epi32(__mmask16(0xff), p));
+    return __conv(_mm512_maskz_loadu_epi32(__mmask16(0xff), p));
 }
 
 static SIMDINLINE Float SIMDCALL loadu_ps(float const *p)  // return *p    (same as load_ps but allows for unaligned mem)
@@ -354,17 +354,17 @@ static SIMDINLINE void SIMDCALL maskstore_ps(float *p, Integer mask, Float src)
 {
     __mmask16 m = 0xff;
     m = _mm512_mask_test_epi32_mask(m, __conv(mask), _mm512_set1_epi32(0x80000000));
-    _mm512_mask_store_ps(p, m, __conv(src));
+    _mm512_mask_storeu_ps(p, m, __conv(src));
 }
 
 static SIMDINLINE void SIMDCALL store_ps(float *p, Float a)    // *p = a   (stores all elements contiguously in memory)
 {
-    _mm512_mask_store_ps(p, __mmask16(0xff), __conv(a));
+    _mm512_mask_storeu_ps(p, __mmask16(0xff), __conv(a));
 }
 
 static SIMDINLINE void SIMDCALL store_si(Integer *p, Integer a)   // *p = a
 {
-    _mm512_mask_store_epi32(p, __mmask16(0xff), __conv(a));
+    _mm512_mask_storeu_epi32(p, __mmask16(0xff), __conv(a));
 }
 
 //=======================================================================