nx_h264_hadamard_gate.nx source
↩ module page · 88 lines · 3370 B
1// nx_h264_hadamard_gate.nx -- REFEREE for the Intra_16x16 luma DC Hadamard.
2// Hand-computed (f = H c H):
3// DC only c[0]=16 -> all 16 samples = 16
4// AC c[1]=4 -> every row = [4,4,-4,-4]
5// zero -> all 0
6// involution-scale: applying Hadamard twice scales by 16 (H^2 = 4I -> (HcH then HcH) = 16c)
7// so hadamard(hadamard(c)) == 16*c (a strong self-check, no external ref).
8// Every value PRINTED. stdout + knowledge/status/h264_hadamard_gate.log. Exit 0/1.
9// Sovereign: nx_syscalls + nx_h264_hadamard. license_tier: ORIGINAL
10import "nx_syscalls.nx"
11import "nx_h264_hadamard.nx"
12
13func gp(logfd: i64, s: *u8) -> i64 {
14 var n: i64 = 0
15 while s[n] != (0 as u8) { n = n + 1 }
16 sys_write(1, s, n)
17 if logfd > 0 { sys_write(logfd, s, n) }
18 return 0
19}
20func gn(logfd: i64, v: i64) -> i64 {
21 let bb: *u8 = sys_mmap(28)
22 var m: i64 = v
23 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m }
24 let t: *u8 = sys_mmap(28)
25 var k: i64 = 0
26 if m == 0 { t[0] = 48 as u8; k = 1 }
27 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
28 var i: i64 = 0
29 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
30 sys_write(1, bb, k)
31 if logfd > 0 { sys_write(logfd, bb, k) }
32 return 0
33}
34func zero16(d: *i64) -> i64 { var i: i64 = 0; while i < 16 { d[i] = 0; i = i + 1 } return 0 }
35
36func main() -> i64 {
37 let logfd: i64 = sys_openat_append("knowledge/status/h264_hadamard_gate.log\x00" as *u8, 0x1a4)
38 gp(logfd, "H264-HADAMARD-GATE (Intra16x16 luma DC)\n\x00" as *u8)
39 var ok: i64 = 1
40 let d: *i64 = sys_mmap(16 * 8) as *i64
41
42 // DC
43 zero16(d); d[0] = 16
44 nx_h264_hadamard4x4(d)
45 gp(logfd, " DC16 ->\x00" as *u8)
46 var i: i64 = 0
47 while i < 16 { gp(logfd, " \x00" as *u8); gn(logfd, d[i]); if d[i] != 16 { ok = 0 } i = i + 1 }
48 gp(logfd, "\n\x00" as *u8)
49
50 // AC c[1]=4 -> rows [4,4,-4,-4]
51 zero16(d); d[1] = 4
52 nx_h264_hadamard4x4(d)
53 var r: i64 = 0
54 while r < 4 {
55 if d[r * 4 + 0] != 4 { ok = 0 }
56 if d[r * 4 + 1] != 4 { ok = 0 }
57 if d[r * 4 + 2] != 0 - 4 { ok = 0 }
58 if d[r * 4 + 3] != 0 - 4 { ok = 0 }
59 r = r + 1
60 }
61 gp(logfd, " AC4 row0 -> \x00" as *u8); gn(logfd, d[0]); gp(logfd, " \x00" as *u8); gn(logfd, d[1]); gp(logfd, " \x00" as *u8); gn(logfd, d[2]); gp(logfd, " \x00" as *u8); gn(logfd, d[3]); gp(logfd, " (expect 4 4 -4 -4)\n\x00" as *u8)
62
63 // involution-scale self-check: H(H(c)) == 16*c
64 let c: *i64 = sys_mmap(16 * 8) as *i64
65 i = 0
66 while i < 16 { c[i] = (i * 3) - 20; i = i + 1 } // arbitrary signed pattern
67 let c2: *i64 = sys_mmap(16 * 8) as *i64
68 i = 0
69 while i < 16 { c2[i] = c[i]; i = i + 1 }
70 nx_h264_hadamard4x4(c2)
71 nx_h264_hadamard4x4(c2)
72 var inv_ok: i64 = 1
73 i = 0
74 while i < 16 { if c2[i] != 16 * c[i] { inv_ok = 0 } i = i + 1 }
75 gp(logfd, " involution H(H(c))==16c: \x00" as *u8); gn(logfd, inv_ok); gp(logfd, " (expect 1)\n\x00" as *u8)
76 if inv_ok != 1 { ok = 0 }
77
78 if ok == 1 {
79 gp(logfd, "H264-HADAMARD-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8)
80 if logfd > 0 { sys_close(logfd) }
81 sys_exit(0)
82 return 0
83 }
84 gp(logfd, "H264-HADAMARD-GATE result=FAIL verdict=RED\n\x00" as *u8)
85 if logfd > 0 { sys_close(logfd) }
86 sys_exit(1)
87 return 1
88}