Go 1.27 extends its experimental SIMD API to arm64 and WebAssembly
The simd/archsimd package gives Go programs low-level vector operations without hand-written assembly, behind GOEXPERIMENT=simd.
The Go team has published an overview of the architecture-specific SIMD API in Go 1.27. Experimental amd64 support began in Go 1.26; the new release adds arm64 and WebAssembly. The API is available in the simd/archsimd package when a program is built with GOEXPERIMENT=simd.
SIMD instructions apply one operation to several values held in a wide register, which can speed up numeric and data-processing code. Until now, using them in Go generally meant writing assembly. The archsimd package exposes them as typed vectors, such as Float32x4 or Int32x8, with operations written as methods, so one method name like Add covers different widths and architectures.
The design avoids mirroring hardware instruction names. Where instructions that look alike behave differently at the edges, the API uses different names, for example PermuteOrZero on amd64 and LookupOrZero on arm64 and wasm. Masks are opaque types, and the compiler turns common mask patterns into single instructions where the hardware allows. The post says amd64 has the widest coverage, arm64 covers NEON with SVE work under way, and matrix extensions are not yet supported.
Because this is an experiment, the API may still change. Developers with performance-critical loops can try it on a test branch and send feedback to the Go team through the project issue linked in the post.
Sources
- Arch-specific SIMD in Goofficial
Verified Oct 24, 2026 (official source). gosimdperformancewebassembly