smoke_regalloc_min2.nx source
↩ module page · 33 lines · 1063 B
1// Regalloc on a 3-value function: const+const+add+ret.
2
3import "syscalls.nx"
4import "types.nx"
5import "ir.nx"
6import "regalloc.nx"
7
8func main() -> i64 {
9 let m_raw: *u8 = sys_mmap(256)
10 let m: *Module = m_raw as *Module
11 m.functions = 0 as *Function
12 m.n_functions = 0
13 let f: *Function = ir_function_new(m, "addsum" as *u8, 6, ir_type_i64())
14 let b: *BasicBlock = ir_block_new(f)
15 let c10: i64 = ir_const_i64(f, 10)
16 let c20: i64 = ir_const_i64(f, 20)
17 let s: i64 = ir_emit_binop(b, OP_ADD, c10, c20, ir_type_i64())
18 ir_emit_return(b, s)
19
20 let locs_raw: *u8 = sys_mmap(4096)
21 let locs: *ValueLoc = locs_raw as *ValueLoc
22 let mask_raw: *u8 = sys_mmap(16)
23 let mask: *i64 = mask_raw as *i64
24 *mask = 0
25 let sb_raw: *u8 = sys_mmap(16)
26 let sb: *i64 = sb_raw as *i64
27 *sb = 0
28 let mask_fpr_raw: *u8 = sys_mmap(16)
29 let mask_fpr: *i64 = mask_fpr_raw as *i64
30 *mask_fpr = 0
31 regalloc_function(f, locs, mask, mask_fpr, sb)
32 return __syscall(93, 42, 0, 0, 0, 0, 0)
33}