swr/rast: vmask() implementations for KNL
authorTim Rowley <timothy.o.rowley@intel.com>
Thu, 27 Jul 2017 19:56:46 +0000 (14:56 -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_knights.inl

index 17001be0674f9f854d447956155d065b07f3b942..2ee7639ccfa7bbf2d75a67e77d1577b68f9cdb11 100644 (file)
     }
 #define SIMD_IWRAPPER_2I(op) SIMD_IWRAPPER_2I_(op, op)
 
+private:
+    static SIMDINLINE Integer vmask(__mmask8 m)
+    {
+        return _mm512_mask_set1_epi64(_mm512_setzero_si512(), m, -1LL);
+    }
+    static SIMDINLINE Integer vmask(__mmask32 m)
+    {
+        return _mm512_mask_set1_epi16(_mm512_setzero_si512(), m, -1);
+    }
+    static SIMDINLINE Integer vmask(__mmask64 m)
+    {
+        return _mm512_mask_set1_epi8(_mm512_setzero_si512(), m, -1);
+    }
+
 public:
 SIMD_WRAPPERI_2_(and_ps, and_epi32);          // return a & b       (float treated as int)
 SIMD_WRAPPERI_2_(andnot_ps, andnot_epi32);    // return (~a) & b    (float treated as int)