#[macro_export]
macro_rules! arr_8 {
($idx:ident => $expr:expr) => {
[
{
let $idx = 0;
$expr
},
{
let $idx = 1;
$expr
},
{
let $idx = 2;
$expr
},
{
let $idx = 3;
$expr
},
{
let $idx = 4;
$expr
},
{
let $idx = 5;
$expr
},
{
let $idx = 6;
$expr
},
{
let $idx = 7;
$expr
},
]
};
}
#[macro_export]
macro_rules! unroll_8 {
($idx:ident => $expr:expr) => {{
let $idx = 0;
$expr;
let $idx = 1;
$expr;
let $idx = 2;
$expr;
let $idx = 3;
$expr;
let $idx = 4;
$expr;
let $idx = 5;
$expr;
let $idx = 6;
$expr;
let $idx = 7;
$expr;
}};
}
#[macro_export]
macro_rules! write_8 {
($dst:expr, $idx:ident => $expr:expr) => {{
let dst = $dst;
$crate::unroll_8!($idx => {
*dst.add($idx) = $expr;
});
}};
}
#[macro_export]
macro_rules! write_4 {
($dst:expr, $idx:ident => $expr:expr) => {{
let dst = $dst;
let $idx = 0;
*dst.add($idx) = $expr;
let $idx = 1;
*dst.add($idx) = $expr;
let $idx = 2;
*dst.add($idx) = $expr;
let $idx = 3;
*dst.add($idx) = $expr;
}};
}
#[macro_export]
macro_rules! match_pack_23 {
($bw:expr, fallback => $fallback:expr, |$w:ident| $arm:expr) => {
match $bw {
1 => {
const $w: u8 = 1;
$arm
}
2 => {
const $w: u8 = 2;
$arm
}
3 => {
const $w: u8 = 3;
$arm
}
4 => {
const $w: u8 = 4;
$arm
}
5 => {
const $w: u8 = 5;
$arm
}
6 => {
const $w: u8 = 6;
$arm
}
7 => {
const $w: u8 = 7;
$arm
}
8 => {
const $w: u8 = 8;
$arm
}
9 => {
const $w: u8 = 9;
$arm
}
10 => {
const $w: u8 = 10;
$arm
}
11 => {
const $w: u8 = 11;
$arm
}
12 => {
const $w: u8 = 12;
$arm
}
13 => {
const $w: u8 = 13;
$arm
}
14 => {
const $w: u8 = 14;
$arm
}
15 => {
const $w: u8 = 15;
$arm
}
16 => {
const $w: u8 = 16;
$arm
}
17 => {
const $w: u8 = 17;
$arm
}
18 => {
const $w: u8 = 18;
$arm
}
19 => {
const $w: u8 = 19;
$arm
}
20 => {
const $w: u8 = 20;
$arm
}
24 => {
const $w: u8 = 24;
$arm
}
28 => {
const $w: u8 = 28;
$arm
}
32 => {
const $w: u8 = 32;
$arm
}
_ => $fallback,
}
};
}