code wiki / (root) / nx_smoke_nxasm_demo.nx

nx_smoke_nxasm_demo.nx source

↩ module page · 28 lines · 1433 B

1// Take nxc2's actual asm output for a simple program and try to 2// assemble it with nxasm_v2. Returns: 3// 200 + 0..63 if assemble returned -1 (unknown mnemonic) 4// 201 if assemble returned -2 (pass 1 fail) 5// 202 if assemble returned -3 (pass 2 fail) 6// 0..127 = code byte count (n & 0x7F) 7// 128..199 if n was unexpectedly negative 8 9// nx_safety_envelope: 10// intended_use: AUTO_APPLIED -- primitive-specific tuning queued 11// sil_target: SIL1 12// evidence: [bulk_applied_2026-05-16, see-file-comment-for-detail] 13// verdict: NOT_YET_EVALUATED 14 15import "nx_syscalls.nx" 16import "nxasm_v2.nx" 17 18func main() -> i64 { 19 let s: *u8 = " .text\n .globl main\nmain:\n addi sp, sp, -48\n sd ra, 40(sp)\n sd s4, 0(sp)\n sd s5, 8(sp)\n sd s6, 16(sp)\n sd s7, 24(sp)\n.Lmain_bb0:\n li a0, 30\n li a7, 93\n ecall\n mv s4, a0\n mv a0, s4\n ld s7, 24(sp)\n ld s6, 16(sp)\n ld s5, 8(sp)\n ld s4, 0(sp)\n ld ra, 40(sp)\n addi sp, sp, 48\n ret\n" 20 var sl: i64 = 0 21 while s[sl] != 0 { sl = sl + 1 } 22 let out: *u8 = alloc(512) 23 let n: i64 = assemble(s, sl, out, 512) 24 if n == -1 { return __syscall(93, 200, 0, 0, 0, 0, 0) } 25 if n == -2 { return __syscall(93, 201, 0, 0, 0, 0, 0) } 26 if n == -3 { return __syscall(93, 202, 0, 0, 0, 0, 0) } 27 return __syscall(93, n & 0xFF, 0, 0, 0, 0, 0) 28}