P3.3: final kernels use own vectorized sin/cos (SVML-like poly+exp, ln2=0.693147) not twiddle table for big-N; poly constants captured from rodata

This commit is contained in:
2026-08-20 05:56:12 +03:00
parent 2a7b88e704
commit 7bbe7cce05
+13
View File
@@ -100,5 +100,18 @@ Full bit-exact FFT = plan generator (0x2f980 split-radix index algebra) + runtim
(3-level tables) + 6 final kernels (each 0x800-0x1200 bytes of vectorized split-radix butterfly) (3-level tables) + 6 final kernels (each 0x800-0x1200 bytes of vectorized split-radix butterfly)
+ twiddle. This is the P3 2-4 week body. Architecture fully mapped; transcription not yet done. + twiddle. This is the P3 2-4 week body. Architecture fully mapped; transcription not yet done.
### Final kernel 0x1802a24c0 — own vectorized sin/cos, NOT twiddle table
The big-N kernels compute trig ON THE FLY via an AVX polynomial (vfmadd231ps/213ps chain) with
range reduction done by float-bit tricks (vpaddd/vpsubd/vpsrad $0x17 = 23-bit shift = exponent
extract, vpcmpgtd, vblendvps). Polynomial constants (rodata, float, broadcast x8):
0x181f81fa0 = 0.333366 0x181f81fc0 = -0.250047 0x181f81fe0 = 0.198225
0x181f82000 = -0.164625 0x181f82020 = 0.169649 0x181f82040 = -0.151772
0x181f82100 = 0.666667 0x181f821c0 = 0.693147 (= ln 2) 0x181f822c0 = 0.75
(0.693147 = ln 2 ⇒ exp-based sin/cos, SVML-like vector math library.)
=> Small-N path uses the twiddle sin-table (0x39b00); big-N path uses this own polynomial.
Transcribing this bit-exactly = reimplementing a vector math sin/cos (Cody-Waite + poly + exp),
plus the split-radix butterfly + integer reorder — the multi-week P3 body.