code wiki / _hdl_build / nx_langintel_router.nx
nx_langintel_router.nx source
↩ module page · 154 lines · 6181 B
1// nx_langintel_router.nx -- LangIntel LI6: the ROUTER (LADDER stage 3, actionable). Merges the per-axis
2// count histograms from two sources (rust + llvm) into ONE RANKED capability-requirement registry for
3// NishiLang: one row per axis (excluding the soundness-other catch-all), sorted by total oracle-bug count.
4// Emits <out>: rank TAB axis TAB total TAB GAP TAB note. Each row = a capability the team must build against
5// the measured 0/184 prim void. SUBCLASS of nx_ingest_base. No hw writes (Rule 26). expect_exit: 0
6// argv: <out-plane> <hist-plane-a> <hist-plane-b>
7import "nx_ingest_base.nx"
8import "nx_store_seed_lib.nx"
9import "nx_syscalls.nx"
10
11const LR_CAP: i64 = 1048576
12const LR_OCAP: i64 = 65536
13const LR_MAXVALS: i64 = 512
14const LR_VALSTORE: i64 = 65536
15const LR_TAB: i64 = 9
16const LR_NL: i64 = 10
17const LR_STDERR: i64 = 2
18const LR_MAXCOL: i64 = 8
19const LR_PAIR: i64 = 2
20const LR_SPB: i64 = 128
21const LR_CANDCAP: i64 = 512
22const LR_ARGC_MIN: i64 = 4
23const LR_D0: i64 = 48
24const LR_D9: i64 = 57
25
26static g_valstore: *u8
27static g_vso: i64
28static g_valoff: *i64
29static g_valcnt: *i64
30static g_nvals: i64
31
32func lr_streq(a: *u8, b: *u8) -> i64 {
33 var i: i64 = 0
34 while a[i] != (0 as u8) { if a[i] != b[i] { return 0 } i = i + 1 }
35 if b[i] != (0 as u8) { return 0 }
36 return 1
37}
38func lr_cols(q: *u8, ls: i64, le: i64, sp: *i64) -> i64 {
39 var c: i64 = 0
40 var p: i64 = ls
41 while c < LR_MAXCOL {
42 var e: i64 = p
43 var s: i64 = 1
44 while s == 1 { if e >= le { s = 0 } else { if q[e] == (LR_TAB as u8) { s = 0 } else { e = e + 1 } } }
45 sp[c*LR_PAIR] = p
46 sp[c*LR_PAIR+1] = e
47 c = c + 1
48 if e >= le { return c }
49 p = e + 1
50 }
51 return c
52}
53func lr_atoi_slice(q: *u8, a: i64, b: i64) -> i64 {
54 var v: i64 = 0
55 var i: i64 = a
56 while i < b { let c: i64 = q[i] as i64; if c >= LR_D0 { if c <= LR_D9 { v = v * 10 + (c - LR_D0) } } i = i + 1 }
57 return v
58}
59// process a hist plane buffer: rows are 'count TAB axis'. Add count to that axis in the global table.
60func lr_merge(buf: *u8, n: i64) -> i64 {
61 let sp: *i64 = sys_mmap(LR_SPB) as *i64
62 let cand: *u8 = sys_mmap(LR_CANDCAP)
63 var i: i64 = 0
64 while i < n {
65 var le: i64 = i
66 var s: i64 = 1
67 while s == 1 { if le >= n { s = 0 } else { if buf[le] == (LR_NL as u8) { s = 0 } else { le = le + 1 } } }
68 if le > i {
69 let nc: i64 = lr_cols(buf, i, le, sp)
70 if nc >= 2 {
71 let cnt: i64 = lr_atoi_slice(buf, sp[0], sp[1])
72 var k: i64 = 0
73 var j: i64 = sp[2]
74 while j < sp[3] { if k < LR_CANDCAP - 1 { cand[k] = buf[j]; k = k + 1 } j = j + 1 }
75 cand[k] = 0 as u8
76 var f: i64 = 0 - 1
77 var t: i64 = 0
78 while t < g_nvals { if lr_streq((g_valstore as i64 + g_valoff[t]) as *u8, cand) == 1 { f = t; t = g_nvals } else { t = t + 1 } }
79 if f >= 0 { g_valcnt[f] = g_valcnt[f] + cnt }
80 else { if g_nvals < LR_MAXVALS { g_valoff[g_nvals] = g_vso; var j2: i64 = 0; while cand[j2] != (0 as u8) { if g_vso < LR_VALSTORE - 2 { g_valstore[g_vso] = cand[j2]; g_vso = g_vso + 1 } j2 = j2 + 1 } g_valstore[g_vso] = 0 as u8; g_vso = g_vso + 1; g_valcnt[g_nvals] = cnt; g_nvals = g_nvals + 1 } }
81 }
82 }
83 i = le + 1
84 }
85 return 0
86}
87
88func main(argc: i64, argv: *i64) -> i64 {
89 if argc < LR_ARGC_MIN {
90 ib_refuse("LANGINTEL-ROUTER" as *u8, "missing args <out-plane> <hist-a> <hist-b>" as *u8, "seed a plan row: 1 TAB nx_langintel_router TAB <out> TAB <hist-a> TAB <hist-b>" as *u8)
91 sys_exit(2)
92 return 2
93 }
94 let outp: *u8 = argv[1] as *u8
95 let ha: *u8 = argv[2] as *u8
96 let hb: *u8 = argv[3] as *u8
97 g_valstore = sys_mmap(LR_VALSTORE)
98 g_vso = 0
99 g_valoff = sys_mmap(LR_MAXVALS * 8) as *i64
100 g_valcnt = sys_mmap(LR_MAXVALS * 8) as *i64
101 g_nvals = 0
102 let bufa: *u8 = sys_mmap(LR_CAP)
103 let na: i64 = sts_load(ha, bufa, LR_CAP)
104 if na <= 0 { ib_refuse("LANGINTEL-ROUTER" as *u8, "hist-a plane EMPTY" as *u8, "run nx_store_hist on the rust axismap first" as *u8); sys_exit(1); return 1 }
105 lr_merge(bufa, na)
106 let bufb: *u8 = sys_mmap(LR_CAP)
107 let nb: i64 = sts_load(hb, bufb, LR_CAP)
108 if nb <= 0 { ib_refuse("LANGINTEL-ROUTER" as *u8, "hist-b plane EMPTY" as *u8, "run nx_store_hist on the llvm axismap first" as *u8); sys_exit(1); return 1 }
109 lr_merge(bufb, nb)
110 var a: i64 = 1
111 while a < g_nvals {
112 var b: i64 = a
113 while b > 0 {
114 if g_valcnt[b-1] < g_valcnt[b] {
115 let tc: i64 = g_valcnt[b-1]; g_valcnt[b-1] = g_valcnt[b]; g_valcnt[b] = tc
116 let to: i64 = g_valoff[b-1]; g_valoff[b-1] = g_valoff[b]; g_valoff[b] = to
117 b = b - 1
118 } else { b = 0 }
119 }
120 a = a + 1
121 }
122 let out: *u8 = sys_mmap(LR_OCAP)
123 var o: i64 = 0
124 var rank: i64 = 1
125 var m: i64 = 0
126 let other: *u8 = "soundness-other" as *u8
127 while m < g_nvals {
128 let ax: *u8 = (g_valstore as i64 + g_valoff[m]) as *u8
129 if lr_streq(ax, other) == 0 {
130 o = ib_bputn(out, o, rank)
131 o = ib_bputc(out, o, LR_TAB)
132 o = ib_bput(out, o, ax)
133 o = ib_bputc(out, o, LR_TAB)
134 o = ib_bputn(out, o, g_valcnt[m])
135 o = ib_bputc(out, o, LR_TAB)
136 o = ib_bput(out, o, "GAP" as *u8)
137 o = ib_bputc(out, o, LR_TAB)
138 o = ib_bputn(out, o, g_valcnt[m])
139 o = ib_bput(out, o, " real oracle bugs demand a NishiLang capability on this axis; 0/184 primitives exist -> file a rung" as *u8)
140 o = ib_bputc(out, o, LR_NL)
141 rank = rank + 1
142 }
143 m = m + 1
144 }
145 let rc: i64 = sts_seed(outp, out, o)
146 if rc < 0 { ib_refuse("LANGINTEL-ROUTER" as *u8, "output commit failed" as *u8, "check seg-store for the out plane; retry" as *u8); sys_exit(1); return 1 }
147 ib_werr("LANGINTEL-ROUTER OK verdict=GREEN requirements=" as *u8)
148 ib_wn(LR_STDERR, rank - 1)
149 ib_werr(" -> " as *u8)
150 ib_werr(outp)
151 ib_werr("\n" as *u8)
152 sys_exit(0)
153 return 0
154}