Repository navigation
Releases
v0.23.2
What's Changed
- amd64: add AVX512DQ feature probe by @tannevaled in #43
Full Changelog: v0.23.1...v0.23.2
v0.23.1
What's Changed
- ci: move the Go pin from 1.27.2 to 1.27.3 by @tannevaled in #38
- go.mod: raise the go directive from 1.27.1 to 1.27.3 by @tannevaled in #40
- amd64: add FamilyProbe (CPUID displayed family) by @tannevaled in #42
Full Changelog: v0.23.0...v0.23.1
v0.23.0
What's Changed
- ci: install qemu-user in all four asm jobs, and resolve the emulator once each by @tannevaled in #34
- goasm-patches: record that CL 846285 was merged by @tannevaled in #36
- loong64: add the float32 fused multiply-adds (VFMADDF, XVFMADDF) by @tannevaled in #37
Full Changelog: v0.22.0...v0.23.0
v0.22.0
v0.21.0
loong64: Builder.CSRRD, CSRWR and CSRXCHG (privileged CSR access, emitted as WORDs until go.dev/cl/853786 lands). internal/gap: NotMask/NotBits and Insn.Matches. #32
v0.20.0
fft/amd64: radix-32 builders with fused multiply-adds, for go-fft's opt-in FMA plans (#30).
SplitR32: the split-layout radix-32 pass at 256 and 512 bits, the values between its two stages kept in the output's slots.SplitR32InFrame: the same pass with those values in its own 2 KB (4 KB) frame, not NOSPLIT.LastR32: the interleaved final radix-32 pass, two blocks per YMM or four per ZMM register.Consts.R32andSplitConsts.R32locate their constants rows; every existing offset, and so every file go-fft already generates, is unchanged.
All three build FMA kernels only (Kernels.FMA) and are bit-identical to go-fft's bfly32FMA Go pass, which go-fft's tests check on Zen 3 and Cascade Lake.
v0.19.0
v0.18.0
v0.17.0
FFT kernel builders (#28)
go-fft's SIMD kernel generators now live here, one package per architecture:
-
fft/amd64:- Stockham passes of radix 2, 3, 4, 5, 8, 9, 10, 12, 15, 16 and 20 (AVX2), and radix 2, 4 and 8 at 512 bits;
- final, batched, strided and run-writing passes;
- the split layouts at 256 and 512 bits;
- float32 passes;
- the real-FFT untangle and retangle;
- SSE2 and AVX2 complex products;
- the two- and three-pass stack-frame trampolines and their address table.
Kernels.FMAbuilds the fused twins: the twiddle product, radix 8's √2/2, and the radix-9 and -16 internal twiddles. -
fft/arm64:- NEON passes of radix 2, 3, 4, 5 and 8 in float64 and float32: pass, final pass, batched pass, block-split layout;
- the untangle and retangle;
- the complex product.
-
fft/riscv64andfft/s390x: the RVV and vector-facility complex products.
Each builder appends one TEXT block to an emit.File. The caller supplies:
- the symbol;
- the constants-table offsets (
Consts,SplitConsts); - on amd64, FMA.
The arguments, registers and frame are the kernel's own, and are documented on each builder.
Verification:
- Every file go-fft generates is pinned, by SHA-256, to the bytes go-fft commits. That covers go-fft main's 21
.sfiles and the 3 FMA files of its Round 41 branch. - Golden files pin one or two kernels of every builder.
- Every kernel goes through the Go assembler.
examples/fft/<arch>runs the complex products and a 16-point FFT on each architecture.- The library gate covers
./fft/...at 100%.
No change to the existing packages.
v0.16.0
arm64: single-precision vector float arithmetic on the .4S arrangement (#19). VFADD4S, VFSUB4S, VFMUL4S, VFMLA4S, VFMLS4S and VFNEG4S are emitted as mnemonics, which Go 1.27's assembler encodes, and checked against golden encodings. They are additive, next to the existing .2D helpers. They are used by go-fft's float32 NEON kernels.