use crate::_SIMD_LEN;
#[inline(always)]
pub fn simd_bytes<A>(
aux: &mut A,
bytes: &[u8],
mut aligned: impl FnMut(&mut A, &[u8; _SIMD_LEN]),
mut unaligned: impl FnMut(&mut A, &[u8]),
) {
let (prefix, data, suffix) = unsafe { bytes.align_to::<Simd>() };
unaligned(aux, prefix);
for elem in data {
aligned(aux, &elem.0);
}
unaligned(aux, suffix);
}
#[inline(always)]
pub fn simd_bytes_mut<A>(
aux: &mut A,
bytes: &mut [u8],
mut aligned: impl FnMut(&mut A, &mut [u8; _SIMD_LEN]),
mut unaligned: impl FnMut(&mut A, &mut [u8]),
) {
let (prefix, data, suffix) = unsafe { bytes.align_to_mut::<Simd>() };
unaligned(aux, prefix);
for elem in data {
aligned(aux, &mut elem.0);
}
unaligned(aux, suffix);
}
_simd! {
4 => {
#[repr(align(4))]
struct Simd([u8; 4]);
},
16 => {
#[repr(align(16))]
struct Simd([u8; 16]);
},
32 => {
#[repr(align(32))]
struct Simd([u8; 32]);
},
64 => {
#[repr(align(64))]
struct Simd([u8; 64]);
}
}