code wiki / _hdl_build / nx_js_binopfuse_gate.nx
nx_js_binopfuse_gate.nx
buildroot/runtime/_hdl_build/nx_js_binopfuse_gate.nx
about
nx_js_binopfuse_gate.nx -- DIFFERENTIAL correctness gate for the JIT const-operand BINOP fusion peephole
(`BC_PUSH k ; BC_BINOP op` -> fold the int const k into an x86 IMMEDIATE, skipping the const's stack push
AND its tag-check). Fusion touches ONLY the VM/JIT tier, so the STRONGEST check is: for the same source the
JIT (compile_run) and the tree-walker (js_run_source = the parity oracle) must produce a BIT-IDENTICAL
result. A fusion miscompile shows up as tree != jit. Covers every fusable op (+,-,*,%,<,<=,>,>=,==,!=) with
an int const RHS inside a JIT-compiled loop (so fusion actually fires), the float-LHS and string-LHS
FALLBACKS (materialize-const + jit_slow_binop), MOD-by-const, a >2^31 const that must NOT fuse, and a
non-fusable op (/). Each case is ALSO anchored to a V8-computed value (catches both-tiers-wrong).
expect_exit: 0 license_tier: ORIGINAL
dependencies 1 imports · 0 importers
imports: nx_js_vm.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| none |
functions
| 11 | func gw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } |
| 13 | func g_rstr(cell: *i64, buf: *u8) -> i64 |
| 50 | func g_bslen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } called by 1: dcheck |
| 51 | func g_eq(a: *u8, an: i64, b: *u8, bn: i64) -> i64 { if an != bn { return 0 } var i: i64=0; while i<an { if (a[i]&0xff)!=(b[i]&0xff){return 0} i=i+1 } return 1 } called by 1: dcheck |
| 53 | func dcheck(src: *u8, expect: *u8, tal: *i64) -> i64 |
| 79 | func main(argc: i64, argv: *i64) -> i64 |