nx_smoke_nxc_pipeline2.nx source
↩ module page · 65 lines · 2371 B
1// Same as smoke_nxc_pipeline.nx but skip the crt0 stub to see if
2// the failure is in the prepended `call main` reference.
3
4// nx_safety_envelope:
5// intended_use: AUTO_APPLIED -- primitive-specific tuning queued
6// sil_target: SIL1
7// evidence: [bulk_applied_2026-05-16, see-file-comment-for-detail]
8// verdict: NOT_YET_EVALUATED
9
10import "nx_syscalls.nx"
11import "nx_types.nx"
12import "nx_lex_kinds.nx"
13import "nx_outbuf.nx"
14import "nx_ir.nx"
15import "nx_tokenizer.nx"
16import "nx_parse.nx"
17import "nx_opt.nx"
18import "nx_regalloc.nx"
19import "nx_riscv.nx"
20import "nxasm_v2.nx"
21
22func main() -> i64 {
23 let demo: *u8 = "func main() -> i64 { return __syscall(93, 30, 0, 0, 0, 0, 0) }"
24
25 let toks: *Tok = lex_source(demo, 4096)
26 if toks == (0 as *Tok) { return __syscall(93, 1, 0, 0, 0, 0, 0) }
27
28 let m: *Module = parse_module(toks, 0 as *Module)
29 if m == (0 as *Module) { return __syscall(93, 2, 0, 0, 0, 0, 0) }
30
31 let asm_out: *OutBuf = out_new(131072)
32 // NO crt0 prefix this time.
33 var fi: i64 = 0
34 while fi < m.n_functions {
35 let fn_base: i64 = m.functions as i64
36 let f: *Function = (fn_base + fi * 176) as *Function
37 opt_run(f)
38 let locs_raw: *u8 = sys_mmap(f.n_values * 24 + 64)
39 let locs: *ValueLoc = locs_raw as *ValueLoc
40 let cs_raw: *u8 = sys_mmap(16)
41 let cs: *i64 = cs_raw as *i64
42 *cs = 0
43 let cs_fpr_raw: *u8 = sys_mmap(16)
44 let cs_fpr: *i64 = cs_fpr_raw as *i64
45 *cs_fpr = 0
46 let sb_raw: *u8 = sys_mmap(16)
47 let sb: *i64 = sb_raw as *i64
48 *sb = 0
49 regalloc_function(f, locs, cs, cs_fpr, sb)
50 let name_addr: i64 = f.name_start
51 let fn_name: *u8 = name_addr as *u8
52 emit_function(f, locs, asm_out, fn_name, 16, 8, *cs, *cs_fpr)
53 fi = fi + 1
54 }
55
56 if asm_out.pos == 0 { return __syscall(93, 100, 0, 0, 0, 0, 0) }
57
58 let code_buf: *u8 = sys_mmap(65536)
59 let code_len: i64 = assemble(asm_out.buf, asm_out.pos, code_buf, 65536)
60 if code_len == -1 { return __syscall(93, 200, 0, 0, 0, 0, 0) }
61 if code_len == -2 { return __syscall(93, 201, 0, 0, 0, 0, 0) }
62 if code_len == -3 { return __syscall(93, 202, 0, 0, 0, 0, 0) }
63 if code_len == 0 { return __syscall(93, 101, 0, 0, 0, 0, 0) }
64 return __syscall(93, code_len & 0xFF, 0, 0, 0, 0, 0)
65}