in source/crc_sw.c [1182:1204]
static uint32_t s_crc_generic_sb16(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 >= 16) {
uint32_t c1 = *current++ ^ crc;
uint32_t c2 = *current++;
uint32_t c3 = *current++;
uint32_t c4 = *current++;
uint32_t t1 = (*table)[15][c1 & 0xff] ^ (*table)[14][(c1 >> 8) & 0xff] ^ (*table)[13][(c1 >> 16) & 0xff] ^
(*table)[12][(c1 >> 24) & 0xff];
uint32_t t2 = (*table)[11][c2 & 0xff] ^ (*table)[10][(c2 >> 8) & 0xff] ^ (*table)[9][(c2 >> 16) & 0xff] ^
(*table)[8][(c2 >> 24) & 0xff];
uint32_t t3 = (*table)[7][c3 & 0xff] ^ (*table)[6][(c3 >> 8) & 0xff] ^ (*table)[5][(c3 >> 16) & 0xff] ^
(*table)[4][(c3 >> 24) & 0xff];
uint32_t t4 = (*table)[3][c4 & 0xff] ^ (*table)[2][(c4 >> 8) & 0xff] ^ (*table)[1][(c4 >> 16) & 0xff] ^
(*table)[0][(c4 >> 24) & 0xff];
crc = t1 ^ t2 ^ t3 ^ t4;
remaining -= 16;
}
return s_crc_generic_sb4(&input[length - remaining], remaining, crc, table_ptr);
}