X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=crc%2Fcrc32c.h;h=11bcf9c8f4e8577efccf7eac467043bd572e617f;hb=4d01ece69f7b4d7bd56210e0f839944a91c5679f;hp=1498db91a4d072ec77d2ec9ef488b81bd861c1ba;hpb=bac39e0e8807a1d52863ad8304e67221df2bc63b;p=fio.git diff --git a/crc/crc32c.h b/crc/crc32c.h index 1498db91..11bcf9c8 100644 --- a/crc/crc32c.h +++ b/crc/crc32c.h @@ -18,6 +18,27 @@ #ifndef CRC32C_H #define CRC32C_H -extern uint32_t crc32c(unsigned char const *, unsigned long); +#include "../arch/arch.h" + +extern uint32_t crc32c_sw(unsigned char const *, unsigned long); +extern int crc32c_intel_available; + +#ifdef ARCH_HAVE_SSE4_2 +extern uint32_t crc32c_intel(unsigned char const *, unsigned long); +extern void crc32c_intel_probe(void); +#else +#define crc32c_intel crc32c_sw +static inline void crc32c_intel_probe(void) +{ +} +#endif + +static inline uint32_t fio_crc32c(unsigned char const *buf, unsigned long len) +{ + if (crc32c_intel_available) + return crc32c_intel(buf, len); + + return crc32c_sw(buf, len); +} #endif