swr/rast: constify swr rasterizer
[mesa.git] / src / gallium / drivers / swr / rasterizer / common / simdlib.hpp
index fb1113204d5ad361c1315a7ef925946f0d1249bd..22d7da42d0af1f84570a1d9e68caa917cffc9496 100644 (file)
@@ -53,9 +53,16 @@ namespace SIMDImpl
 #if SIMD_ARCH >= SIMD_ARCH_AVX512
         struct AVX512Impl : AVX2Impl
         {
+#if defined(SIMD_OPT_128_AVX512)
 #define __SIMD_LIB_AVX512_HPP__
 #include "simdlib_128_avx512.inl"
+#if defined(SIMD_ARCH_KNIGHTS)
+#include "simdlib_128_avx512_knights.inl"
+#else // optimize for core
+#include "simdlib_128_avx512_core.inl"
+#endif // defined(SIMD_ARCH_KNIGHTS)
 #undef __SIMD_LIB_AVX512_HPP__
+#endif // SIMD_OPT_128_AVX512
         }; // struct AVX2Impl
 #endif // #if SIMD_ARCH >= SIMD_ARCH_AVX512
 
@@ -103,9 +110,16 @@ namespace SIMDImpl
 #if SIMD_ARCH >= SIMD_ARCH_AVX512
         struct AVX512Impl : AVX2Impl
         {
+#if defined(SIMD_OPT_256_AVX512)
 #define __SIMD_LIB_AVX512_HPP__
 #include "simdlib_256_avx512.inl"
+#if defined(SIMD_ARCH_KNIGHTS)
+#include "simdlib_256_avx512_knights.inl"
+#else // optimize for core
+#include "simdlib_256_avx512_core.inl"
+#endif // defined(SIMD_ARCH_KNIGHTS)
 #undef __SIMD_LIB_AVX512_HPP__
+#endif // SIMD_OPT_256_AVX512
         }; // struct AVX2Impl
 #endif // #if SIMD_ARCH >= SIMD_ARCH_AVX512
 
@@ -150,13 +164,20 @@ namespace SIMDImpl
 
 
 #if SIMD_ARCH >= SIMD_ARCH_AVX512
-        struct AVX512Impl
+        struct AVX512Impl : AVXImplBase<SIMD256Impl::AVX512Impl>
         {
 #define __SIMD_LIB_AVX512_HPP__
 #include "simdlib_512_avx512.inl"
 #include "simdlib_512_avx512_masks.inl"
+#if defined(SIMD_ARCH_KNIGHTS)
+#include "simdlib_512_avx512_knights.inl"
+#include "simdlib_512_avx512_masks_knights.inl"
+#else // optimize for core
+#include "simdlib_512_avx512_core.inl"
+#include "simdlib_512_avx512_masks_core.inl"
+#endif // defined(SIMD_ARCH_KNIGHTS)
 #undef __SIMD_LIB_AVX512_HPP__
-        }; // struct AVX512Impl
+        }; // struct AVX512ImplBase
 #endif // #if SIMD_ARCH >= SIMD_ARCH_AVX512
 
         struct Traits : SIMDImpl::Traits
@@ -204,7 +225,7 @@ struct SIMDBase : Traits::IsaImpl
     }
 
     static SIMDINLINE
-    void vec4_set1_vps(Vec4& r, Float s)
+    void vec4_set1_vps(Vec4& r, Float const &s)
     {
         r[0] = s;
         r[1] = s;
@@ -264,7 +285,7 @@ struct SIMDBase : Traits::IsaImpl
     }
 
     static SIMDINLINE
-    void vec4_mul_ps(Vec4& r, const Vec4& v, Float s)
+    void vec4_mul_ps(Vec4& r, const Vec4& v, Float const &s)
     {
         r[0] = SIMD::mul_ps(v[0], s);
         r[1] = SIMD::mul_ps(v[1], s);
@@ -282,7 +303,7 @@ struct SIMDBase : Traits::IsaImpl
     }
 
     static SIMDINLINE
-    void vec4_add_ps(Vec4& r, const Vec4& v0, Float s)
+    void vec4_add_ps(Vec4& r, const Vec4& v0, Float const &s)
     {
         r[0] = SIMD::add_ps(v0[0], s);
         r[1] = SIMD::add_ps(v0[1], s);
@@ -300,7 +321,7 @@ struct SIMDBase : Traits::IsaImpl
     }
 
     static SIMDINLINE
-    void vec4_min_ps(Vec4& r, const Vec4& v0, Float s)
+    void vec4_min_ps(Vec4& r, const Vec4& v0, Float const &s)
     {
         r[0] = SIMD::min_ps(v0[0], s);
         r[1] = SIMD::min_ps(v0[1], s);
@@ -309,7 +330,7 @@ struct SIMDBase : Traits::IsaImpl
     }
 
     static SIMDINLINE
-    void vec4_max_ps(Vec4& r, const Vec4& v0, Float s)
+    void vec4_max_ps(Vec4& r, const Vec4& v0, Float const &s)
     {
         r[0] = SIMD::max_ps(v0[0], s);
         r[1] = SIMD::max_ps(v0[1], s);