X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fcrc32.h;h=5f4d94f3847472667c7391b7ed230c12c9349639;hb=111add7e5d6581bb4eca05cc862a651ff6a09792;hp=5a47236a2ba1d5443db574f3ae3e809db8973f2f;hpb=b4bd28a490012ecbce292561da404d4e9b02d24b;p=vpp.git diff --git a/src/vppinfra/crc32.h b/src/vppinfra/crc32.h index 5a47236a2ba..5f4d94f3847 100644 --- a/src/vppinfra/crc32.h +++ b/src/vppinfra/crc32.h @@ -16,10 +16,15 @@ #ifndef __included_crc32_h__ #define __included_crc32_h__ +#include + #if __SSE4_2__ #define clib_crc32c_uses_intrinsics #include +#define crc32_u64 _mm_crc32_u64 +#define crc32_u32 _mm_crc32_u32 + static_always_inline u32 clib_crc32c (u8 * s, int len) { @@ -31,7 +36,9 @@ clib_crc32c (u8 * s, int len) #else /* workaround weird GCC bug when using _mm_crc32_u32 which happens with -O2 optimization */ +#if !defined (__i686__) volatile ("":::"memory"); +#endif #endif for (; len >= 4; len -= 4, s += 4) @@ -47,9 +54,13 @@ clib_crc32c (u8 * s, int len) } #elif __ARM_FEATURE_CRC32 -#define clib_crc32c_with_intrinsics +#define clib_crc32c_uses_intrinsics #include + +#define crc32_u64 __crc32cd +#define crc32_u32 __crc32cw + static_always_inline u32 clib_crc32c (u8 * s, int len) {