-
v0.26.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 253 commits to main since this releaseUniversal differential fuzzing:
gasm verify --fuzzneeds no hand-written
reference. It parses the// funcsignature from the assembly source,
generates typed random inputs (slices with random content, ints, pointers to
fixed arrays), JIT-executes BOTH the gasm-assembled and the go-tool-asm-
assembled versions with independent buffer copies, and compares the result
area bit-for-bit.Added
verify:FuzzFunc/ExtractSignatures/parseFuncSig— universal
differential fuzz driven by the conventional// funccomment. Each
version gets its own buffer set (deep copy) so functions that write to
their arguments (histogram increments) don't corrupt the other's input.gasm verify --fuzz [-n N]: runs the differential fuzz for every function
with a parseable signature. Total functions (wideCopy, pack16, decorrelate,
analyze, autocorr) pass; partial functions (decoders that fault on malformed
input) should use--ground-truthinstead.
Known limitation
--fuzzcrashes the process for partial functions (e.g. LZ4 decoders) whose
over-copy paths read past the buffer on random garbage input. Subprocess
isolation (fork per function) is planned. Use--ground-truthfor decoders.Downloads
-
v0.25.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 254 commits to main since this releaseUniversal ground-truth verification:
gasm verify --ground-truthassembles
any.sfile with both gasm andgo tool asm, then compares the machine
code byte-for-byte per function (relocation sites masked). No hand-written
reference needed — the Go toolchain IS the oracle.Added
verify:GroundTruth— shells out togo tool asm, parses the GOOBJ
output (minimal reader: block offsets, nonpkg symbol table, data index)
and returns per-function code bytes.gasm verify --ground-truth: compares gasm's output against the Go
assembler's, reporting MATCH/MISMATCH per function with the first
differing byte. Relocation disp32 fields (static-symbol references the
linker fills) are masked before comparison.- Verified: go-lz4 AVX2 2/2, go-flac AVX2 17/17 functions byte-identical.
Downloads
-
v0.24.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 255 commits to main since this releaseThe full analyze family and stereo PCM decode are now differentially tested.
15 of 17 go-flac AVX2 kernels have bit-for-bit differential coverage; the
two remaining (autocorrAVX2 — FMA reassociation, lpcResidualAVX2 — complex
multi-arg) are deferred.Added
verify:analyzeO3RangeAVX2andanalyzeO4RangeAVX2differential tests
(200 iterations each, same harness as O1/O2/Res).verify:decodeStereo16AVX2differential test (500 random interleaved
stereo PCM buffers, both channels compared sample-by-sample).
Downloads
-
v0.23.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 256 commits to main since this releaseThe analyze family and 24-bit PCM decode join the differential suite.
Added
verify:analyzeO2RangeAVX2andanalyzeResRangeAVX2differential
tests (200 iterations each, shared harness with O1: zigzag fold, partial
sum, overflow flag and Len32 histogram).verify:decodeMono24AVX2differential test (500 random 24-bit PCM
buffers, sign-extension compared sample-by-sample).
Downloads
-
v0.22.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 257 commits to main since this releaseThe remaining go-flac encoder kernels join the differential suite.
Added
verify:analyzeO1RangeAVX2differential test (300 random partitions:
zigzag fold, partial sum, overflow flag and the 32-bin Len32 histogram
compared element-by-element against the portable Go reference).verify:fastStereoSumsAVX2differential test (300 random stereo
frames: the four zigzag-fold entropy sums compared against the scalar
loop).
Verified
gasm fmtdoc-comment indentation confirmed correct: comments before
every TEXT are at column 0 (the RET-detection logic handles multi-exit
functions).
Downloads
-
v0.21.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 258 commits to main since this releaseDifferential testing extended to all four production kernels and the CLI
exposes the full dynamic-analysis toolkit.Added
verify: go-flac AVX2 differential tests —decodeMono16AVX2(500
random PCM buffers),pack16AVX2(500 random int32→int16 packings) and
all four decorrelation kernels (200 iterations each: left-side, side-right,
mid-side, interleave) compared bit-for-bit against the portable Go
references.verify: go-lz4 AVX-512 differential tests —decodeBlockAVX512(3 000
fuzzed LZ4 blocks + known answers) andwideCopyAVX512(0–1024 bytes)
against the same portable oracle as the AVX2 suite.gasm verify --abi: runs each NOSPLIT function with sentinel registers
and a red-zone canary, reporting violations.gasm verify --profile: lists the static basic-block count per function.
Downloads
-
v0.20.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 259 commits to main since this releaseCoverage profiling: the third pillar of Phase 3. Static basic-block
enumeration from the assembler's label map, combined with multi-input path
diversity measurement — how many observationally distinct execution paths a
test corpus exercises.Added
verify:Kernel.Blocks/Kernel.BlockCount— enumerate basic blocks
from the assembler's local-label map (every jump target is a block
boundary; the function entry is always a block).decodeBlockAVX2has
27 blocks.verify:Kernel.ProfilePaths— run the function with a corpus of
argument blocks and collect distinct output fingerprints (the result
words); reports path diversity as a lower bound on code coverage.
Note
INT3-based per-block hit counting was prototyped but deferred: Go's runtime
signal management (sigaltstack, handler re-installation) makes raw
rt_sigaction handlers fragile in a Go process. The static + path-diversity
approach delivers the project's goal (proving the SIMD path and tail handling
execute) without fighting the runtime.Downloads
-
v0.19.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 260 commits to main since this releaseRuntime ABI checks: the second pillar of Phase 3. The JIT trampoline now
has an ABI-checking variant that sets sentinels in the callee-saved registers
(BP, R14) before entering the assembled function and verifies they survive on
return, plus a red-zone canary (128 bytes below SP filled with 0xA5) that
detects any illegal write below the stack pointer.Added
verify:CallChecked/Kernel.CallFuncChecked— ABI-checking JIT call
with sentinel registers and red-zone canary; returns anABIReport
(BPClobbered, R14Clobbered, RedZoneHit).verify: the rawleaveJITCheckedRawtrampoline — a TEXT symbol with no
ABIInternal wrapper (address obtained via GLOBL/DATA), so the JIT
function's RET lands directly in the check code and sees the registers
exactly as the function left them.- Tests: deliberate BP/R14 clobberers detected; both go-lz4 kernels
confirmed ABI-clean (BP preserved, R14 preserved, red zone intact).
Downloads
-
v0.18.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 261 commits to main since this releaseDifferential testing: the JIT-assembled go-lz4
decodeBlockAVX2kernel is
fuzzed against a portable Go reference — 5 000 valid LZ4 blocks compared
bit-for-bit, plus 2 000 hostile (random garbage) inputs with matching error
codes. This is the automated form of the project's bit-identical contract.Added
verify: differential fuzz tests — a random LZ4 block generator produces
valid blocks (literals, overlapping matches, extension bytes) and the
JIT-assembled kernel's output is compared byte-for-byte against a portable
Go decoder; a hostile-input suite confirms error-code agreement on random
garbage (no crashes, same classification).
Downloads
-
v0.17.0 Stable
released this
2026-08-02 21:11:30 +00:00 | 262 commits to main since this releasePhase 3 begins: dynamic analysis. A JIT execution substrate that assembles
Plan 9 amd64 kernels into executable memory and calls them directly — pure Go
(stdlib only,syscall.Mmap+ an assembly trampoline), no cgo, no external
toolchain.Added
verifypackage: JIT infrastructure —Mapcopies machine code into a
W^X memory mapping,Callinvokes it through an ABI0 trampoline that
switches to a prepared stack and back.Load/LoadSource/LoadAST
parse, assemble and map a.sfile in one step;Kernel.CallFunc
marshals the argument block and returns results.gasm verifysubcommand: assembles a file, JIT-loads it and reports the
available functions; with-smoke, calls each NOSPLIT function with
zeroed arguments to confirm the trampoline works end-to-end.- Integration tests: the go-lz4
decodeBlockAVX2andwideCopyAVX2
kernels (699 and 146 bytes) assemble, map and execute correctly —
known-answer LZ4 blocks decode bit-for-bit, wide copies of 0–1024 bytes
match, malformed input returns the correct error codes.
Verified
just test(race, 84.6 % total coverage, verify 82.2 %).gasm verifyon both go-lz4 kernels: all functions JIT-load and
smoke-test clean.
Downloads