X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fvector_sse42.h;h=5d6a47d3915dfef901460e2a5584a52f6171015c;hb=359db1e622c7046102853e1bb0505897711e1a33;hp=7673794023030068a0c4ddf3e7fc89ac7f18f8ee;hpb=5df580eec93c0c6fc07dd38f8713f671565b9c38;p=vpp.git diff --git a/src/vppinfra/vector_sse42.h b/src/vppinfra/vector_sse42.h index 76737940230..5d6a47d3915 100644 --- a/src/vppinfra/vector_sse42.h +++ b/src/vppinfra/vector_sse42.h @@ -616,7 +616,7 @@ u8x16_shuffle (u8x16 v, u8x16 m) static_always_inline u32x4 u32x4_shuffle (u32x4 v, const int a, const int b, const int c, const int d) { -#ifdef __clang__ +#if defined(__clang__) || !__OPTIMIZE__ u32x4 r = { v[a], v[b], v[c], v[d] }; return r; #else @@ -648,6 +648,49 @@ _(i32x4, i64x2, epi32_epi64) #undef _ /* *INDENT-ON* */ +static_always_inline u64x2 +u64x2_gather (void *p0, void *p1) +{ + u64x2 r = { *(u64 *) p0, *(u64 *) p1 }; + return r; +} + +static_always_inline u32x4 +u32x4_gather (void *p0, void *p1, void *p2, void *p3, void *p4) +{ + u32x4 r = { *(u32 *) p0, *(u32 *) p1, *(u32 *) p2, *(u32 *) p3 }; + return r; +} + + +static_always_inline void +u64x2_scatter (u64x2 r, void *p0, void *p1) +{ + *(u64 *) p0 = r[0]; + *(u64 *) p1 = r[1]; +} + +static_always_inline void +u32x4_scatter (u32x4 r, void *p0, void *p1, void *p2, void *p3) +{ + *(u32 *) p0 = r[0]; + *(u32 *) p1 = r[1]; + *(u32 *) p2 = r[2]; + *(u32 *) p3 = r[3]; +} + +static_always_inline void +u64x2_scatter_one (u64x2 r, int index, void *p) +{ + *(u64 *) p = r[index]; +} + +static_always_inline void +u32x4_scatter_one (u32x4 r, int index, void *p) +{ + *(u32 *) p = r[index]; +} + #endif /* included_vector_sse2_h */