X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fstring.h;h=b00c0cfbcc231d198fb0b2c64fee533101d9e7de;hb=178cf493d009995b28fdf220f04c98860ff79a9b;hp=5c1d82677428cec4d2337efcb18574cb3f8e5624;hpb=b7b929931a07fbb27b43d5cd105f366c3e29807e;p=vpp.git diff --git a/src/vppinfra/string.h b/src/vppinfra/string.h index 5c1d8267742..b00c0cfbcc2 100644 --- a/src/vppinfra/string.h +++ b/src/vppinfra/string.h @@ -78,10 +78,10 @@ void clib_memswap (void *_a, void *_b, uword bytes); #elif __SSSE3__ #include #else -#define _clib_memcpy(a,b,c) memcpy(a,b,c) +#define clib_memcpy_fast(a,b,c) memcpy(a,b,c) #endif #else /* __COVERITY__ */ -#define _clib_memcpy(a,b,c) memcpy(a,b,c) +#define clib_memcpy_fast(a,b,c) memcpy(a,b,c) #endif /* c-11 string manipulation variants */ @@ -107,6 +107,16 @@ memcpy_s_inline (void *__restrict__ dest, rsize_t dmax, uword low, hi; u8 bad; + /* + * Optimize constant-number-of-bytes calls without asking + * "too many questions for someone from New Jersey" + */ + if (__builtin_constant_p (n)) + { + clib_memcpy_fast (dest, src, n); + return EOK; + } + /* * call bogus if: src or dst NULL, trying to copy * more data than we have space in dst, or src == dst. @@ -140,7 +150,7 @@ memcpy_s_inline (void *__restrict__ dest, rsize_t dmax, return EINVAL; } - _clib_memcpy (dest, src, n); + clib_memcpy_fast (dest, src, n); return EOK; } @@ -247,10 +257,10 @@ clib_memcpy64_x4 (void *d0, void *d1, void *d2, void *d3, void *s) _mm_storeu_si128 ((__m128i *) (d3 + 3 * 16), r3); #else - clib_memcpy (d0, s, 64); - clib_memcpy (d1, s, 64); - clib_memcpy (d2, s, 64); - clib_memcpy (d3, s, 64); + clib_memcpy_fast (d0, s, 64); + clib_memcpy_fast (d1, s, 64); + clib_memcpy_fast (d2, s, 64); + clib_memcpy_fast (d3, s, 64); #endif }