nx_wasm_call_simd_gate_t143.nx source
↩ module page · 47 lines · 2053 B
1// Reuse existing SIMD differential probe, execute final private backend output.
2import "nx_syscalls.nx"
3import "nx_wasm_vm.nx"
4import "_hdl_build/nx_v128_probe.nx"
5import "nx_gate_verdict.nx"
6func main() -> i64 {
7 let ctr: *i64 = gv_ctr()
8 gv_head("WAT / final valid SIMD execution" as *u8)
9 let box: *i64 = sys_mmap(16) as *i64
10 let bytes: *u8 = sys_read_file("/tmp/nx-v128-call-review-t143.wasm" as *u8,box)
11 if (bytes as i64) == 0 { return 3 }
12 var opcodes: i64 = 0; var p: i64 = 0
13 while p+1 < box[0] {
14 if bytes[p] == (253 as u8) && bytes[p+1] == (115 as u8) { opcodes = opcodes+1 }
15 p = p+1
16 }
17 gv_check("actual SIMD sub_sat opcodes present" as *u8,opcodes>=2,ctr)
18 let mod: *WasmMod = wm_new(bytes,box[0])
19 let parsed: i64 = wm_parse(mod)
20 gv_check_eq("actual final module parses",parsed,0,ctr)
21 if parsed != 0 { return 3 }
22 let native: *u8 = sys_mmap(2*64*64)
23 let base: i64 = 0x20000
24 var sample: i64 = 0
25 while sample < 3 {
26 let seed: i64 = 3+sample*7
27 pv_fill(native as i64,seed,64,64)
28 wm_run(mod,"pv_fill" as *u8,base,seed,64,64,0,4)
29 let a: i64 = base+3; let b: i64 = base+4096+17
30 let simd: i64 = wm_run(mod,"pv_sad16" as *u8,a,b,0,0,0,2)
31 let scalar: i64 = wm_run(mod,"pv_sad16_ref" as *u8,a,b,0,0,0,2)
32 let expected: i64 = pv_sad16_ref(native as i64+3,native as i64+4096+17)
33 gv_kv("seed",seed); gv_kv("simd",simd); gv_kv("native_reference",expected)
34 gv_check_eq("final SIMD equals native scalar",simd,expected,ctr)
35 gv_check_eq("final SIMD equals compiled scalar",simd,scalar,ctr)
36 sample = sample+1
37 }
38 let mem: *u8 = mod.mem
39 let old: u8 = mem[base+3]
40 mem[base+3] = (old as i64 ^ 128) as u8
41 let changed: i64 = wm_run(mod,"pv_sad16" as *u8,base+3,base+4096+17,0,0,0,2)
42 mem[base+3] = old
43 let restored: i64 = wm_run(mod,"pv_sad16" as *u8,base+3,base+4096+17,0,0,0,2)
44 gv_check("input mutation changes actual SIMD result" as *u8,changed!=restored,ctr)
45 sys_munmap(native,2*64*64)
46 return gv_verdict("WAT-SIMD-FINAL" as *u8,ctr,"existing probe final private WAT->WASM->native VM; process exit owns VM arenas" as *u8)
47}