Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.11.40] - 2026-06-11

**THE ALLOCATOR ACCEPTANCE RELEASE — VCR-RA-001's five criteria are all met,
and gale's k_mutex_unlock lane unblocks (#242, #326).**

- **i64 pair-spill via param frame-backing** (#325): the last acceptance
criterion closes. The true pair-exhaustion blocker was pinned param home
registers (no stack spill can free them); a third retry-ladder rung forces
the proven #204 param frame-backing onto call-free functions, after which
a consecutive pair always exists (pigeonhole over the freed pool). Ladder:
default -> spill-only (#320) -> spill+param-backing, each rung triggered
only by its predecessor's exact error — bit-identity stays structural.
NEW high-pressure-i64 lane: hard Err on v0.11.39 -> 6/6 vs wasmtime.
- **Arg-move cycles via the parallel-move resolver** (#327, gale #326): the
call-marshal cycle-breaker no longer demands a callee-saved register —
VCR-RA-004's resolver (v0.11.38) breaks cycles via a stack-scratch cell
when registers are saturated. This unblocks the dissolved k_mutex_unlock
(gale's exact error reproduced on main by the committed mutex_pressure
lane; 7/7 vs wasmtime on the fix) AND killed a latent wrong-code bug: the
old cycle-breaker miscompiled genuine 2-swaps (duplicated a value).
- **VCR-RA-001 status: implemented.** All five criteria verified: no
hard-fail on high-pressure i32 AND i64 modules; fixtures bit-identical
through six releases; cycles equal-or-better on the G474RE (gale); the
v0.11.20 cost-gate revert EXECUTED (#322); the backward-dataflow validator
guarding every re-allocated segment (#323). Honest bounds: the 8-slot
spill pool, stack-passed params, the R8-pair/i64-param class (tracked).

Falsification: wrong if gale's mutex lane fails on silicon (native ref 124),
any previously-compiling module's bytes change, or any pressure lane
disagrees with wasmtime.


## [0.11.39] - 2026-06-11

**The assurance carrier: a backward-dataflow translation validator now guards
Expand Down
34 changes: 17 additions & 17 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ resolver = "2"
# semver to publish, so the convention now catches up: workspace
# version follows the release tag, bumped pre-tag in the release
# checklist. See docs/release-process.md.
version = "0.11.39"
version = "0.11.40"
edition = "2024"
rust-version = "1.88"
authors = ["PulseEngine Team"]
Expand Down
2 changes: 1 addition & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ module(
name = "synth",
# Kept in lockstep with [workspace.package] version in Cargo.toml.
# Both are bumped pre-tag — see docs/release-process.md.
version = "0.11.39",
version = "0.11.40",
)

# Bazel dependencies
Expand Down
2 changes: 1 addition & 1 deletion artifacts/verified-codegen-roadmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ artifacts:
shortcuts be reverted toward the clean form. Must keep the reserved-reg
architecture (R9 globals / R11 mem-base / R12 IP-scratch) and the
bounds-mode R10 invariant.
status: proposed
status: implemented
tags: [codegen, register-allocation, ssa, regalloc2, track-a, release-v0.11.40]
links:
- type: derives-from
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-backend-awsm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ categories.workspace = true
description = "aWsm backend integration for the Synth compiler"

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.39" }
synth-core = { path = "../synth-core", version = "0.11.40" }
anyhow.workspace = true
thiserror.workspace = true
4 changes: 2 additions & 2 deletions crates/synth-backend-riscv/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ categories.workspace = true
description = "RISC-V encoder, ELF builder, PMP allocator, and bare-metal startup for synth"

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.39" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.39" }
synth-core = { path = "../synth-core", version = "0.11.40" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.40" }
anyhow.workspace = true
thiserror.workspace = true
tracing.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-backend-wasker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ categories.workspace = true
description = "Wasker backend integration for the Synth compiler"

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.39" }
synth-core = { path = "../synth-core", version = "0.11.40" }
anyhow.workspace = true
thiserror.workspace = true
4 changes: 2 additions & 2 deletions crates/synth-backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ default = ["arm-cortex-m"]
arm-cortex-m = ["synth-synthesis"]

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.39" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.39", optional = true }
synth-core = { path = "../synth-core", version = "0.11.40" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.40", optional = true }
anyhow.workspace = true
thiserror.workspace = true
16 changes: 8 additions & 8 deletions crates/synth-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,18 @@ verify = ["synth-verify"]
# Path deps carry `version` so `cargo publish` rewrites them to the
# crates.io coordinate. Bumping the workspace version requires
# updating these in lockstep — see docs/release-process.md.
synth-core = { path = "../synth-core", version = "0.11.39" }
synth-frontend = { path = "../synth-frontend", version = "0.11.39" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.39" }
synth-backend = { path = "../synth-backend", version = "0.11.39" }
synth-core = { path = "../synth-core", version = "0.11.40" }
synth-frontend = { path = "../synth-frontend", version = "0.11.40" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.40" }
synth-backend = { path = "../synth-backend", version = "0.11.40" }

# Optional external backends
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.39", optional = true }
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.39", optional = true }
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.39", optional = true }
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.40", optional = true }
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.40", optional = true }
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.40", optional = true }

# Optional verification (requires z3)
synth-verify = { path = "../synth-verify", version = "0.11.39", optional = true, features = ["z3-solver", "arm"] }
synth-verify = { path = "../synth-verify", version = "0.11.40", optional = true, features = ["z3-solver", "arm"] }

# Optional PulseEngine WASM optimizer
# Uncomment when loom crate is available:
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-frontend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ description = "WASM/WAT parser and module decoder frontend for the Synth compile
# Internal path deps carry an explicit version so `cargo publish`
# can rewrite to the crates.io coordinate. `path` is used for
# in-workspace builds; `version` is what crates.io sees.
synth-core = { path = "../synth-core", version = "0.11.39" }
synth-core = { path = "../synth-core", version = "0.11.40" }

wasmparser.workspace = true
wasm-encoder.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-opt/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ categories.workspace = true
description = "Peephole optimization passes for the Synth compiler"

[dependencies]
synth-cfg = { path = "../synth-cfg", version = "0.11.39" }
synth-cfg = { path = "../synth-cfg", version = "0.11.40" }

[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
Expand Down
6 changes: 3 additions & 3 deletions crates/synth-synthesis/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ categories.workspace = true
description = "WASM-to-ARM instruction selection and peephole optimizer"

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.39" }
synth-cfg = { path = "../synth-cfg", version = "0.11.39" }
synth-opt = { path = "../synth-opt", version = "0.11.39" }
synth-core = { path = "../synth-core", version = "0.11.40" }
synth-cfg = { path = "../synth-cfg", version = "0.11.40" }
synth-opt = { path = "../synth-opt", version = "0.11.40" }
serde.workspace = true
anyhow.workspace = true
thiserror.workspace = true
Expand Down
8 changes: 4 additions & 4 deletions crates/synth-verify/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ arm = ["synth-synthesis"]

[dependencies]
# Core dependencies (always required)
synth-core = { path = "../synth-core", version = "0.11.39" }
synth-cfg = { path = "../synth-cfg", version = "0.11.39" }
synth-opt = { path = "../synth-opt", version = "0.11.39" }
synth-core = { path = "../synth-core", version = "0.11.40" }
synth-cfg = { path = "../synth-cfg", version = "0.11.40" }
synth-opt = { path = "../synth-opt", version = "0.11.40" }

# ARM synthesis (optional, behind 'arm' feature)
synth-synthesis = { path = "../synth-synthesis", version = "0.11.39", optional = true }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.40", optional = true }

# SMT solver for formal verification
z3 = { version = "0.19", features = ["static-link-z3"], optional = true }
Expand Down
Loading