From 31e59d9b01a04d734553136fdbd9e570b5241faf Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Wed, 5 Jul 2017 18:15:08 +0200 Subject: vppinfra: revert clib_memcpy optimization Looks like some compiler versions are producing wrong code when we are copying 9-16 bytes so reverting back to the original code. Change-Id: I74b5fa54a3b01f6288648f1cb0926030edd3b26f Signed-off-by: Damjan Marion --- src/vppinfra/memcpy_avx.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/vppinfra/memcpy_avx.h') diff --git a/src/vppinfra/memcpy_avx.h b/src/vppinfra/memcpy_avx.h index e3feb76b..e987d044 100644 --- a/src/vppinfra/memcpy_avx.h +++ b/src/vppinfra/memcpy_avx.h @@ -51,19 +51,22 @@ #include #include -typedef u8 u8x16u __attribute__ ((vector_size (16), aligned (1))); -typedef u8 u8x32u __attribute__ ((vector_size (32), aligned (1))); - static inline void clib_mov16 (u8 * dst, const u8 * src) { - *(u8x16u *) dst = *(u8x16u *) src; + __m128i xmm0; + + xmm0 = _mm_loadu_si128 ((const __m128i *) src); + _mm_storeu_si128 ((__m128i *) dst, xmm0); } static inline void clib_mov32 (u8 * dst, const u8 * src) { - *(u8x32u *) dst = *(u8x32u *) src; + __m256i ymm0; + + ymm0 = _mm256_loadu_si256 ((const __m256i *) src); + _mm256_storeu_si256 ((__m256i *) dst, ymm0); } static inline void -- cgit 1.2.3-korg