#![expect(
unsafe_code,
reason = "register loads and stores through pointers the kernels bounds-check"
)]
pub(super) trait Row: Copy {
const GROUPS: usize;
unsafe fn zero() -> Self;
unsafe fn splat(v: u32) -> Self;
unsafe fn load_words(p: *const u32, stride: usize) -> Self;
unsafe fn load_bytes(p: *const u8, stride: usize) -> Self;
unsafe fn store_words(self, p: *mut u32, stride: usize);
unsafe fn store_bytes(self, p: *mut u8, stride: usize);
unsafe fn or(self, other: Self) -> Self;
unsafe fn and(self, other: Self) -> Self;
unsafe fn shl(self, n: u32) -> Self;
unsafe fn shr(self, n: u32) -> Self;
}