WebAssembly wide-arithmetic proposal enabled by default
Component: JSC WebAssembly | ba4ffde
JSC compiles WebAssembly through several tiers — the LLInt interpreter, the BBQ baseline JIT, and the OMG optimizing JIT on B3/Air — each independently implementing every opcode's semantics and register allocation. This commit enables the WebAssembly "wide arithmetic" proposal by default, turning on 128-bit-pair integer opcodes (add128/sub128/mul_wide and carry/widening variants) previously gated behind a flag, and imports the WPT conformance suite.
Significance
Previously-experimental 128-bit-pair opcode decoding and multi-tier JIT codegen are now reachable by untrusted content on any website by default. Wide arithmetic operates on pairs of i64 values across two registers/stack slots, with carry propagation and overflow semantics that each tier must implement identically.
Audit directions
Correctness bugs in carry/overflow handling or register-pair allocation translate directly into miscompilation or memory-safety issues given fully attacker-controlled Wasm. Narrow: review the add128/sub128/mul_wide codegen in each tier for divergence in which register holds the carry. Wider: any opcode operating on value pairs spanning two slots shares this class — audit i64-pair handling across LLInt/BBQ/OMG for OSR-boundary consistency. Widest: the match tell is any new opcode whose operand count differs across tiers, or whose two halves are allocated independently rather than as a pair.