#endif
#endif
-#if defined (__AVX512F__)
+#if defined (__AVX512BITALG__)
#define CLIB_HAVE_VEC512
#endif
#endif
#define _vector_size(n) __attribute__ ((vector_size (n)))
+#define _vector_size_unaligned(n) __attribute__ ((vector_size (n), __aligned__ (1)))
#define foreach_vec64i _(i,8,8) _(i,16,4) _(i,32,2)
#define foreach_vec64u _(u,8,8) _(u,16,4) _(u,32,2)
/* Type Definitions */
#define _(t,s,c) \
typedef t##s t##s##x##c _vector_size (s/8*c); \
+typedef t##s t##s##x##c##u _vector_size_unaligned (s/8*c); \
typedef union { \
t##s##x##c as_##t##s##x##c; \
t##s as_##t##s[c]; \
typedef u64 u64x _vector_size (8);
#endif
+/* universal inlines */
+#define _(t, s, c) \
+static_always_inline t##s##x##c \
+t##s##x##c##_zero () \
+{ return (t##s##x##c) {}; } \
+
+foreach_vec
+#undef _
+
#undef _vector_size
#define VECTOR_WORD_TYPE(t) t##x
#include <vppinfra/vector_avx2.h>
#endif
-#if defined (__AVX512F__)
+#if defined(__AVX512F__)
#include <vppinfra/vector_avx512.h>
#endif
#include <vppinfra/vector_neon.h>
#endif
-#if (defined(CLIB_HAVE_VEC128) || defined(CLIB_HAVE_VEC64))
-#include <vppinfra/vector_funcs.h>
-#endif
-
/* this macro generate _splat inline functions for each scalar vector type */
#ifndef CLIB_VEC128_SPLAT_DEFINED
#define _(t, s, c) \