code wiki / _hdl_build / _r1bench_kern.nx

_r1bench_kern.nx source

↩ module page · 23 lines · 916 B

1// _r1bench_kern.nx -- R1 toolchain exceed-panel shared kernel (NishiLang side). 2// Identical modular-arithmetic loop to /tmp/kern.c so nx_cc vs gcc is apples-to-apples: 3// no integer overflow (i*i<=1e16, %1e9+7 keeps s bounded), result data-dependent so neither 4// compiler can dead-code-eliminate or constant-fold the loop. Prints the result for cross-check. 5import "nx_syscalls.nx" 6func pn(v: i64) -> i64 { 7 let b: *u8 = sys_mmap(32); var m: i64 = v; var k: i64 = 0; let t: *u8 = sys_mmap(32) 8 if m == 0 { t[0] = 48; k = 1 } 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) % 1000000007 18 i = i + 1 19 } 20 pn(s) 21 sys_exit(0) 22 return 0 23}