From 9629897202dae3bd0c7f8b9a8393751d53667a49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Balv=C3=ADn?= Date: Sun, 20 Sep 2026 06:45:03 +0200 Subject: [PATCH] docs: changelog and readme for the instruction wave and the honest corpus rate Assisted-by: GLM 5.3 Flash --- CHANGELOG.md | 23 +++++++++++++++++++++++ README.md | 5 +++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d60381b..49ccb91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- **The GOROOT instruction wave, part 1.** The encoder now covers the + instruction families GOROOT's real code uses that gasm lacked, + byte-verified against `go tool asm`: on amd64 the carry ALU, the + atomics (CMPXCHG, XADD, XCHG), AES-NI, SHA-1/256, PCLMULQDQ, CRC32, + GFNI, ADX, BMI, the string primitives, the system set (CPUID, RDTSC, + SYSCALL, fences, MXCSR) and the SSE/AVX/EVEX gaps; on arm64 the pair + loads and stores (LDP/STP), acquire/release and LSE atomics, AES and + SHA, the system operations, the bit ops and the NEON slice including + structure loads and the literal-pool moves; on riscv64 the RV64A AMO + family with aq/rl ordering, the Zbb pseudos with their RVC + compressions, the FMA forms and the RVV slice with `vsetvli`/ + `vsetivli`; on loong64 the AM atomics with acquire/release forms, the + LSX/LASX slice, the `VMOVQ`/`XVMOVQ` transfer family and FSEL. + Also fixed on the way: arm64 `CASD`/`CASW` lacked an opcode bit, and + riscv64 `VSETVLI` with an immediate length now canonicalises to + `vsetivli` as the toolchain does. +- **The corpus audit measures honestly.** Files named for Go ports gasm + does not target (arm, 386, s390x, ...) are no longer attempted for the + four supported architectures (no supported build compiles them), and + the headline rate is reported over attemptable files: 136 of 433 on + the full corpus (31.4 %), 135 of 383 on real code (35.2 %), from the + 127 that the previous release measured. The probe battery that + decides encodability gained the operand shapes the new families use. - ## [0.34.0] - 2026-09-20 diff --git a/README.md b/README.md index 072b354..3895d41 100644 --- a/README.md +++ b/README.md @@ -124,8 +124,9 @@ can emit today is narrower, and a recognised but unencodable instruction is reported as an explicit error, never as a wrong byte. The same measurement runs over GOROOT's whole assembly corpus: -`gasm audit-instructions --corpus` reports 127 of 627 files (20.3 %) -assembling for every target architecture today, with the top failure +`gasm audit-instructions --corpus` reports 136 of 433 attemptable files +(31.4 %) assembling for every target architecture today (files named for +other Go ports are counted but never attempted), with the top failure reasons per architecture; the number moves with every release. ### Validation status