1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum PackingLayout {
6 RowMajor,
8 ColumnMajor,
10 PanelMajorA,
12 PanelMajorB,
14}
15
16#[must_use]
20#[inline]
21pub fn pack_a_index(row: usize, col: usize, mr: usize, kc: usize, _mc: usize) -> usize {
22 let panel = row / mr;
23 let row_in_panel = row % mr;
24 panel * mr * kc + col * mr + row_in_panel
25}
26
27#[must_use]
29#[inline]
30pub fn pack_b_index(row: usize, col: usize, nr: usize, kc: usize, _nc: usize) -> usize {
31 let panel = col / nr;
32 let col_in_panel = col % nr;
33 panel * kc * nr + row * nr + col_in_panel
34}
35
36#[must_use]
40#[inline]
41pub fn swizzle_index(idx: usize) -> usize {
42 idx ^ (idx >> 5)
43}