• v0.6.0 1a01870695

    v0.6.0 Stable

    petrbalvin released this 2026-07-11 15:36:52 +00:00 | 274 commits to main since this release

    Calibrated to the Go ABI: register-clobber stops reporting legal code, and
    the encoder learns the legacy SSE moves.

    Changed

    • lint: register-clobber is now calibrated to the Go ABI
      (cmd/compile/abi-internal.md), not the platform ABI. Go's stack-based
      ABI0 has no System V style callee-saved registers — amd64 BX, R12–R15
      and the arm64/riscv64/loong64 scratch sets are caller-saved or permanent
      scratch, and hand-written kernels may clobber them freely. The rule now
      audits only the registers Go fixes across calls: the frame pointer and the
      goroutine pointer (amd64 BP/R14, arm64 R18/R28/R29, riscv64
      X27, loong64 R22), and the goroutine pointer is reported only when the
      function can reach the runtime (is not NOSPLIT or makes a call) — the
      ABI0 transition restores it on those paths, and NOSPLIT call-free leaves
      may use it, exactly as the runtime's own assembly does. Both go-flac
      kernels now lint with zero diagnostics.

    Fixed

    • lint: the liveness analysis took the destination operand to be the
      first operand on arm64, riscv64 and loong64; Plan 9 spelling puts it last
      on every architecture Go supports. The def/use and save/restore
      classification on those architectures was inverted.
    • format: a comment that follows a RET (typically the next function's doc
      comment) is no longer indented as if it were still inside the finished
      function body.

    Added

    • asm: the legacy (non-VEX) SSE moves — MOVOU/MOVO (the Plan 9 names
      for MOVDQU/MOVDQA), MOVUPS/MOVAPS/MOVUPD/MOVAPD and the scalar
      MOVSD/MOVSS — and VMOVDQU64 in the EVEX set. All verified byte for
      byte against the Go assembler.
    Downloads