pub(crate) const LINE: usize = 16;
pub(crate) const PAD: usize = LINE;
pub(crate) const ROW: usize = 16 * LINE;
pub(crate) const SLOT: usize = 32 * ROW + PAD;
pub(crate) const TILE: usize = 2 * SLOT + PAD;
pub(crate) const COPIES: usize = 4;
#[inline(always)]
pub(crate) const fn bulk_word(logical: usize) -> usize {
let group = logical / 8;
let half = (group ^ (logical / 128)) & 1;
group * LINE + half * 8 + logical % 8
}
#[inline(always)]
pub(crate) const fn single_base(unit: usize) -> usize {
let group = unit / 8;
let colour = group ^ ((group << 1) & 15) ^ ((group >> 3) * 3);
let colour = colour | ((colour & 1) << 4);
group * 512 + colour * LINE + unit % 8
}
#[inline(always)]
pub(crate) const fn single_copy(base: usize, copy: usize, flag: u32) -> usize {
let phase = (((flag >> 1).wrapping_mul(11) & 31) as usize) * LINE;
base ^ (copy * 64) ^ phase
}