Skip to content

Commit 4a6b1ef

Browse files
avrabeclaude
andauthored
chore(release): v0.16.0 — AAPCS stack-arg path lowers >8 scalar params/args (#503) (#505)
Pin sweep 0.15.1 -> 0.16.0 across [workspace.package], every path-dep version pin, and MODULE.bazel; CHANGELOG entry. Minor bump: the arm backend now LOWERS a class of functions (>8 scalar i32 params, or a call passing >8 args) it previously skipped — added capability on the shipped --relocatable path, unblocking 2 of 3 falcon helpers. Existing output bit-identical (frozen gate unchanged). The 64-bit stack-param case stays refused (#503 follow-up). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 8e917a2 commit 4a6b1ef

13 files changed

Lines changed: 69 additions & 42 deletions

File tree

CHANGELOG.md

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

88
## [Unreleased]
99

10+
## [0.16.0] - 2026-06-26
11+
12+
**AAPCS stack-argument path: functions with >8 scalar i32 params/args now lower
13+
(#503).** The arm direct selector (`select_with_stack`, the shipped `--relocatable`
14+
path) used to **skip** — emit no code for — any function whose signature needs the
15+
AAPCS stack-argument path beyond a conservative cap: more than 8 scalar params, or
16+
a call passing more than 8 args. On the falcon flight component this dropped 3
17+
reachable helpers (a 10-param, a 25-param, and a 64-bit case) from the ELF, a
18+
completeness gap on the road to self-contained firmware.
19+
20+
The incoming-param homing (`compute_local_layout``incoming_params`, offset
21+
`frame_size+24+(k-4)*4`) and the outgoing store (`emit_stack_args`, offset
22+
`(k-4)*4`) were already **generic in the index** — the `> 8` refusals were
23+
conservative, not load-bearing. This release lifts them and leans on the existing
24+
12-bit `[sp,#imm]` guards as the real Ok-or-Err backstop (a genuinely
25+
frame-too-large function still skips cleanly, never a silent miscompile). Functions
26+
with ≤8 i32 params/args never reach the lifted path, so existing output is
27+
**bit-identical** (frozen byte gate unchanged: control_step `0x00210A55`,
28+
flight_algo `0x07FDF307`).
29+
30+
Scope: the **>8-scalar-i32** case only. The 64-bit stack-param case (AAPCS
31+
pair-alignment + back-fill) stays refused and is tracked as the #503 follow-up;
32+
its diagnostic now cites #503, not the closed #359. Validated by a new
33+
execution differential (`stack-args-503-oracle`): sum10, sum25 (reading param 24),
34+
a 10-arg outgoing call, and a combined incoming+outgoing function all run
35+
bit-identically to wasmtime under unicorn.
36+
1037
## [0.15.1] - 2026-06-24
1138

1239
**Bug-fix: local promotion must never CAUSE a compile failure (#474).** v0.14.0

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.15.1"
30+
version = "0.16.0"
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.15.1",
10+
version = "0.16.0",
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.15.1" }
14+
synth-core = { path = "../synth-core", version = "0.16.0" }
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.15.1" }
15-
synth-synthesis = { path = "../synth-synthesis", version = "0.15.1" }
14+
synth-core = { path = "../synth-core", version = "0.16.0" }
15+
synth-synthesis = { path = "../synth-synthesis", version = "0.16.0" }
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.15.1" }
14+
synth-core = { path = "../synth-core", version = "0.16.0" }
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.15.1" }
19-
synth-synthesis = { path = "../synth-synthesis", version = "0.15.1", optional = true }
18+
synth-core = { path = "../synth-core", version = "0.16.0" }
19+
synth-synthesis = { path = "../synth-synthesis", version = "0.16.0", 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.15.1" }
31-
synth-frontend = { path = "../synth-frontend", version = "0.15.1" }
32-
synth-synthesis = { path = "../synth-synthesis", version = "0.15.1" }
33-
synth-backend = { path = "../synth-backend", version = "0.15.1" }
30+
synth-core = { path = "../synth-core", version = "0.16.0" }
31+
synth-frontend = { path = "../synth-frontend", version = "0.16.0" }
32+
synth-synthesis = { path = "../synth-synthesis", version = "0.16.0" }
33+
synth-backend = { path = "../synth-backend", version = "0.16.0" }
3434

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

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

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

crates/synth-frontend/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ description = "WASM/WAT parser and module decoder frontend for the Synth compile
1414
# Internal path deps carry an explicit version so `cargo publish`
1515
# can rewrite to the crates.io coordinate. `path` is used for
1616
# in-workspace builds; `version` is what crates.io sees.
17-
synth-core = { path = "../synth-core", version = "0.15.1" }
17+
synth-core = { path = "../synth-core", version = "0.16.0" }
1818

1919
wasmparser.workspace = true
2020
wasm-encoder.workspace = true

0 commit comments

Comments
 (0)