code wiki / _hdl_build / nx_js_binopfuse_gate.nx

nx_js_binopfuse_gate.nx

buildroot/runtime/_hdl_build/nx_js_binopfuse_gate.nx

7719 B119 linesdepth 8pulls 24 transitivereach 0 importersview sourcekind gate/prooftopic js
docsdependenciesstructsconstsfunctions

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

nx_js_vm.nx nx_js_binopfuse_gate.nx

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

main gw dcheck g_bslen compile_run cr_core jp_parse_source js_lex js_skip_trivia js_lex_one jp_parse_program jp_tok_kind jp_cur jp_err jp_parse_stmt jp_child_commit jp_new_node jp_pst ev_set c_scope_push c_program c_predecl jp_nkind jp_na jp_nb jp_child_at c_newslot ev_tok_start ev_tok_len c_predecl ↻ jp_nextra c_rootslot jp_nc ev_for_body ev_try_finally jp_nb ↻ jp_child_at ↻ jp_nkind ↻ jp_na ↻ c_function

structs

none

consts

none

functions

11func gw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
called by 2: dcheckmain
13func g_rstr(cell: *i64, buf: *u8) -> i64
50func g_bslen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
called by 1: dcheck
51func 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
53func dcheck(src: *u8, expect: *u8, tal: *i64) -> i64
called by 1: main calls 5: g_bslencompile_rung_rstrg_eqgw
79func main(argc: i64, argv: *i64) -> i64
calls 2: gwdcheck