X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fvppinfra%2Fvector.h;h=33e2b6a8773cbcdcc5cbaa0e185e231da42a1432;hb=027d813a509be0f30e05b48b888007b0094e4faf;hp=2157ab7d1d0215580b20f51cd84e0ae2214c13a3;hpb=a52e1668c9976bd5cdd20d02b668df41ea41f16f;p=vpp.git diff --git a/src/vppinfra/vector.h b/src/vppinfra/vector.h index 2157ab7d1d0..33e2b6a8773 100644 --- a/src/vppinfra/vector.h +++ b/src/vppinfra/vector.h @@ -42,11 +42,12 @@ /* Vector types. */ -#if defined (__MMX__) || defined (__IWMMXT__) || defined (__aarch64__) +#if defined (__MMX__) || defined (__IWMMXT__) || defined (__aarch64__) \ + || defined (__i686__) #define CLIB_HAVE_VEC64 #endif -#if defined (__aarch64__) && defined(__ARM_NEON) +#if defined (__aarch64__) && defined(__ARM_NEON) || defined (__i686__) #define CLIB_HAVE_VEC128 #endif @@ -65,7 +66,7 @@ #endif #endif -#if defined (__AVX512F__) +#if defined (__AVX512BITALG__) #define CLIB_HAVE_VEC512 #endif @@ -75,6 +76,7 @@ #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) @@ -110,6 +112,7 @@ /* 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]; \ @@ -152,6 +155,15 @@ typedef u32 u32x _vector_size (8); 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 @@ -165,7 +177,10 @@ typedef u64 u64x _vector_size (8); #include #endif -#if defined (__AVX512F__) +#if defined (__AVX512BITALG__) +/* Due to power level transition issues, we don't preffer AVX-512 on + Skylake X and CascadeLake CPUs, AVX512BITALG is introduced on + icelake CPUs */ #include #endif