Skip to content

Commit ee7317e

Browse files
avrabeclaude
andauthored
chore(release): v0.11.36 — pin sweep + changelog (#315)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent e5d37d7 commit ee7317e

14 files changed

Lines changed: 85 additions & 42 deletions

File tree

.claude/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"enabledPlugins": {
3+
"pulseengine-claude@pulseengine-eu": true
4+
}
5+
}

CHANGELOG.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.11.36] - 2026-06-11
11+
12+
**Four silicon blockers in one tag: the allocator goes default-ON, the mutex
13+
shadow-stack works, and the entire packed-u64 verified-decide pattern is
14+
correct (#209/#237/#311, VCR-RA-001 step 3a).**
15+
16+
- **Range re-allocation DEFAULT-ON** (#309): the value-range re-colouring pass
17+
(wiring step 3a) is on for every compile after gale's on-target gate cleared
18+
it (byte-identical on flat_flight/controller/control_step, cycle-neutral +
19+
smaller where it fires). Opt out with `SYNTH_RANGE_REALLOC=0`; stats via
20+
`SYNTH_REALLOC_STATS=1`.
21+
- **Dead callee-saved-save elimination** (#309): prologue/epilogue save lists
22+
shrink to the callee-saved registers the re-allocated body still touches
23+
(leaf-only, SP-untouched, even-count-padded) — `push {r4-r8,lr}` overhead
24+
(~12 cyc on a 37-cyc leaf) removed where the body packs into low registers.
25+
- **Native-pointer ABI: materialized global slots + used-extent sizing**
26+
(#310, gale #237): every defined global lives at `__synth_globals + idx*4`
27+
in `.data`, initialized from the wasm global section — `global.set` is a
28+
real store (the old promotion DROPPED stores to the shadow-stack pointer),
29+
and the SP global starts at the wasm-ld stack top instead of 0 (the
30+
0xFFFFFFF4 bus fault). The region is sized to the USED extent (data end /
31+
stack top / layout globals / static addends) instead of declared 64 KiB
32+
pages: 131072 B -> ~4 KiB for gale's 830-byte module.
33+
- **i64 pair correctness, all three legs** (#310, gale #311): (1) call results
34+
are pair-tagged (decoder result-type tables -> liveness sees r1, constants
35+
can no longer materialize into the live u64 pair; i64-local inference models
36+
call widths so both halves spill); (2) the encoder's I64SetCond/I64SetCondZ
37+
high-rd MOVS->CMP transmutation is fixed with 32-bit MOV.W/CMP.W — closing
38+
STPA hazard H-CODE-9; (3) the return epilogue moves BOTH halves of an i64
39+
result into r0:r1 (lo-first, safe for every consecutive pair).
40+
41+
Falsification: this release is wrong if gale's staged lanes disagree — the sem
42+
unicorn check (count 0->1) and gmutex oracle on the G474RE are the decisive
43+
gates, plus cycle-neutrality on the rebaselined suite (241/150/151/37). New
44+
committed oracles: u64_unpack(+inlined).wat differentials,
45+
native_pointer_shadow_stack differential, test_311_* + shrink_saves_* tests.
46+
47+
1048
## [0.11.35] - 2026-06-09
1149

1250
**In-place select + spill-cost ranking — the first VCR codegen-quality release

Cargo.lock

Lines changed: 17 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ resolver = "2"
2727
# semver to publish, so the convention now catches up: workspace
2828
# version follows the release tag, bumped pre-tag in the release
2929
# checklist. See docs/release-process.md.
30-
version = "0.11.35"
30+
version = "0.11.36"
3131
edition = "2024"
3232
rust-version = "1.88"
3333
authors = ["PulseEngine Team"]

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module(
77
name = "synth",
88
# Kept in lockstep with [workspace.package] version in Cargo.toml.
99
# Both are bumped pre-tag — see docs/release-process.md.
10-
version = "0.11.35",
10+
version = "0.11.36",
1111
)
1212

1313
# Bazel dependencies

crates/synth-backend-awsm/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ categories.workspace = true
1111
description = "aWsm backend integration for the Synth compiler"
1212

1313
[dependencies]
14-
synth-core = { path = "../synth-core", version = "0.11.35" }
14+
synth-core = { path = "../synth-core", version = "0.11.36" }
1515
anyhow.workspace = true
1616
thiserror.workspace = true

crates/synth-backend-riscv/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ categories.workspace = true
1111
description = "RISC-V encoder, ELF builder, PMP allocator, and bare-metal startup for synth"
1212

1313
[dependencies]
14-
synth-core = { path = "../synth-core", version = "0.11.35" }
15-
synth-synthesis = { path = "../synth-synthesis", version = "0.11.35" }
14+
synth-core = { path = "../synth-core", version = "0.11.36" }
15+
synth-synthesis = { path = "../synth-synthesis", version = "0.11.36" }
1616
anyhow.workspace = true
1717
thiserror.workspace = true
1818
tracing.workspace = true

crates/synth-backend-wasker/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ categories.workspace = true
1111
description = "Wasker backend integration for the Synth compiler"
1212

1313
[dependencies]
14-
synth-core = { path = "../synth-core", version = "0.11.35" }
14+
synth-core = { path = "../synth-core", version = "0.11.36" }
1515
anyhow.workspace = true
1616
thiserror.workspace = true

crates/synth-backend/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ default = ["arm-cortex-m"]
1515
arm-cortex-m = ["synth-synthesis"]
1616

1717
[dependencies]
18-
synth-core = { path = "../synth-core", version = "0.11.35" }
19-
synth-synthesis = { path = "../synth-synthesis", version = "0.11.35", optional = true }
18+
synth-core = { path = "../synth-core", version = "0.11.36" }
19+
synth-synthesis = { path = "../synth-synthesis", version = "0.11.36", optional = true }
2020
anyhow.workspace = true
2121
thiserror.workspace = true

crates/synth-cli/Cargo.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,18 @@ verify = ["synth-verify"]
2727
# Path deps carry `version` so `cargo publish` rewrites them to the
2828
# crates.io coordinate. Bumping the workspace version requires
2929
# updating these in lockstep — see docs/release-process.md.
30-
synth-core = { path = "../synth-core", version = "0.11.35" }
31-
synth-frontend = { path = "../synth-frontend", version = "0.11.35" }
32-
synth-synthesis = { path = "../synth-synthesis", version = "0.11.35" }
33-
synth-backend = { path = "../synth-backend", version = "0.11.35" }
30+
synth-core = { path = "../synth-core", version = "0.11.36" }
31+
synth-frontend = { path = "../synth-frontend", version = "0.11.36" }
32+
synth-synthesis = { path = "../synth-synthesis", version = "0.11.36" }
33+
synth-backend = { path = "../synth-backend", version = "0.11.36" }
3434

3535
# Optional external backends
36-
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.35", optional = true }
37-
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.35", optional = true }
38-
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.35", optional = true }
36+
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.36", optional = true }
37+
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.36", optional = true }
38+
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.36", optional = true }
3939

4040
# Optional verification (requires z3)
41-
synth-verify = { path = "../synth-verify", version = "0.11.35", optional = true, features = ["z3-solver", "arm"] }
41+
synth-verify = { path = "../synth-verify", version = "0.11.36", optional = true, features = ["z3-solver", "arm"] }
4242

4343
# Optional PulseEngine WASM optimizer
4444
# Uncomment when loom crate is available:

0 commit comments

Comments
 (0)