The Wire · Showcase
LOONG64 WINS BIG: GO SHRINKS BY 7128 INSTRUCTIONS
By RepoJournal · Filed · About Go
The Go team is rewriting the loong64 backend for performance, and the first patch alone removes 7128 instructions from the go binary.
A critical compiler fix for loong64 [1] moves extension-removal rules to late lower, preventing high-bit corruption and trimming 7,128 instructions from the go binary. Meanwhile, new LSX assembly for AES block operations [2] and CTR mode [3] bring hardware-free crypto acceleration to LoongArch, with CTR mode showing a 24.29% speedup on the Loongson 3C6000. CRC32 also gets a boost [4], with unrolled loops improving performance by 20.95%. On the language side, the flag package gains All iterators and Flag.IsSet [5], a long-awaited ergonomic improvement. The website desk is clarifying Go 1.27's jsonv2 GOEXPERIMENT changes [6] and retroactively documenting the removal of the tlkskyber GODEBUG flag [7]. Over on pkgsite, Jonathan Amsterdam is building a type equality engine [8] that will power breaking-change detection, now supporting functions [9], structs [10], and generics [11]. The release notes also promise changes to jsonv2 that "demonstrate these changes happen" for users upgrading to Go 1.27 [6]. Finally, modfile docs get fixed [12], pointing Cleanup to the right method.
One email a day. Unsubscribe in one click.
Keep up with Go in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Upgrade the Go toolchain to include the loong64 compiler fix (CL 568616) before your next cross-compile for loong64 golang/go [immediate]
- → Watch the pkgsite breakings work for early access to breaking-change detection in pkg.go.dev golang/pkgsite [monitor]
- → Review the jsonv2 GOEXPERIMENT changes if you're using it, they're documented for Go 1.27 golang/website [plan]
References
- [1] cmd/compile: fix sign/zero-extension removal on loong64 golang/go
- [2] crypto/internal/fips140/aes: add loong64 LSX assembly for AES block operations golang/go
- [3] crypto/internal/fips140/aes: add loong64 LSX assembly for CTR mode golang/go
- [4] hash/crc32: unroll loong64 CRC32 update loops to 32 bytes per iteration golang/go
- [5] flag: add All iterators and Flag.IsSet golang/go
- [6] _content/doc/go1.27: mention some changes to GOEXPERIMENT=jsonv2 in the release notes golang/website
- [7] doc: retro-actively document removal of tlkskyber GODEBUG flag golang/website
- [8] internal/breakings: type strings golang/pkgsite
- [9] internal/breakings: type strings for functions golang/pkgsite
- [10] internal/breakings: type strings for structs golang/pkgsite
- [11] internal/breakings: type string for generic functions golang/pkgsite
- [12] modfile: fix Cleanup and DropTool documentation golang/mod