Oct 25, 2026

Go 1.27 extends its experimental SIMD API to arm64 and WebAssembly

The archsimd package now covers two more architectures beyond amd64, and is enabled by setting GOEXPERIMENT=simd at build time.

The Go team has described the arch-specific SIMD API that ships as an experiment in Go 1.27. Go 1.26 supported amd64 only. Go 1.27 adds arm64 and wasm. The new APIs are enabled by building with GOEXPERIMENT=simd and live in the simd/archsimd package.

The package is the low-level layer that the portable simd package builds on, similar to intrinsics in other languages. Its names are meant to be readable rather than a copy of hardware instruction names, and some hardware details are left to compiler optimizations. For example, an addition followed by a mask is compiled into a single masked instruction where the hardware supports it.

The authors also explain a naming rule: when instructions on different architectures behave differently in edge cases, they get different method names. A table lookup on amd64 is called PermuteOrZero, while the arm64 and wasm equivalent is called LookupOrZero, so differences do not go unnoticed. Methods on amd64 that work within 128-bit lanes carry a Grouped suffix.

Because this is an experiment, the API may still change. Developers who write performance-sensitive code in Go can try it on a test branch and send feedback through the project issue named in the post. Code that needs to run on several architectures should look at the portable simd package first.

Sources

Verified Oct 25, 2026 (official source). gosimdarm64webassembly