riscv_test.nx source
↩ module page · 31 lines · 800 B
1// riscv_test.nx -- self-test for riscv.nx.
2
3import "syscalls.nx"
4import "types.nx"
5import "ir.nx"
6import "riscv.nx"
7
8func main() -> i64 {
9 let m_raw: *u8 = sys_mmap(256)
10 let m: *Module = m_raw as *Module
11 m.name = "rv_test" as *u8
12 m.functions = 0 as *Function
13 m.n_functions = 0
14
15 let f: *Function = ir_function_new(m, "main" as *u8, 4, ir_type_i64())
16 let b: *BasicBlock = ir_block_new(f)
17 let c42: i64 = ir_const_i64(f, 42)
18 emit_return_instr(b, c42)
19
20 let locs_raw: *u8 = sys_mmap(256)
21 let locs: *ValueLoc = locs_raw as *ValueLoc
22
23 let o: *OutBuf = out_new(4096)
24 emit_function(f, locs, o, "main", 16, 8, 0, 0)
25
26 let buf: *u8 = o.buf
27 if buf[0] != 0x0A { return 1 }
28 if buf[1] != 0x20 { return 2 }
29
30 return 0
31}