code wiki / (root) / nx_natq5_probe.nx

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}