namespace; include rt; // byte ops called from o3 stay in the region. ld8/st8 and the 16- and 32-bit // pair are opcodes there, on the interpreter, the arm64 jit and llvm. fn sp() { rt.put_c(32); return 0; } fn litw(v) { return v + v + 1; } fn f() { rt.put_c('A'); return 0; } fn main() { let buf[4], b, i, s, t, p, v, w; i = 0; while (i < 4) { buf[i] = 0; i++; } b = rt.addr_b(buf); i = 0; s = 0; o3 { while (i < 20) { t = b + i; rt.st8(t, i); s = s + rt.ld8(t); i++; } } rt.put_n(s); sp(); o3 { rt.st16(b, 4660); w = rt.ld16(b); } rt.put_n(w); sp(); t = b + 7; o3 { w = rt.ld8(t); } rt.put_n(w); sp(); o3 { w = rt.ld16(t); } rt.put_n(w); sp(); t = b + 10; v = 16909060; o3 { rt.st32(t, v); w = rt.ld32(t); } rt.put_n(w); sp(); t = 0 - 1; o3 { rt.st8(t, v); w = rt.ld8(t); } rt.put_n(w); sp(); t = rt.addr_b(rt.MW) - 1; o3 { w = rt.ld16(t); } rt.put_n(w); rt.put_c(10); p = f; f(); while (*p != litw('A')) p++; t = rt.addr_b(p); v = litw('B') & 255; o3 { rt.st8(t, v); } f(); v = litw('C') & 255; o3 { rt.st8(t, v); } f(); rt.put_c(10); return 0; }