-
v0.6.0 Stable
released this
2026-07-11 15:36:52 +00:00 | 274 commits to main since this releaseCalibrated to the Go ABI:
register-clobberstops reporting legal code, and
the encoder learns the legacy SSE moves.Changed
lint:register-clobberis 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 — amd64BX,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 (amd64BP/R14, arm64R18/R28/R29, riscv64
X27, loong64R22), and the goroutine pointer is reported only when the
function can reach the runtime (is notNOSPLITor 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 aRET(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/MOVAPDand the scalar
MOVSD/MOVSS— andVMOVDQU64in the EVEX set. All verified byte for
byte against the Go assembler.
Downloads