#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PackingLayout {
RowMajor,
ColumnMajor,
PanelMajorA,
PanelMajorB,
}
#[must_use]
#[inline]
pub fn pack_a_index(row: usize, col: usize, mr: usize, kc: usize, _mc: usize) -> usize {
let panel = row / mr;
let row_in_panel = row % mr;
panel * mr * kc + col * mr + row_in_panel
}
#[must_use]
#[inline]
pub fn pack_b_index(row: usize, col: usize, nr: usize, kc: usize, _nc: usize) -> usize {
let panel = col / nr;
let col_in_panel = col % nr;
panel * kc * nr + row * nr + col_in_panel
}
#[must_use]
#[inline]
pub fn swizzle_index(idx: usize) -> usize {
idx ^ (idx >> 5)
}