Skip to content

test: consolidate multipass differential suites into one target#539

Merged
zoowii merged 3 commits into
DTVMStack:mainfrom
abmcar:test/evm-differential-suite
Jun 24, 2026
Merged

test: consolidate multipass differential suites into one target#539
zoowii merged 3 commits into
DTVMStack:mainfrom
abmcar:test/evm-differential-suite

Conversation

@abmcar

@abmcar abmcar commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Consolidate the interpreter-vs-multipass differential tests into one gtest target.

What

Adds a gtest target, evmDifferentialTests (src/tests/evm_differential_tests.cpp), consolidating the interpreter-vs-multipass differential tests into one self-contained file:

  • 40 fixture-based cases (.easm/.expected pairs under tests/evm_asm/) in three groups — RangeNarrowing (21), ConstShiftPruning (13), SubWrapU64 (6) — each loading a hex fixture, running both engines, and asserting identical status and output.
  • 4 adversarial-matrix tests (EVMRangeDifferential) that build bytecode programmatically and sweep an 11-value operand matrix (value-range boundaries plus high-sparse words) across 20 binary opcodes, the three shifts on limb-boundary amounts, and the AND-u64 narrow fast path.

One shared executor underpins both parts. It forces synchronous multipass compilation (DisableMultipassMultithread) and asserts JITCompiled, so a multipass run that silently fell back to the interpreter cannot pass vacuously.

Why

