swr/rast: fix movemask_ps / movemask_pd on AVX512
authorTim Rowley <timothy.o.rowley@intel.com>
Thu, 20 Jul 2017 22:06:14 +0000 (17:06 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Wed, 2 Aug 2017 16:39:33 +0000 (11:39 -0500)
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
src/gallium/drivers/swr/rasterizer/common/simdlib_512_avx512.inl

index 1001417704dbab04df62ddd41b26cb125b6bdd17..1dbfff8c9c193d2f4cb077f908f1c1f0bc0455e9 100644 (file)
@@ -554,15 +554,20 @@ static SIMDINLINE uint64_t SIMDCALL movemask_epi8(Integer a)
 
 static SIMDINLINE uint32_t SIMDCALL movemask_pd(Double a)
 {
-    __mmask8 m = _mm512_test_epi64_mask(castpd_si(a), set1_epi32(-1));
+    __mmask8 m = _mm512_test_epi64_mask(castpd_si(a), set1_epi64(0x8000000000000000LL));
     return static_cast<uint32_t>(m);
 }
 static SIMDINLINE uint32_t SIMDCALL movemask_ps(Float a)
 {
-    __mmask16 m = _mm512_test_epi32_mask(castps_si(a), set1_epi32(-1));
+    __mmask16 m = _mm512_test_epi32_mask(castps_si(a), set1_epi32(0x8000000));
     return static_cast<uint32_t>(m);
 }
 
+static SIMDINLINE Integer SIMDCALL set1_epi64(long long i) // return i (all elements are same value)
+{
+    return _mm512_set1_epi64(i);
+}
+
 static SIMDINLINE Integer SIMDCALL set1_epi32(int i) // return i (all elements are same value)
 {
     return _mm512_set1_epi32(i);