use super::kernel_tables;
use crate::checksum::common::portable;
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
pub(crate) const BYTEWISE_KERNEL_NAME: &str = "portable/bytewise";
#[inline(always)]
pub fn crc32_bytewise_ieee(crc: u32, data: &[u8]) -> u32 {
crc32_bytewise(crc, data, &kernel_tables::IEEE_TABLES_16[0])
}
#[inline(always)]
pub fn crc32c_bytewise(crc: u32, data: &[u8]) -> u32 {
crc32_bytewise(crc, data, &kernel_tables::CRC32C_TABLES_16[0])
}
#[inline]
pub fn crc32_slice16_ieee(crc: u32, data: &[u8]) -> u32 {
crc32_slice16(crc, data, &kernel_tables::IEEE_TABLES_16)
}
#[inline]
pub fn crc32c_slice16(crc: u32, data: &[u8]) -> u32 {
crc32_slice16(crc, data, &kernel_tables::CRC32C_TABLES_16)
}
#[inline(always)]
#[allow(clippy::indexing_slicing)] pub fn crc32_bytewise(mut crc: u32, data: &[u8], table: &[u32; 256]) -> u32 {
for &b in data {
let index = ((crc ^ (b as u32)) & 0xFF) as usize;
crc = table[index] ^ (crc >> 8);
}
crc
}
#[inline]
pub fn crc32_slice16(crc: u32, data: &[u8], tables: &[[u32; 256]; 16]) -> u32 {
portable::slice16_32(crc, data, tables)
}