code wiki / (root) / nx_wasm_call_simd_gate_t143.nx

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}