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}