• v0.26.0 Stable

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 253 commits to main since this release

    Universal differential fuzzing: gasm verify --fuzz needs no hand-written
    reference. It parses the // func signature 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 // func comment. 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-truth instead.

    Known limitation

    --fuzz crashes 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-truth for decoders.

    Downloads
  • v0.25.0 Stable

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 254 commits to main since this release

    Universal ground-truth verification: gasm verify --ground-truth assembles
    any .s file with both gasm and go 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 to go 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

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 255 commits to main since this release

    The 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: analyzeO3RangeAVX2 and analyzeO4RangeAVX2 differential tests
      (200 iterations each, same harness as O1/O2/Res).
    • verify: decodeStereo16AVX2 differential test (500 random interleaved
      stereo PCM buffers, both channels compared sample-by-sample).
    Downloads
  • v0.23.0 Stable

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 256 commits to main since this release

    The analyze family and 24-bit PCM decode join the differential suite.

    Added

    • verify: analyzeO2RangeAVX2 and analyzeResRangeAVX2 differential
      tests (200 iterations each, shared harness with O1: zigzag fold, partial
      sum, overflow flag and Len32 histogram).
    • verify: decodeMono24AVX2 differential test (500 random 24-bit PCM
      buffers, sign-extension compared sample-by-sample).
    Downloads
  • v0.22.0 Stable

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 257 commits to main since this release

    The remaining go-flac encoder kernels join the differential suite.

    Added

    • verify: analyzeO1RangeAVX2 differential 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: fastStereoSumsAVX2 differential test (300 random stereo
      frames: the four zigzag-fold entropy sums compared against the scalar
      loop).

    Verified

    • gasm fmt doc-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

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 258 commits to main since this release

    Differential 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) and wideCopyAVX512 (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

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 259 commits to main since this release

    Coverage 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). decodeBlockAVX2 has
      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

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 260 commits to main since this release

    Runtime 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 an ABIReport
      (BPClobbered, R14Clobbered, RedZoneHit).
    • verify: the raw leaveJITCheckedRaw trampoline — 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

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 261 commits to main since this release

    Differential testing: the JIT-assembled go-lz4 decodeBlockAVX2 kernel 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

    petrbalvin released this 2026-08-02 21:11:30 +00:00 | 262 commits to main since this release

    Phase 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

    • verify package: JIT infrastructure — Map copies machine code into a
      W^X memory mapping, Call invokes it through an ABI0 trampoline that
      switches to a prepared stack and back. Load/LoadSource/LoadAST
      parse, assemble and map a .s file in one step; Kernel.CallFunc
      marshals the argument block and returns results.
    • gasm verify subcommand: 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 decodeBlockAVX2 and wideCopyAVX2
      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 verify on both go-lz4 kernels: all functions JIT-load and
      smoke-test clean.
    Downloads