Skip to content

v0.32.1 — i64 popcnt clobber + div_s overflow trap (#632/#633)

Choose a tag to compare

@avrabe avrabe released this 08 Jul 05:26
· 532 commits to main since this release
086968a

Two gale-filed silent i64 miscompiles fixed same-day, plus two latent bugs the class audit surfaced in the same encoder arm.

Fixed

  • i64.popcnt result clobbered by its own scratch restore (#632, BOTH ISAs). The expansion could land its total in a register inside its own POP restore set. Structural fix: the total crosses the restore in R12 (never allocatable, never restored) — collision impossible by construction. Class audit swept every push/pop-scratch expansion on both ISAs: I64Popcnt was the only affected op. Bonus latent fixes in the same arm: entry-marshal clobber for pairs at (R3,R4); 3-bit T1 fields silently corrupting R8. Differential 6/11 mismatch → 11/11.
  • i64.div_s(INT64_MIN, -1) returned INT64_MIN instead of trapping (#633). Overflow guard added to the i64 fixed-ABI path (both ISAs), mirroring the existing i32 guard. The rem_s twin stays correct: i64.rem_s(INT64_MIN,-1) returns 0 without trapping, pinned by unit tests. Differential 2 mismatch → 16/16.

Frozen anchors untouched; estimator re-aligned. Note: platform binaries attach ~10 min after the tag (release workflow).

🤖 Generated with Claude Code