14#if defined(__SSE__) && defined(__x86_64__)
15#define HAVE_HWCRC32C 1
18#ifdef __ARM_FEATURE_CRC32
64#define POLY 0x82f63b78
75 for (
n = 0;
n < 256;
n++) {
77 crc = crc & 1 ? (crc >> 1) ^
POLY : crc >> 1;
78 crc = crc & 1 ? (crc >> 1) ^
POLY : crc >> 1;
79 crc = crc & 1 ? (crc >> 1) ^
POLY : crc >> 1;
80 crc = crc & 1 ? (crc >> 1) ^
POLY : crc >> 1;
81 crc = crc & 1 ? (crc >> 1) ^
POLY : crc >> 1;
82 crc = crc & 1 ? (crc >> 1) ^
POLY : crc >> 1;
83 crc = crc & 1 ? (crc >> 1) ^
POLY : crc >> 1;
84 crc = crc & 1 ? (crc >> 1) ^
POLY : crc >> 1;
87 for (
n = 0;
n < 256;
n++) {
89 for (
k = 1;
k < 8;
k++) {
101 const unsigned char *next = (
const unsigned char*)buf;
105 crc =
crci ^ 0xffffffff;
106 while (len && ((
uintptr_t)next & 7) != 0) {
107 crc =
crc32c_table[0][(crc ^ *next++) & 0xff] ^ (crc >> 8);
124 crc =
crc32c_table[0][(crc ^ *next++) & 0xff] ^ (crc >> 8);
154 for (
n = 0;
n < 32;
n++)
174 for (
n = 1;
n < 32;
n++) {
198 for (
n = 0;
n < 32;
n++)
210 for (
n = 0;
n < 256;
n++) {
223 return zeros[0][crc & 0xff] ^
zeros[1][(crc >> 8) & 0xff] ^
224 zeros[2][(crc >> 16) & 0xff] ^
zeros[3][crc >> 24];
232#define LONGx2 "16384"
254 const unsigned char *next = (
const unsigned char*)buf;
255 const unsigned char *
end;
262 crc0 = crc ^ 0xffffffff;
266 while (len && ((
uintptr_t)next & 7) != 0) {
269 :
"r"(next),
"0"(
crc0));
278 while (len >=
LONG*3) {
283 __asm__(
"crc32q\t" "(%3), %0\n\t"
284 "crc32q\t" LONGx1 "(%3), %1\n\t"
285 "crc32q\t" LONGx2 "(%3), %2"
289 }
while (next <
end);
298 while (len >=
SHORT*3) {
303 __asm__(
"crc32q\t" "(%3), %0\n\t"
304 "crc32q\t" SHORTx1 "(%3), %1\n\t"
309 }
while (next <
end);
318 end = next + (len - (len & 7));
322 :
"r"(next),
"0"(
crc0));
331 :
"r"(next),
"0"(
crc0));
353 (have) = (ecx >> 20) & 1; \
358#ifdef __ARM_FEATURE_CRC32
398#elif defined(__ARM_FEATURE_CRC32)
401#warning Hardware accelerated CRC32C is not available.
408#define SIZE (262144*3)
434 }
while (
off < (
size_t)
got);
static uint32_t gf2_matrix_times(uint32_t *mat, uint32_t vec)
uint32_t crc32c(uint32_t crc, const void *buf, size_t len)
static uint32_t crc32c_table[8][256]
static pthread_once_t crc32c_once_sw
static uint32_t crc32c_shift(uint32_t zeros[][256], uint32_t crc)
static void crc32c_init_sw(void)
static void gf2_matrix_square(uint32_t *square, uint32_t *mat)
uint32_t crc32c_sw(uint32_t crci, const void *buf, size_t len)
uint32_t crc32c_hw(uint32_t crc, const void *buf, size_t len)
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)