in source/crc_sw.c [1162:1178]
static uint32_t s_crc_generic_sb8(const uint8_t *input, int length, uint32_t crc, const uint32_t *table_ptr) {
const uint32_t *current = (const uint32_t *)input;
int remaining = length;
uint32_t(*table)[16][256] = (uint32_t(*)[16][256])table_ptr;
while (remaining >= 8) {
uint32_t c1 = *current++ ^ crc;
uint32_t c2 = *current++;
uint32_t t1 = (*table)[7][c1 & 0xff] ^ (*table)[6][(c1 >> 8) & 0xff] ^ (*table)[5][(c1 >> 16) & 0xff] ^
(*table)[4][(c1 >> 24) & 0xff];
uint32_t t2 = (*table)[3][c2 & 0xff] ^ (*table)[2][(c2 >> 8) & 0xff] ^ (*table)[1][(c2 >> 16) & 0xff] ^
(*table)[0][(c2 >> 24) & 0xff];
crc = t1 ^ t2;
remaining -= 8;
}
return s_crc_generic_sb4(&input[length - remaining], remaining, crc, table_ptr);
}