code wiki / _hdl_build / _r1bench_kern2.nx
_r1bench_kern2.nx source
↩ module page · 23 lines · 929 B
1// _r1bench_kern2.nx -- R1 panel kernel #2: NO DIVISION (vs kern1's % prime). Isolates register-alloc/
2// codegen quality from the divide-optimization gcc applies to constant modulo. xor+mul+shift+add only;
3// bounded (s stays ~1e16, no overflow), data-dependent result printed (DCE/fold-proof). Mirrors /tmp/kern2.c.
4import "nx_syscalls.nx"
5func pn(v: i64) -> i64 {
6 let b: *u8 = sys_mmap(32); var m: i64 = v; var k: i64 = 0; let t: *u8 = sys_mmap(32)
7 if m == 0 { t[0] = 48; k = 1 }
8 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
9 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
10 var i: i64 = 0; while i < k { b[i] = t[k - 1 - i]; i = i + 1 }
11 b[k] = 10 as u8; sys_write(1, b, k + 1); return 0
12}
13func main() -> i64 {
14 var s: i64 = 0
15 var i: i64 = 0
16 while i < 100000000 {
17 s = (s ^ (i * i)) + (i << 1)
18 i = i + 1
19 }
20 pn(s)
21 sys_exit(0)
22 return 0
23}