vsimd/
algorithm.rs
1pub const fn lookup(lut: &[u8; 16], x: u8) -> u8 {
2 if x < 0x80 {
3 lut[(x & 0x0f) as usize]
4 } else {
5 0
6 }
7}
8
9pub const fn avgr(a: u8, b: u8) -> u8 {
10 ((a as u16 + b as u16 + 1) >> 1) as u8
11}
12
13#[cfg(test)]
14pub fn print_fn_table(is_primary: impl Fn(u8) -> bool, f: impl Fn(u8) -> u8) {
15 print!(" 0 1 2 3 4 5 6 7 8 9 A B C D E F");
16 for c in 0..=255u8 {
17 let val = f(c);
18
19 if c & 0x0f == 0 {
20 println!();
21 print!("{:x} | ", c >> 4);
22 }
23
24 if is_primary(c) {
25 print!("\x1b[1;31m{val:0>2X}\x1b[0m ");
26 } else if val >= 0x80 {
27 print!("\x1b[1;36m{val:0>2X}\x1b[0m ");
28 } else {
29 print!("\x1b[1;32m{val:0>2X}\x1b[0m ");
30 }
31 }
32 println!();
33 println!();
34}
35
36#[cfg(test)]
37pub fn i8_lt(a: i8, b: i8) -> u8 {
38 if a < b {
39 0xff
40 } else {
41 0x00
42 }
43}