static uint32_t s_crc_generic_sb8()

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);
}