diff --git a/notes_giant_fft.md b/notes_giant_fft.md index 9d2c9e8..d6494d1 100644 --- a/notes_giant_fft.md +++ b/notes_giant_fft.md @@ -86,4 +86,19 @@ then jump through tables: vector 0x182617588 = {0x180141440, ..., 0x180141560} ([4]=0x1801414c0) These are the per-size/per-type stage kernels (0x1801413xx/1415xx family). +### FOURTH level — final kernels (runtime-filled pointer tables): +0x180141400 = jmp *[0x1826181d8]; the tables hold (at capture): + 0x1826181d8=0x1802a24c0, 0x182618200=0x1802a4d80, 0x182618228=0x1802a7540, + 0x182618250=0x1802b4540, 0x182618278=0x1802c1540, 0x1826182a0=0x1802ce4a0. +These 6 are the final split-radix FFT kernels (stack frames 0x328/0x350/0x7c8/0x7c8/0x7f8/0xd48). +- **CRITICAL for bit-exact**: kernel 0x1802a24c0 prologue sets MXCSR rounding mode (vstmxcsr/ + vldmxcsr, round-to-nearest 0x1f80) AND x87 control word (fnstcw/fldcw) before the FP loop, + then restores. So the transform runs under an explicitly-forced rounding mode. + +### STATUS / scope +Full bit-exact FFT = plan generator (0x2f980 split-radix index algebra) + runtime dispatch +(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. + +