X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fcrc32.h;h=fec67cd9757fbfe478b8d6736b901ae650800354;hb=e57df7c6771906ce9e1b373028755eabc4764c0f;hp=340b539558e56ed61814cb9104f742488d0acb23;hpb=8e66b9bf4ba90279631e6a0e8ccc2eab5f9156c2;p=vpp.git diff --git a/src/vppinfra/crc32.h b/src/vppinfra/crc32.h index 340b539558e..fec67cd9757 100644 --- a/src/vppinfra/crc32.h +++ b/src/vppinfra/crc32.h @@ -23,19 +23,22 @@ #include #define crc32_u64 _mm_crc32_u64 +#define crc32_u32 _mm_crc32_u32 static_always_inline u32 clib_crc32c (u8 * s, int len) { u32 v = 0; -#if __x86_64__ +#if defined(__x86_64__) for (; len >= 8; len -= 8, s += 8) v = _mm_crc32_u64 (v, *((u64 *) s)); #else /* workaround weird GCC bug when using _mm_crc32_u32 which happens with -O2 optimization */ - volatile ("":::"memory"); +#if !defined (__i686__) + asm volatile ("":::"memory"); +#endif #endif for (; len >= 4; len -= 4, s += 4) @@ -56,6 +59,7 @@ clib_crc32c (u8 * s, int len) #define crc32_u64 __crc32cd +#define crc32_u32 __crc32cw static_always_inline u32 clib_crc32c (u8 * s, int len)