code wiki / _hdl_build / nx_t_vardiv.nx
nx_t_vardiv.nx source
↩ module page · 19 lines · 765 B
1// nx_t_vardiv.nx -- disambiguate idiv-on-VARIABLE vs the loop. Loads 42 from memory
2// (so the compiler can't constant-fold the divide), divides by 10, prints -- NO loop.
3// Expect "42". Works => runtime idiv is fine, the defect is the LOOP. Fails => nxasm
4// mis-encodes idiv when the dividend is a runtime register. license_tier: ORIGINAL
5import "nx_syscalls.nx"
6
7func main() -> i64 {
8 let p: *i64 = sys_mmap(8) as *i64
9 p[0] = 42
10 var m: i64 = p[0] // runtime value (memory load) -> not constant-foldable
11 let q: i64 = m / 10 // expect 4
12 let r: i64 = m % 10 // expect 2
13 let b: *u8 = sys_mmap(8)
14 b[0] = (48 + q) as u8
15 b[1] = (48 + r) as u8
16 b[2] = 10 as u8
17 sys_write(1, b, 3)
18 sys_exit(0); return 0
19}