Differential JIT tests do not belong in the interpreter test file. Three in-flight optimization PRs (#534, #535, #536) each appended a near-identical copy of the differential suite plus fixtures to src/tests/evm_interp_tests.cpp, and draft #533 added the matrix harness to the same file; on merge each copy would conflict with the others. This PR places all of that coverage in one dedicated target. The optimization PRs have been trimmed to code-only, and #533 is superseded by this PR.

The differential invariant — interpreter output equals multipass output, and multipass actually JIT-compiles — holds on plain main, so this suite passes independently of the optimization PRs and can merge in any order relative to them.

Verification

  • evmDifferentialTests: 44/44 pass on plain main (no optimization PR applied).
  • ctest (SPEC_TESTS_ARGS="-m multipass --format evm --enable-evm-gas"): 12/12 pass; evmInterpTests additionally runs the 40 new fixtures through its golden sample test (198/198).
  • tools/format.sh check: pass. No new compiler warnings.

Change doc: docs/changes/2026-06-11-evm-differential-suite/README.md.

🤖 Generated with Claude Code

Move the interpreter-vs-multipass differential tests into a dedicated
gtest target, evmDifferentialTests, in its own self-contained source
file. It holds 40 fixture-based cases (RangeNarrowing, ConstShiftPruning,
SubWrapU64) plus the 4-test adversarial-matrix harness, all sharing one
executor that forces synchronous multipass compilation so the JIT run is
non-vacuous.

Three in-flight optimization PRs each appended a near-identical
differential suite to src/tests/evm_interp_tests.cpp, guaranteeing merge
conflicts; a fourth added the matrix harness there too. A single
dedicated home removes both the duplication and the conflicts. The
differential invariant holds on plain main, so the suite passes
independently of those optimizations.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds a consolidated interpreter-vs-multipass EVM differential test target and a set of adversarial fixtures to catch value-range narrowing and limb-folding miscompilations.

Changes:

  • Adds a new gtest executable evmDifferentialTests with both fixture-driven and programmatic adversarial-matrix differential tests.
  • Introduces 40 new EVM-assembly fixtures (.easm + .expected) covering range-narrowing, shift pruning, and u64 SUB wrap/borrow edge cases.
  • Registers the new test target in src/tests/CMakeLists.txt and documents the change in docs/changes/....

Reviewed changes

Copilot reviewed 83 out of 83 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tests/evm_asm/xor_dyn_u64_wide.expected Adds expected output for XOR u64-vs-wide fixture
tests/evm_asm/xor_dyn_u64_wide.easm Adds XOR u64-vs-wide adversarial fixture bytecode
tests/evm_asm/xor_dyn_u64_u64.expected Adds expected output for XOR u64-vs-u64 fixture
tests/evm_asm/xor_dyn_u64_u64.easm Adds XOR u64-vs-u64 fixture bytecode
tests/evm_asm/sub_wide_u64_control.expected Adds expected output for wide-minus-u64 control fixture
tests/evm_asm/sub_wide_u64_control.easm Adds wide-minus-u64 control fixture bytecode
tests/evm_asm/sub_u64_pair_zero_rhs_dyn.expected Adds expected output for (u64 - dyn(0)) fixture
tests/evm_asm/sub_u64_pair_zero_rhs_dyn.easm Adds (u64 - dyn(0)) fixture bytecode
tests/evm_asm/sub_u64_pair_wrap_boundary.expected Adds expected output for u64 borrow/sign-fill boundary fixture
tests/evm_asm/sub_u64_pair_wrap_boundary.easm Adds u64 borrow/sign-fill boundary fixture bytecode
tests/evm_asm/sub_u64_pair_underflow.expected Adds expected output for u64 underflow fixture
tests/evm_asm/sub_u64_pair_underflow.easm Adds u64 underflow fixture bytecode
tests/evm_asm/sub_u64_pair_nounderflow.expected Adds expected output for u64 non-underflow fixture
tests/evm_asm/sub_u64_pair_nounderflow.easm Adds u64 non-underflow fixture bytecode
tests/evm_asm/sub_u64_pair_equal.expected Adds expected output for equal-u64 SUB fixture
tests/evm_asm/sub_u64_pair_equal.easm Adds equal-u64 SUB fixture bytecode
tests/evm_asm/slt_dyn_neg_vs_const.expected Adds expected output for SLT dyn-negative vs const fixture
tests/evm_asm/slt_dyn_neg_vs_const.easm Adds SLT dyn-negative vs const fixture bytecode
tests/evm_asm/slt_dyn_msb64_vs_const.expected Adds expected output for SLT msb64 edge fixture
tests/evm_asm/slt_dyn_msb64_vs_const.easm Adds SLT msb64 edge fixture bytecode
tests/evm_asm/slt_dyn_highsparse_vs_const.expected Adds expected output for SLT high-sparse limb fixture
tests/evm_asm/slt_dyn_highsparse_vs_const.easm Adds SLT high-sparse limb fixture bytecode
tests/evm_asm/slt_dyn_eq_const.expected Adds expected output for SLT equal-value boundary fixture
tests/evm_asm/slt_dyn_eq_const.easm Adds SLT equal-value boundary fixture bytecode
tests/evm_asm/slt_const_vs_dyn.expected Adds expected output for SLT const-vs-dyn swapped-dispatch fixture
tests/evm_asm/slt_const_vs_dyn.easm Adds SLT const-vs-dyn swapped-dispatch fixture bytecode
tests/evm_asm/shr_const8_u64val.expected Adds expected output for SHR const over u64-tagged value
tests/evm_asm/shr_const8_u64val.easm Adds SHR const over u64-tagged value fixture bytecode
tests/evm_asm/shr_const72_dyn.expected Adds expected output for SHR cross-limb const shift fixture
tests/evm_asm/shr_const72_dyn.easm Adds SHR cross-limb const shift fixture bytecode
tests/evm_asm/shr_const4_dyn.expected Adds expected output for SHR small const shift fixture
tests/evm_asm/shr_const4_dyn.easm Adds SHR small const shift fixture bytecode
tests/evm_asm/shr_const256_dyn.expected Adds expected output for SHR >=256 fold fixture
tests/evm_asm/shr_const256_dyn.easm Adds SHR >=256 fold fixture bytecode
tests/evm_asm/shl_dyn_amount.expected Adds expected output for SHL dynamic-amount path fixture
tests/evm_asm/shl_dyn_amount.easm Adds SHL dynamic-amount path fixture bytecode
tests/evm_asm/shl_const_highlimb_dyn.expected Adds expected output for SHL “high-limb shift amount” fold fixture
tests/evm_asm/shl_const_highlimb_dyn.easm Adds SHL “high-limb shift amount” fold fixture bytecode
tests/evm_asm/shl_const96_dyn.expected Adds expected output for SHL cross-limb const shift fixture
tests/evm_asm/shl_const96_dyn.easm Adds SHL cross-limb const shift fixture bytecode
tests/evm_asm/shl_const4_dyn.expected Adds expected output for SHL small const shift fixture
tests/evm_asm/shl_const4_dyn.easm Adds SHL small const shift fixture bytecode
tests/evm_asm/shl_const256_dyn.expected Adds expected output for SHL >=256 fold fixture
tests/evm_asm/shl_const256_dyn.easm Adds SHL >=256 fold fixture bytecode
tests/evm_asm/shl_const200_u64val.expected Adds expected output for SHL const over u64-tagged value (large shift)
tests/evm_asm/shl_const200_u64val.easm Adds SHL const over u64-tagged value (large shift) fixture bytecode
tests/evm_asm/shl_const136_u64val.expected Adds expected output for SHL const over u64-tagged value (carry-only limb)
tests/evm_asm/shl_const136_u64val.easm Adds SHL const over u64-tagged value (carry-only limb) fixture bytecode
tests/evm_asm/sgt_dyn_neg_vs_const.expected Adds expected output for SGT dyn-negative vs const fixture
tests/evm_asm/sgt_dyn_neg_vs_const.easm Adds SGT dyn-negative vs const fixture bytecode
tests/evm_asm/sgt_dyn_msb64_vs_const.expected Adds expected output for SGT msb64 edge fixture
tests/evm_asm/sgt_dyn_msb64_vs_const.easm Adds SGT msb64 edge fixture bytecode
tests/evm_asm/sgt_dyn_highsparse_vs_const.expected Adds expected output for SGT high-sparse limb fixture
tests/evm_asm/sgt_dyn_highsparse_vs_const.easm Adds SGT high-sparse limb fixture bytecode
tests/evm_asm/sgt_const_vs_dyn.expected Adds expected output for SGT const-vs-dyn swapped-dispatch fixture
tests/evm_asm/sgt_const_vs_dyn.easm Adds SGT const-vs-dyn swapped-dispatch fixture bytecode
tests/evm_asm/sar_const8_neg.expected Adds expected output for SAR const shift on negative value fixture
tests/evm_asm/sar_const8_neg.easm Adds SAR const shift on negative value fixture bytecode
tests/evm_asm/sar_const64_pos.expected Adds expected output for SAR const shift on positive value fixture
tests/evm_asm/sar_const64_pos.easm Adds SAR const shift on positive value fixture bytecode
tests/evm_asm/or_dyn_u64_wide.expected Adds expected output for OR u64-vs-wide fixture
tests/evm_asm/or_dyn_u64_wide.easm Adds OR u64-vs-wide adversarial fixture bytecode
tests/evm_asm/or_dyn_u64_u64.expected Adds expected output for OR u64-vs-u64 fixture
tests/evm_asm/or_dyn_u64_u64.easm Adds OR u64-vs-u64 fixture bytecode
tests/evm_asm/jumpi_u64_cond_taken.expected Adds expected output for JUMPI on u64-tagged nonzero condition
tests/evm_asm/jumpi_u64_cond_taken.easm Adds JUMPI on u64-tagged nonzero condition fixture bytecode
tests/evm_asm/jumpi_u64_cond_nottaken.expected Adds expected output for JUMPI on u64-tagged zero condition
tests/evm_asm/jumpi_u64_cond_nottaken.easm Adds JUMPI on u64-tagged zero condition fixture bytecode
tests/evm_asm/jumpi_iszero_iszero_fused.expected Adds expected output for ISZERO/ISZERO fusion + JUMPI fixture
tests/evm_asm/jumpi_iszero_iszero_fused.easm Adds ISZERO/ISZERO fusion + JUMPI fixture bytecode
tests/evm_asm/jumpi_iszero_fused_taken.expected Adds expected output for deferred-ISZERO fusion (taken) fixture
tests/evm_asm/jumpi_iszero_fused_taken.easm Adds deferred-ISZERO fusion (taken) fixture bytecode
tests/evm_asm/jumpi_iszero_fused_nottaken_highsparse.expected Adds expected output for deferred-ISZERO fusion (not taken, high-sparse)
tests/evm_asm/jumpi_iszero_fused_nottaken_highsparse.easm Adds deferred-ISZERO fusion (not taken, high-sparse) fixture bytecode
tests/evm_asm/iszero_dyn_u64_nonzero.expected Adds expected output for ISZERO on u64-tagged nonzero dynamic
tests/evm_asm/iszero_dyn_u64_nonzero.easm Adds ISZERO on u64-tagged nonzero dynamic fixture bytecode
tests/evm_asm/iszero_dyn_highsparse.expected Adds expected output for ISZERO on high-sparse dynamic value
tests/evm_asm/iszero_dyn_highsparse.easm Adds ISZERO on high-sparse dynamic fixture bytecode
tests/evm_asm/iszero_calldatasize.expected Adds expected output for ISZERO(CALLDATASIZE) fixture
tests/evm_asm/iszero_calldatasize.easm Adds ISZERO(CALLDATASIZE) fixture bytecode
src/tests/evm_differential_tests.cpp New consolidated differential test suite (fixtures + matrix harness)
src/tests/CMakeLists.txt Adds and wires evmDifferentialTests into build + ctest
docs/changes/2026-06-11-evm-differential-suite/README.md Documents the consolidated differential suite and verification

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/tests/evm_differential_tests.cpp
Comment thread src/tests/evm_differential_tests.cpp
Comment thread src/tests/evm_differential_tests.cpp
@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown

⚡ Performance Regression Check Results

✅ Performance Check Passed (interpreter)

Performance Benchmark Results (threshold: 25%)

Benchmark Baseline (us) Current (us) Change Status
total/main/blake2b_huff/8415nulls 3.72 3.73 +0.2% PASS
total/main/blake2b_huff/empty 0.06 0.06 -0.4% PASS
total/main/blake2b_shifts/8415nulls 24.52 20.59 -16.0% PASS
total/main/sha1_divs/5311 12.01 11.91 -0.9% PASS
total/main/sha1_divs/empty 0.15 0.15 +2.2% PASS
total/main/sha1_shifts/5311 9.32 9.29 -0.3% PASS
total/main/sha1_shifts/empty 0.09 0.08 -18.1% PASS
total/main/snailtracer/benchmark 107.59 112.69 +4.7% PASS
total/main/structarray_alloc/nfts_rank 1.67 1.41 -15.2% PASS
total/main/swap_math/insufficient_liquidity 0.01 0.00 -13.3% PASS
total/main/swap_math/received 0.01 0.01 +0.0% PASS
total/main/swap_math/spent 0.01 0.01 -0.3% PASS
total/main/weierstrudel/1 0.39 0.39 -0.0% PASS
total/main/weierstrudel/15 4.39 4.41 +0.6% PASS
total/micro/JUMPDEST_n0/empty 2.87 2.86 -0.2% PASS
total/micro/jump_around/empty 0.11 0.11 -5.5% PASS
total/micro/loop_with_many_jumpdests/empty 64.55 65.05 +0.8% PASS
total/micro/memory_grow_mload/by1 0.22 0.22 +4.2% PASS
total/micro/memory_grow_mload/by16 0.26 0.24 -5.7% PASS
total/micro/memory_grow_mload/by32 0.21 0.14 -29.5% PASS
total/micro/memory_grow_mload/nogrow 0.16 0.12 -26.5% PASS
total/micro/memory_grow_mstore/by1 0.24 0.23 -3.8% PASS
total/micro/memory_grow_mstore/by16 0.17 0.14 -19.0% PASS
total/micro/memory_grow_mstore/by32 0.29 0.28 -1.2% PASS
total/micro/memory_grow_mstore/nogrow 0.24 0.24 -1.6% PASS
total/micro/signextend/one 0.38 0.28 -26.3% PASS
total/micro/signextend/zero 0.49 0.48 -0.7% PASS
total/synth/ADD/b0 3.23 3.23 -0.1% PASS
total/synth/ADD/b1 5.80 6.10 +5.2% PASS
total/synth/ADDRESS/a0 6.71 6.67 -0.6% PASS
total/synth/ADDRESS/a1 5.29 5.16 -2.5% PASS
total/synth/AND/b0 2.88 2.87 -0.4% PASS
total/synth/AND/b1 5.43 5.45 +0.4% PASS
total/synth/BYTE/b0 6.06 6.04 -0.3% PASS
total/synth/BYTE/b1 8.42 8.76 +4.1% PASS
total/synth/CALLDATASIZE/a0 5.56 5.58 +0.3% PASS
total/synth/CALLDATASIZE/a1 3.47 3.67 +5.6% PASS
total/synth/CALLER/a0 6.45 6.77 +5.0% PASS
total/synth/CALLER/a1 6.76 7.00 +3.5% PASS
total/synth/CALLVALUE/a0 3.43 3.50 +2.0% PASS
total/synth/CALLVALUE/a1 6.36 6.39 +0.4% PASS
total/synth/CODESIZE/a0 6.78 6.88 +1.5% PASS
total/synth/CODESIZE/a1 7.93 6.30 -20.5% PASS
total/synth/DUP1/d0 2.14 2.01 -6.0% PASS
total/synth/DUP1/d1 2.08 2.19 +5.5% PASS
total/synth/DUP10/d0 2.01 1.97 -2.2% PASS
total/synth/DUP10/d1 2.15 2.03 -5.6% PASS
total/synth/DUP11/d0 1.24 1.23 -0.5% PASS
total/synth/DUP11/d1 2.09 2.07 -1.0% PASS
total/synth/DUP12/d0 2.05 2.06 +0.6% PASS
total/synth/DUP12/d1 1.60 1.65 +3.1% PASS
total/synth/DUP13/d0 2.08 1.99 -4.3% PASS
total/synth/DUP13/d1 2.10 2.13 +1.6% PASS
total/synth/DUP14/d0 1.23 1.14 -7.4% PASS
total/synth/DUP14/d1 2.12 2.10 -0.6% PASS
total/synth/DUP15/d0 1.99 2.07 +3.8% PASS
total/synth/DUP15/d1 1.66 1.44 -12.7% PASS
total/synth/DUP16/d0 2.15 2.08 -3.3% PASS
total/synth/DUP16/d1 2.12 2.14 +1.2% PASS
total/synth/DUP2/d0 1.24 1.10 -10.6% PASS
total/synth/DUP2/d1 2.11 2.11 +0.1% PASS
total/synth/DUP3/d0 2.07 2.00 -3.1% PASS
total/synth/DUP3/d1 1.66 1.65 -0.3% PASS
total/synth/DUP4/d0 2.01 1.97 -2.2% PASS
total/synth/DUP4/d1 2.11 2.03 -3.6% PASS
total/synth/DUP5/d0 1.22 1.12 -8.4% PASS
total/synth/DUP5/d1 2.09 2.31 +10.4% PASS
total/synth/DUP6/d0 1.96 1.99 +1.0% PASS
total/synth/DUP6/d1 1.66 1.65 -0.0% PASS
total/synth/DUP7/d0 1.98 2.06 +4.2% PASS
total/synth/DUP7/d1 2.14 2.17 +1.5% PASS
total/synth/DUP8/d0 1.23 1.23 -0.1% PASS
total/synth/DUP8/d1 2.15 2.10 -2.0% PASS
total/synth/DUP9/d0 1.97 2.00 +1.2% PASS
total/synth/DUP9/d1 1.60 1.45 -9.6% PASS
total/synth/EQ/b0 7.47 6.13 -17.9% PASS
total/synth/EQ/b1 6.40 6.53 +2.1% PASS
total/synth/GAS/a0 3.94 3.93 -0.2% PASS
total/synth/GAS/a1 7.28 7.35 +1.1% PASS
total/synth/GT/b0 7.34 6.33 -13.9% PASS
total/synth/GT/b1 6.55 6.59 +0.6% PASS
total/synth/ISZERO/u0 15.93 10.11 -36.5% PASS
total/synth/JUMPDEST/n0 2.87 2.86 -0.3% PASS
total/synth/LT/b0 6.29 6.38 +1.4% PASS
total/synth/LT/b1 5.43 5.40 -0.5% PASS
total/synth/MSIZE/a0 6.10 5.95 -2.3% PASS
total/synth/MSIZE/a1 6.44 6.36 -1.3% PASS
total/synth/MUL/b0 7.82 8.89 +13.6% PASS
total/synth/MUL/b1 5.92 5.91 -0.2% PASS
total/synth/NOT/u0 7.79 8.02 +3.0% PASS
total/synth/OR/b0 5.26 5.13 -2.5% PASS
total/synth/OR/b1 3.41 3.42 +0.3% PASS
total/synth/PC/a0 5.54 5.40 -2.4% PASS
total/synth/PC/a1 3.48 3.66 +5.3% PASS
total/synth/PUSH1/p0 2.34 2.40 +2.3% PASS
total/synth/PUSH1/p1 1.74 1.74 -0.2% PASS
total/synth/PUSH10/p0 2.49 2.31 -7.4% PASS
total/synth/PUSH10/p1 1.55 1.63 +5.0% PASS
total/synth/PUSH11/p0 2.33 2.29 -1.9% PASS
total/synth/PUSH11/p1 2.44 2.29 -5.9% PASS
total/synth/PUSH12/p0 1.36 1.32 -2.8% PASS
total/synth/PUSH12/p1 2.41 2.37 -1.5% PASS
total/synth/PUSH13/p0 2.30 2.28 -0.8% PASS
total/synth/PUSH13/p1 1.56 1.75 +11.8% PASS
total/synth/PUSH14/p0 2.37 2.62 +10.6% PASS
total/synth/PUSH14/p1 2.30 2.42 +5.5% PASS
total/synth/PUSH15/p0 1.32 1.32 -0.4% PASS
total/synth/PUSH15/p1 2.53 2.52 -0.7% PASS
total/synth/PUSH16/p0 2.42 2.36 -2.2% PASS
total/synth/PUSH16/p1 1.77 1.78 +0.5% PASS
total/synth/PUSH17/p0 2.23 2.20 -1.4% PASS
total/synth/PUSH17/p1 2.40 2.31 -4.0% PASS
total/synth/PUSH18/p0 1.32 1.32 +0.1% PASS
total/synth/PUSH18/p1 2.50 2.46 -1.4% PASS
total/synth/PUSH19/p0 2.22 2.25 +1.3% PASS
total/synth/PUSH19/p1 1.61 1.75 +8.5% PASS
total/synth/PUSH2/p0 2.18 2.31 +5.8% PASS
total/synth/PUSH2/p1 2.42 2.43 +0.2% PASS
total/synth/PUSH20/p0 2.29 2.47 +7.8% PASS
total/synth/PUSH20/p1 2.36 2.31 -2.2% PASS
total/synth/PUSH21/p0 1.32 1.32 -0.0% PASS
total/synth/PUSH21/p1 2.44 2.46 +0.8% PASS
total/synth/PUSH22/p0 2.39 2.38 -0.7% PASS
total/synth/PUSH22/p1 1.69 1.75 +3.2% PASS
total/synth/PUSH23/p0 2.36 2.37 +0.5% PASS
total/synth/PUSH23/p1 2.33 2.44 +5.0% PASS
total/synth/PUSH24/p0 1.32 1.32 -0.2% PASS
total/synth/PUSH24/p1 2.37 2.63 +10.8% PASS
total/synth/PUSH25/p0 2.26 2.31 +2.0% PASS
total/synth/PUSH25/p1 1.70 1.77 +4.0% PASS
total/synth/PUSH26/p0 2.18 2.35 +7.9% PASS
total/synth/PUSH26/p1 2.36 2.38 +0.8% PASS
total/synth/PUSH27/p0 1.32 1.33 +0.4% PASS
total/synth/PUSH27/p1 2.48 2.44 -1.8% PASS
total/synth/PUSH28/p0 2.35 2.27 -3.3% PASS
total/synth/PUSH28/p1 1.67 1.78 +6.8% PASS
total/synth/PUSH29/p0 2.21 2.36 +6.9% PASS
total/synth/PUSH29/p1 2.33 2.53 +8.6% PASS
total/synth/PUSH3/p0 1.32 1.32 +0.4% PASS
total/synth/PUSH3/p1 2.45 2.32 -5.2% PASS
total/synth/PUSH30/p0 1.55 1.48 -4.2% PASS
total/synth/PUSH30/p1 2.53 2.36 -6.4% PASS
total/synth/PUSH31/p0 2.29 2.24 -2.4% PASS
total/synth/PUSH31/p1 1.97 1.84 -6.5% PASS
total/synth/PUSH32/p0 2.22 2.24 +0.8% PASS
total/synth/PUSH32/p1 2.95 2.49 -15.6% PASS
total/synth/PUSH4/p0 2.29 2.31 +0.8% PASS
total/synth/PUSH4/p1 1.75 1.75 +0.3% PASS
total/synth/PUSH5/p0 2.36 2.28 -3.5% PASS
total/synth/PUSH5/p1 2.56 2.34 -8.6% PASS
total/synth/PUSH6/p0 1.32 1.32 -0.0% PASS
total/synth/PUSH6/p1 2.38 2.44 +2.4% PASS
total/synth/PUSH7/p0 2.43 2.36 -2.9% PASS
total/synth/PUSH7/p1 1.75 1.81 +3.1% PASS
total/synth/PUSH8/p0 2.30 2.26 -1.9% PASS
total/synth/PUSH8/p1 2.38 2.40 +0.8% PASS
total/synth/PUSH9/p0 1.32 1.33 +0.6% PASS
total/synth/PUSH9/p1 2.61 2.31 -11.7% PASS
total/synth/RETURNDATASIZE/a0 3.66 3.54 -3.3% PASS
total/synth/RETURNDATASIZE/a1 6.35 6.52 +2.8% PASS
total/synth/SAR/b0 3.94 3.94 -0.1% PASS
total/synth/SAR/b1 7.66 7.69 +0.4% PASS
total/synth/SGT/b0 5.91 5.84 -1.2% PASS
total/synth/SGT/b1 4.15 4.15 -0.0% PASS
total/synth/SHL/b0 7.01 7.18 +2.4% PASS
total/synth/SHL/b1 3.65 3.73 +2.1% PASS
total/synth/SHR/b0 6.90 7.10 +3.0% PASS
total/synth/SHR/b1 6.39 6.29 -1.6% PASS
total/synth/SIGNEXTEND/b0 3.36 3.36 -0.1% PASS
total/synth/SIGNEXTEND/b1 7.12 6.61 -7.2% PASS
total/synth/SLT/b0 4.28 4.30 +0.4% PASS
total/synth/SLT/b1 6.20 5.91 -4.2% PASS
total/synth/SUB/b0 6.17 6.06 -1.8% PASS
total/synth/SUB/b1 6.00 6.12 +2.0% PASS
total/synth/SWAP1/s0 3.53 3.52 -0.1% PASS
total/synth/SWAP10/s0 3.54 3.53 -0.1% PASS
total/synth/SWAP11/s0 3.50 3.48 -0.8% PASS
total/synth/SWAP12/s0 3.58 3.45 -3.6% PASS
total/synth/SWAP13/s0 3.54 3.54 -0.0% PASS
total/synth/SWAP14/s0 3.52 3.45 -2.0% PASS
total/synth/SWAP15/s0 3.51 3.55 +1.0% PASS
total/synth/SWAP16/s0 3.55 3.55 +0.0% PASS
total/synth/SWAP2/s0 3.46 3.53 +2.0% PASS
total/synth/SWAP3/s0 3.54 3.51 -0.9% PASS
total/synth/SWAP4/s0 3.53 3.52 -0.1% PASS
total/synth/SWAP5/s0 3.44 3.49 +1.6% PASS
total/synth/SWAP6/s0 3.54 3.42 -3.4% PASS
total/synth/SWAP7/s0 3.53 3.53 -0.2% PASS
total/synth/SWAP8/s0 3.46 3.44 -0.7% PASS
total/synth/SWAP9/s0 3.45 3.43 -0.6% PASS
total/synth/XOR/b0 5.14 4.89 -4.9% PASS
total/synth/XOR/b1 5.35 5.25 -1.8% PASS
total/synth/loop_v1 12.12 12.20 +0.6% PASS
total/synth/loop_v2 12.15 12.27 +1.0% PASS

Summary: 194 benchmarks, 0 regressions


✅ Performance Check Passed (multipass)

Performance Benchmark Results (threshold: 25%)

Benchmark Baseline (us) Current (us) Change Status
total/main/blake2b_huff/8415nulls 1.45 1.41 -2.6% PASS
total/main/blake2b_huff/empty 0.02 0.02 -0.8% PASS
total/main/blake2b_shifts/8415nulls 20.18 20.16 -0.1% PASS
total/main/sha1_divs/5311 12.29 11.31 -8.0% PASS
total/main/sha1_divs/empty 0.13 0.13 -0.8% PASS
total/main/sha1_shifts/5311 8.34 8.88 +6.6% PASS
total/main/sha1_shifts/empty 0.07 0.07 +0.0% PASS
total/main/snailtracer/benchmark 105.61 103.86 -1.7% PASS
total/main/structarray_alloc/nfts_rank 1.50 1.49 -1.0% PASS
total/main/swap_math/insufficient_liquidity 0.00 0.00 -1.4% PASS
total/main/swap_math/received 0.01 0.01 +12.1% PASS
total/main/swap_math/spent 0.01 0.01 -1.2% PASS
total/main/weierstrudel/1 0.41 0.40 -0.8% PASS
total/main/weierstrudel/15 4.64 4.29 -7.6% PASS
total/micro/JUMPDEST_n0/empty 0.00 0.00 +0.4% PASS
total/micro/jump_around/empty 0.05 0.04 -3.2% PASS
total/micro/loop_with_many_jumpdests/empty 0.01 0.01 -4.2% PASS
total/micro/memory_grow_mload/by1 0.02 0.02 -5.0% PASS
total/micro/memory_grow_mload/by16 0.02 0.02 -0.0% PASS
total/micro/memory_grow_mload/by32 0.01 0.01 -0.4% PASS
total/micro/memory_grow_mload/nogrow 0.01 0.01 -0.1% PASS
total/micro/memory_grow_mstore/by1 0.02 0.02 -0.6% PASS
total/micro/memory_grow_mstore/by16 0.01 0.01 +0.7% PASS
total/micro/memory_grow_mstore/by32 0.02 0.02 +0.6% PASS
total/micro/memory_grow_mstore/nogrow 0.02 0.02 -1.8% PASS
total/micro/signextend/one 0.09 0.09 -1.7% PASS
total/micro/signextend/zero 0.18 0.18 -1.4% PASS
total/synth/ADD/b0 0.00 0.00 +0.7% PASS
total/synth/ADD/b1 0.00 0.00 -0.6% PASS
total/synth/ADDRESS/a0 0.21 0.22 +4.4% PASS
total/synth/ADDRESS/a1 0.15 0.15 -3.1% PASS
total/synth/AND/b0 0.00 0.00 +6.6% PASS
total/synth/AND/b1 0.00 0.00 -1.5% PASS
total/synth/BYTE/b0 0.00 0.00 +2.2% PASS
total/synth/BYTE/b1 0.00 0.00 -0.4% PASS
total/synth/CALLDATASIZE/a0 0.11 0.10 -11.3% PASS
total/synth/CALLDATASIZE/a1 0.07 0.07 +0.3% PASS
total/synth/CALLER/a0 0.26 0.21 -16.2% PASS
total/synth/CALLER/a1 0.27 0.21 -20.4% PASS
total/synth/CALLVALUE/a0 0.19 0.19 -0.0% PASS
total/synth/CALLVALUE/a1 0.24 0.30 +24.3% PASS
total/synth/CODESIZE/a0 0.10 0.10 -3.8% PASS
total/synth/CODESIZE/a1 0.12 0.10 -9.7% PASS
total/synth/DUP1/d0 0.00 0.00 -0.1% PASS
total/synth/DUP1/d1 0.00 0.00 +0.1% PASS
total/synth/DUP10/d0 0.00 0.00 -0.7% PASS
total/synth/DUP10/d1 0.00 0.00 +1.1% PASS
total/synth/DUP11/d0 0.00 0.00 +2.9% PASS
total/synth/DUP11/d1 0.00 0.00 -1.6% PASS
total/synth/DUP12/d0 0.00 0.00 +2.0% PASS
total/synth/DUP12/d1 0.00 0.00 -0.4% PASS
total/synth/DUP13/d0 0.00 0.00 -1.0% PASS
total/synth/DUP13/d1 0.00 0.00 +1.3% PASS
total/synth/DUP14/d0 0.00 0.00 -1.4% PASS
total/synth/DUP14/d1 0.00 0.00 -0.5% PASS
total/synth/DUP15/d0 0.00 0.00 -1.7% PASS
total/synth/DUP15/d1 0.00 0.00 +7.8% PASS
total/synth/DUP16/d0 0.00 0.00 +1.7% PASS
total/synth/DUP16/d1 0.00 0.00 +1.1% PASS
total/synth/DUP2/d0 0.00 0.00 +1.7% PASS
total/synth/DUP2/d1 0.00 0.00 -2.1% PASS
total/synth/DUP3/d0 0.00 0.00 +0.7% PASS
total/synth/DUP3/d1 0.00 0.00 +1.8% PASS
total/synth/DUP4/d0 0.00 0.00 +0.1% PASS
total/synth/DUP4/d1 0.00 0.00 -2.0% PASS
total/synth/DUP5/d0 0.00 0.00 -3.2% PASS
total/synth/DUP5/d1 0.00 0.00 -0.7% PASS
total/synth/DUP6/d0 0.00 0.00 -3.1% PASS
total/synth/DUP6/d1 0.00 0.00 +0.7% PASS
total/synth/DUP7/d0 0.00 0.00 +3.1% PASS
total/synth/DUP7/d1 0.00 0.00 -1.3% PASS
total/synth/DUP8/d0 0.00 0.00 +3.6% PASS
total/synth/DUP8/d1 0.00 0.00 +0.8% PASS
total/synth/DUP9/d0 0.00 0.00 -1.5% PASS
total/synth/DUP9/d1 0.00 0.00 +4.3% PASS
total/synth/EQ/b0 0.00 0.00 -1.8% PASS
total/synth/EQ/b1 0.00 0.00 -1.7% PASS
total/synth/GAS/a0 0.86 0.86 -0.0% PASS
total/synth/GAS/a1 1.02 1.03 +1.0% PASS
total/synth/GT/b0 0.00 0.00 -0.7% PASS
total/synth/GT/b1 0.00 0.00 +0.2% PASS
total/synth/ISZERO/u0 0.00 0.00 -0.5% PASS
total/synth/JUMPDEST/n0 0.00 0.00 +0.4% PASS
total/synth/LT/b0 0.00 0.00 -0.5% PASS
total/synth/LT/b1 0.00 0.00 +7.4% PASS
total/synth/MSIZE/a0 0.00 0.00 -0.4% PASS
total/synth/MSIZE/a1 0.00 0.00 +1.9% PASS
total/synth/MUL/b0 0.00 0.00 +0.1% PASS
total/synth/MUL/b1 0.00 0.00 +0.9% PASS
total/synth/NOT/u0 0.00 0.00 -1.4% PASS
total/synth/OR/b0 0.00 0.00 -1.5% PASS
total/synth/OR/b1 0.00 0.00 +0.4% PASS
total/synth/PC/a0 0.00 0.00 -1.6% PASS
total/synth/PC/a1 0.00 0.00 +3.2% PASS
total/synth/PUSH1/p0 0.00 0.00 -0.2% PASS
total/synth/PUSH1/p1 0.00 0.00 +0.6% PASS
total/synth/PUSH10/p0 0.00 0.00 +0.9% PASS
total/synth/PUSH10/p1 0.00 0.00 +1.8% PASS
total/synth/PUSH11/p0 0.00 0.00 -1.2% PASS
total/synth/PUSH11/p1 0.00 0.00 -3.2% PASS
total/synth/PUSH12/p0 0.00 0.00 -2.8% PASS
total/synth/PUSH12/p1 0.00 0.00 +2.4% PASS
total/synth/PUSH13/p0 0.00 0.00 -0.1% PASS
total/synth/PUSH13/p1 0.00 0.00 +5.3% PASS
total/synth/PUSH14/p0 0.00 0.00 -4.2% PASS
total/synth/PUSH14/p1 0.00 0.00 +0.1% PASS
total/synth/PUSH15/p0 0.00 0.00 -1.0% PASS
total/synth/PUSH15/p1 0.00 0.00 -2.6% PASS
total/synth/PUSH16/p0 0.00 0.00 -1.5% PASS
total/synth/PUSH16/p1 0.00 0.00 +1.3% PASS
total/synth/PUSH17/p0 0.00 0.00 +2.5% PASS
total/synth/PUSH17/p1 0.00 0.00 +2.6% PASS
total/synth/PUSH18/p0 0.00 0.00 -3.5% PASS
total/synth/PUSH18/p1 0.00 0.00 -2.9% PASS
total/synth/PUSH19/p0 0.00 0.00 -0.5% PASS
total/synth/PUSH19/p1 0.00 0.00 -3.1% PASS
total/synth/PUSH2/p0 0.00 0.00 +0.4% PASS
total/synth/PUSH2/p1 0.00 0.00 +3.1% PASS
total/synth/PUSH20/p0 0.00 0.00 +0.3% PASS
total/synth/PUSH20/p1 0.00 0.00 -0.7% PASS
total/synth/PUSH21/p0 0.00 0.00 -3.9% PASS
total/synth/PUSH21/p1 0.00 0.00 +0.2% PASS
total/synth/PUSH22/p0 2.21 2.21 -0.2% PASS
total/synth/PUSH22/p1 1.76 1.77 +0.5% PASS
total/synth/PUSH23/p0 2.22 2.26 +1.9% PASS
total/synth/PUSH23/p1 2.21 2.19 -0.7% PASS
total/synth/PUSH24/p0 1.52 1.53 +0.2% PASS
total/synth/PUSH24/p1 2.26 2.26 +0.2% PASS
total/synth/PUSH25/p0 2.23 2.19 -1.8% PASS
total/synth/PUSH25/p1 1.76 1.76 -0.0% PASS
total/synth/PUSH26/p0 2.24 2.19 -2.1% PASS
total/synth/PUSH26/p1 2.26 2.33 +2.8% PASS
total/synth/PUSH27/p0 1.52 1.53 +0.7% PASS
total/synth/PUSH27/p1 2.25 2.19 -2.5% PASS
total/synth/PUSH28/p0 2.17 2.23 +2.4% PASS
total/synth/PUSH28/p1 1.76 1.77 +0.8% PASS
total/synth/PUSH29/p0 2.46 2.23 -9.2% PASS
total/synth/PUSH29/p1 2.19 2.23 +2.6% PASS
total/synth/PUSH3/p0 0.00 0.00 +4.5% PASS
total/synth/PUSH3/p1 0.00 0.00 +2.8% PASS
total/synth/PUSH30/p0 1.62 1.54 -4.6% PASS
total/synth/PUSH30/p1 2.17 2.31 +6.5% PASS
total/synth/PUSH31/p0 2.17 2.21 +1.7% PASS
total/synth/PUSH31/p1 1.85 1.78 -3.8% PASS
total/synth/PUSH32/p0 2.18 2.18 +0.0% PASS
total/synth/PUSH32/p1 2.16 2.27 +4.7% PASS
total/synth/PUSH4/p0 0.00 0.00 -2.7% PASS
total/synth/PUSH4/p1 0.00 0.00 -5.6% PASS
total/synth/PUSH5/p0 0.00 0.00 -1.0% PASS
total/synth/PUSH5/p1 0.00 0.00 -0.2% PASS
total/synth/PUSH6/p0 0.00 0.00 +2.0% PASS
total/synth/PUSH6/p1 0.00 0.00 +1.6% PASS
total/synth/PUSH7/p0 0.00 0.00 +3.0% PASS
total/synth/PUSH7/p1 0.00 0.00 +0.6% PASS
total/synth/PUSH8/p0 0.00 0.00 +1.2% PASS
total/synth/PUSH8/p1 0.00 0.00 -6.8% PASS
total/synth/PUSH9/p0 0.00 0.00 -3.1% PASS
total/synth/PUSH9/p1 0.00 0.00 -2.3% PASS
total/synth/RETURNDATASIZE/a0 0.03 0.03 -0.1% PASS
total/synth/RETURNDATASIZE/a1 0.05 0.05 -1.0% PASS
total/synth/SAR/b0 0.00 0.00 +0.7% PASS
total/synth/SAR/b1 0.00 0.00 -0.1% PASS
total/synth/SGT/b0 0.00 0.00 +0.9% PASS
total/synth/SGT/b1 0.00 0.00 +3.9% PASS
total/synth/SHL/b0 0.00 0.00 +0.9% PASS
total/synth/SHL/b1 0.00 0.00 +1.2% PASS
total/synth/SHR/b0 0.00 0.00 +0.7% PASS
total/synth/SHR/b1 0.00 0.00 +0.3% PASS
total/synth/SIGNEXTEND/b0 0.00 0.00 -3.2% PASS
total/synth/SIGNEXTEND/b1 0.00 0.00 -1.7% PASS
total/synth/SLT/b0 0.00 0.00 +6.2% PASS
total/synth/SLT/b1 0.00 0.00 -0.7% PASS
total/synth/SUB/b0 0.00 0.00 -1.1% PASS
total/synth/SUB/b1 0.00 0.00 -0.6% PASS
total/synth/SWAP1/s0 0.00 0.00 +6.1% PASS
total/synth/SWAP10/s0 0.00 0.00 +7.6% PASS
total/synth/SWAP11/s0 0.00 0.00 -0.2% PASS
total/synth/SWAP12/s0 0.00 0.00 -1.0% PASS
total/synth/SWAP13/s0 0.00 0.00 +5.8% PASS
total/synth/SWAP14/s0 0.00 0.00 +1.6% PASS
total/synth/SWAP15/s0 0.00 0.00 -0.9% PASS
total/synth/SWAP16/s0 0.00 0.00 +1.1% PASS
total/synth/SWAP2/s0 0.00 0.00 -1.0% PASS
total/synth/SWAP3/s0 0.00 0.00 -0.5% PASS
total/synth/SWAP4/s0 0.00 0.00 -0.0% PASS
total/synth/SWAP5/s0 0.00 0.00 +0.1% PASS
total/synth/SWAP6/s0 0.00 0.00 -0.3% PASS
total/synth/SWAP7/s0 0.00 0.00 -5.1% PASS
total/synth/SWAP8/s0 0.00 0.00 -1.4% PASS
total/synth/SWAP9/s0 0.00 0.00 -2.0% PASS
total/synth/XOR/b0 0.00 0.00 -0.2% PASS
total/synth/XOR/b1 0.00 0.00 +1.0% PASS
total/synth/loop_v1 11.39 12.77 +12.1% PASS
total/synth/loop_v2 11.63 12.89 +10.8% PASS

Summary: 194 benchmarks, 0 regressions


abmcar and others added 2 commits June 11, 2026 16:32
Add explicit standard-library includes instead of relying on transitive
ones, and make the matrix harness assert the interpreter run succeeds so
a shared failure (e.g. out-of-gas in both engines) cannot pass the
differential check vacuously.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nts)

Align the doc with the technical-writing rule: describe internal labels by behavior, remove who-reviewed and process narrative, and keep every count, flag, code anchor, and measurement. No code or runtime change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cen5bPpPEgkSkcxWWTSY7d
@zoowii zoowii merged commit 107c29b into DTVMStack:main Jun 24, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants