code wiki / (root) / smoke_asm_test.nx

smoke_asm_test.nx source

↩ module page · 17 lines · 715 B

1// smoke_asm_test.nx -- run nxasm_v2 on a small RV64 asm snippet + assert 2// that it produces non-zero output. 3 4import "syscalls.nx" 5import "nxasm_v2.nx" 6 7func main() -> i64 { 8 // A tiny program: main exits 30 via syscall. 9 let s: *u8 = " .text\n .globl main\nmain:\n addi sp, sp, -16\n sd ra, 8(sp)\n li a0, 30\n li a1, 0\n li a2, 0\n li a7, 93\n ecall\n mv a0, a0\n ld ra, 8(sp)\n addi sp, sp, 16\n ret\n" 10 var sl: i64 = 0 11 while s[sl] != 0 { sl = sl + 1 } 12 13 let out: *u8 = alloc(1024) 14 let n: i64 = assemble(s, sl, out, 1024) 15 if n <= 0 { return __syscall(93, 99, 0, 0, 0, 0, 0) } 16 return __syscall(93, n & 0xFF, 0, 0, 0, 0, 0) 17}