nx_natq5_probe.nx source
↩ module page · 36 lines · 1351 B
1// nx_natq5_probe.nx -- does the Q5_0->Q8_0 repack (__q5_unpack32 SSE) run native?
2// One Q5_0 block (22B) -> one Q8_0 block (34B). license_tier: ORIGINAL expect_exit: 0
3import "nx_syscalls.nx"
4import "nx_q8_0_from_q5_0.nx"
5
6func npn(v: i64, o: *u8) -> i64 {
7 var m: i64 = v
8 if m < 0 { m = 0 - m }
9 let t: *u8 = sys_mmap(32)
10 var k: i64 = 0
11 if m == 0 { t[0] = 48 as u8; k = 1 }
12 while m > 0 { t[k] = (48 + (m - (m / 10) * 10)) as u8; m = m / 10; k = k + 1 }
13 var i: i64 = 0
14 while i < k { o[i] = t[k - 1 - i]; i = i + 1 }
15 return k
16}
17
18func main() -> i64 {
19 sys_write(1, "P0\n" as *u8, 3)
20 let q5: *u8 = sys_mmap(64)
21 var i: i64 = 0
22 while i < 22 { q5[i] = 0 as u8; i = i + 1 }
23 q5[0] = 0 as u8; q5[1] = 0x3C as u8 // d = 1.0 (f16)
24 q5[6] = 0x11 as u8 // some qs nibbles
25 let q8: *u8 = sys_mmap(64)
26 sys_write(1, "P1\n" as *u8, 3)
27 nx_q8_0_from_q5_0(q5, 0, 32, q8) // 32 values = 1 block -> __q5_unpack32
28 sys_write(1, "P2\n" as *u8, 3)
29 let o: *u8 = sys_mmap(32)
30 sys_write(1, "d0=" as *u8, 3); sys_write(1, o, npn(q8[0] as i64, o))
31 sys_write(1, " d1=" as *u8, 4); sys_write(1, o, npn(q8[1] as i64, o))
32 sys_write(1, " q2=" as *u8, 4); sys_write(1, o, npn(q8[2] as i64, o))
33 sys_write(1, "\n" as *u8, 1)
34 sys_exit(0)
35 return 0
36}