feat(asm): the TLS access pair in the toolchain's one-instruction form

Assisted-by: GLM 5.3 Flash
This commit is contained in:
2026-09-21 21:35:15 +02:00
parent 8cfd40aac8
commit 7246b0e002
11 changed files with 180 additions and 21 deletions
+10 -7
View File
@@ -15,13 +15,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
branch optimiser does; symbol immediates (`MOVQ $sym(SB), AX`)
assemble to the toolchain's RIP-relative LEA with an R_PCREL
relocation; negated constant expressions in operands (`ADJSP
$-(REGS - 8)`, the shape the cgo ABI macros write) fold; and `gasm
asm` predefines the `GOARCH_<arch>` and `GOOS_<goos>` macros the go
command passes to `go tool asm`, so GOROOT headers' `#ifdef
GOARCH_amd64` platform blocks (`go_tls.h`'s `get_tls` and friends)
select as intended. The GOROOT corpus measure moves to 261 of 353
files assembling for every target architecture (73.9 %), 87.5 % of
the real-code corpus, from 70.8 % and 82.2 %.
$-(REGS - 8)`, the shape the cgo ABI macros write) fold; the TLS
access pair assembles as the toolchain's one-instruction form (the
bare `MOVQ TLS, r` load nops out and `off(r)(TLS*1)` folds to the
segment-prefixed absolute whose disp32 carries the R_TLSLE
relocation, per-GOOS); and `gasm asm` predefines the `GOARCH_<arch>`
and `GOOS_<goos>` macros the go command passes to `go tool asm`, so
GOROOT headers' `#ifdef GOARCH_amd64` platform blocks (`go_tls.h`'s
`get_tls` and friends) select as intended. The GOROOT corpus measure
moves to 267 of 353 files assembling for every target architecture
(75.6 %), 89.4 % of the real-code corpus, from 70.8 % and 82.2 %.
### Added