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}