Skip to content

t27b v0.1.0 -- the native AArch64 backend, shipped with the signed corpus receipt of this exact binary

Choose a tag to compare

@gHashTag gHashTag released this 08 Oct 05:57
2e06cef

t27b is the native AArch64 backend for t27: .t27 to AArch64 machine code, with an in-process JIT test runner and a Mach-O object emitter, and no LLVM. This is its first release. The binary attached here is the exact binary the t27b lab ran the whole corpus with, and the numbers below come from the lab's signed receipt of that run.

Tag: t27b-v0.1.0 on master 2e06cef59. Tracking issue: #7701. Epics: #6063 (coverage) and #6488 (the compiler sieve, filter C10).

Coverage at this commit (from the signed receipt)

The reference path is t27c gen followed by zig test (Zig 0.16). It passes 1099 of the 1584 corpus specs. On those 1099 specs t27b:

specs
passes, with runtime checks executed 899 (81.8%)
passes vacuously (no runtime assert ran) 150
is blocked on a construct it refuses by name 50
disagrees with the reference, test by test, over 1064 compared files 0
has a JIT-versus-interpreter mismatch 0

A refused construct is a counted blocker, never a skipped test. The full per-file results are in t27b-0.1.0-corpus-run.json.

Verify it yourself

  1. The binary is the one that ran. sha256sum t27b-0.1.0-aarch64-linux gives
    0b43ce8190d39412e9c5946d71eb88e5a753b685235fa68feda03bc23c0d9e91.
    This equals the t27b_sha256 field of t27b-0.1.0-corpus-receipt.json.
  2. The receipt is signed.
    • It is signed with ed25519 under the domain line t27-corpus-receipt-v1, by key a05db80f53c317f6. The public key is .trinity/keys/a05db80f53c317f6.pub.
    • From a t27 checkout at this tag, t27c corpus-receipt compare R R (with R the receipt) prints EQUIVALENT and exits 0. It checks the signature, and checks that every leaf rehashes to its signed root: inputs, verdicts and outputs.
    • The trust level is NAMED: whoever holds the t27b lab's key signed these bytes. The signature is not rooted in hardware.
  3. Compare against later runs. Since #7686, the lab signs a receipt for every master run, and on request for a PR head. t27c corpus-receipt compare BASE HEAD returns:
    • 0, EQUIVALENT;
    • 3, IMPROVED_ONLY;
    • 4, NEUTRAL;
    • 1, REGRESSED: a file left pass, a new defect appeared, or the reference moved;
    • 2, REFUSED.

What changed since the coverage epic began this week

Every lowering decision below lives in a .t27 plan spec, which t27c gen-rust turns into Rust (owner rule "Only t27"). Hand-written glue stays under 40 lines per file and 80 per PR.

  • #7614: @abs, @max, @min, std.math.pi and e (builtin_plan.t27).
  • #7627: @intCast with an integer result type, as a checked cast (int_cast_plan.t27).
  • #7645 and #7648: run-time @exp and @log, calling compiler_rt ports written in t27. Results are bit-exact against the reference (libm_plan.t27, libm.t27).
  • #7657: integer constants wider than 64 bits, up to u1024, folded at compile time (wide_plan.t27).
  • #7660, #7670: the last JIT-versus-interpreter mismatch is gone.
    • The interpreter was right: gen_canvas returned a slice of a dead frame.
    • t27b now refuses such a return, and the port was fixed so the caller owns the storage.
  • #7671: a stale refusal was removed. t27b's own macho.t27 and census.t27 now pass.
  • #7679: the blocker set-cover and the reference-cache hash moved from hand Rust into blockers.t27, the latest step of the port #6198.
  • #7686: the lane verdicts for signed base/head receipts.

Not in this release

  • No macOS binary. The JIT runs on macOS (MAP_JIT); build it with cargo build --release -p t27b.
  • No crates.io package. t27b mounts the t27c front end (bootstrap/src/compiler.rs) by path.
  • AArch64 only. On x86_64 Linux, run the binary under qemu-aarch64, as the lab does.
  • Blocked constructs. About 50 specs the reference passes are still blocked; #6063 tracks them, one plan spec per family.