From f71ef1dddfc7cf34944c510b85bec074f431bb12 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Wed, 1 Mar 2017 20:53:59 +0100 Subject: [PATCH] vppinfra: fix issue when copying 16 bytes with clib_memcpy Current code wos copying same data twice when length is 16. Change-Id: I8d935b32f61672aaea9789c097a5083ae8f78cdd Signed-off-by: Damjan Marion --- src/vppinfra/memcpy_avx.h | 5 +++++ src/vppinfra/memcpy_sse3.h | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/vppinfra/memcpy_avx.h b/src/vppinfra/memcpy_avx.h index e3feb76b6b7..d95bbad72b8 100644 --- a/src/vppinfra/memcpy_avx.h +++ b/src/vppinfra/memcpy_avx.h @@ -185,6 +185,11 @@ clib_memcpy (void *dst, const void *src, size_t n) /** * Fast way when copy size doesn't exceed 512 bytes */ + if (n == 16) + { + clib_mov16 ((u8 *) dst, (const u8 *) src); + return ret; + } if (n <= 32) { clib_mov16 ((u8 *) dst, (const u8 *) src); diff --git a/src/vppinfra/memcpy_sse3.h b/src/vppinfra/memcpy_sse3.h index 4fc48c86c8b..49baf5e5d31 100644 --- a/src/vppinfra/memcpy_sse3.h +++ b/src/vppinfra/memcpy_sse3.h @@ -224,6 +224,11 @@ clib_memcpy (void *dst, const void *src, size_t n) /** * Fast way when copy size doesn't exceed 512 bytes */ + if (n == 16) + { + clib_mov16 ((u8 *) dst, (const u8 *) src); + return ret; + } if (n <= 32) { clib_mov16 ((u8 *) dst, (const u8 *) src); -- 2.16.6