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}