vppinfra: AVX512 mask load/stores and compress store
[vpp.git] / src / vppinfra / vector_sse42.h
index e75580e..06952f1 100644 (file)
@@ -650,6 +650,14 @@ u32x4_hadd (u32x4 v1, u32x4 v2)
   return (u32x4) _mm_hadd_epi32 ((__m128i) v1, (__m128i) v2);
 }
 
+static_always_inline u32 __clib_unused
+u32x4_sum_elts (u32x4 sum4)
+{
+  sum4 += (u32x4) u8x16_align_right (sum4, sum4, 8);
+  sum4 += (u32x4) u8x16_align_right (sum4, sum4, 4);
+  return sum4[0];
+}
+
 static_always_inline u8x16
 u8x16_shuffle (u8x16 v, u8x16 m)
 {
@@ -668,11 +676,11 @@ u32x4_shuffle (u32x4 v, const int a, const int b, const int c, const int d)
 #endif
 }
 
-/* _extend_to_ */
+/* _from_ */
 /* *INDENT-OFF* */
 #define _(f,t,i) \
 static_always_inline t                                                 \
-f##_extend_to_##t (f x)                                                        \
+t##_from_##f (f x)                                                     \
 { return (t) _mm_cvt##i ((__m128i) x); }
 
 _(u8x16, u16x8, epu8_epi16)
@@ -699,7 +707,7 @@ u64x2_gather (void *p0, void *p1)
 }
 
 static_always_inline u32x4
-u32x4_gather (void *p0, void *p1, void *p2, void *p3, void *p4)
+u32x4_gather (void *p0, void *p1, void *p2, void *p3)
 {
   u32x4 r = { *(u32 *) p0, *(u32 *) p1, *(u32 *) p2, *(u32 *) p3 };
   return r;