diff --git a/util/crc32c.cc b/util/crc32c.cc index b8d281a275..2b237b48e4 100644 --- a/util/crc32c.cc +++ b/util/crc32c.cc @@ -292,10 +292,12 @@ static inline uint32_t LE_LOAD32(const uint8_t *p) { } #ifdef __SSE4_2__ +#ifdef __LP64__ static inline uint64_t LE_LOAD64(const uint8_t *p) { return DecodeFixed64(reinterpret_cast(p)); } #endif +#endif static inline void Slow_CRC32(uint64_t* l, uint8_t const **p) { uint32_t c = static_cast(*l ^ LE_LOAD32(*p)); @@ -315,8 +317,15 @@ static inline void Slow_CRC32(uint64_t* l, uint8_t const **p) { static inline void Fast_CRC32(uint64_t* l, uint8_t const **p) { #ifdef __SSE4_2__ +#ifdef __LP64__ *l = _mm_crc32_u64(*l, LE_LOAD64(*p)); *p += 8; +#else + *l = _mm_crc32_u32(static_cast(*l), LE_LOAD32(*p)); + *p += 4; + *l = _mm_crc32_u32(static_cast(*l), LE_LOAD32(*p)); + *p += 4; +#endif #else Slow_CRC32(l, p); #endif