std :: dsp::fft_core
Macro FFT_SQRT1_2
#define FFT_SQRT1_2 0.70710678118654752440Radix-8: the radix-2 stages of length 2m, 4m and 8m fused (m >= 4), so each group of eight values is loaded and stored once instead of three times (radix-8 passes as in SPIRAL/FFTE's 8^q 16^r factorizations). For q in [q0, q1) (n/8 groups per pass), block q / m, k = q % m:
a_r = d[base + k + r m], r = 0..7
stage 2m: (a0,a1) (a2,a3) (a4,a5) (a6,a7) twiddle W2m^k
stage 4m: (b0,b2) (b1,b3) (b4,b6) (b5,b7) W4m^k, W4m^k * (-i)
stage 8m: (c0,c4) (c1,c5) (c2,c6) (c3,c7) W8m^k * W8^r
with W8^1 = (1 - i)/sqrt2, W8^2 = -i, W8^3 = -(1 + i)/sqrt2 (conjugated for the inverse). 'wide' (a constant per ISA build) picks four complex values per vector (FFT_V8) or two (FFT_V4): two keep the 8 inputs of a double AVX2 build in 16 registers.