Phase5/step3 partial: FFT-conv loop mapped; freq-axis const offline; 0x540658 static-invisible
This commit is contained in:
@@ -160,6 +160,39 @@
|
|||||||
Остаток 0.7 dB (Q=0.1) = LUT-колено 0.574 -> нужен FFT-уровень (0x535a70 + окно 0x540658 + freq-axis
|
Остаток 0.7 dB (Q=0.1) = LUT-колено 0.574 -> нужен FFT-уровень (0x535a70 + окно 0x540658 + freq-axis
|
||||||
0x540698), см. SESSION_HANDOFF §5-6.
|
0x540698), см. SESSION_HANDOFF §5-6.
|
||||||
|
|
||||||
|
## ============ UPDATE 2026-08-18c: FFT-CONV LOOP FULLY MAPPED (Phase 5 step 3 partial) ============
|
||||||
|
Per-band FFT-conv loop disasm: /tmp/opencode/f_52b570.dis (0x52b550-0x52b8b5 == consumers :1195-1271).
|
||||||
|
|
||||||
|
### What 0x535a70 / helpers ARE (they're dispatchers, real kernels in base-CRT):
|
||||||
|
- 0x535a70 = FFT fwd dispatcher -> 0x140a10 (scalar) / 0x140a70 (vector). NOT hand-transcribable, unnecessary.
|
||||||
|
- 0x540548/0x540550/0x540598 = FFT-PLAN table ptrs (plan 0x540530; +0x18/+0x20/+0x68), NOT windows.
|
||||||
|
Plan built by FUN_18052dc30(param_1+0x540530, [0x64]=FFT size, 0x540868). 0x540534 = plan+0x4 = N/2 usage.
|
||||||
|
- Per-band ops (dispatch variants collapsed): iVar20=N/2; r14=FIR(0x540668);
|
||||||
|
1) 0x535a70(fftctx 0x540628, mask, N/2+1) forward FFT of mask
|
||||||
|
2) 0x2210(0x540628, 0, r14, N/2+1) inv FFT into FIR
|
||||||
|
3) fwd FFT (0x2180/0x1bb0) ; zero @[N] ; 0x52d920(r14+4, xmm13, N/2-1)=fill LOW half;
|
||||||
|
0x52db50(r14+4+N/2, xmm9, N/2-1)=fill HIGH half; inv FFT (0x1a90/0x19d0)
|
||||||
|
4) 0x140b30/0x140aa0(r14,r14,N/2+1) in-place complex op
|
||||||
|
5) fwd FFT ; zero @[N] ; 0x52d990(r14, 0x540658+N/2, N/2) = FIR *= WINDOW 0x540658;
|
||||||
|
0x52db50(r14+N/2, xmm9, N/2) = fill HIGH half; inv FFT
|
||||||
|
6) FIR[0]=1.0f, FIR[1]=0; if 0x540890!=0: complex ops (0x1880/0x1ca0) + FIR *= 0x540888 over 2*N;
|
||||||
|
copy FIR->out (0x1df0/0x1f70).
|
||||||
|
|
||||||
|
### Key unknowns (static analysis exhausted):
|
||||||
|
- **0x540658 window content**: ONLY 1 direct ref in whole dump (the read at 0x52b771). Not allocated in
|
||||||
|
consumers_out (:119-135 alloc 668/698/6a8/6b8/6c8/6d8/6e8/6f8/708/718/798), NOT set by 52dc30 (plan tables
|
||||||
|
only at +0x18/0x20/0x48/0x58/0x68). Written only indirectly -> needs runtime capture OR plan-internal
|
||||||
|
region. If 0x540658 is freq-shaped, it is the source of warp^3.14 (~π) & LUT-knee 0.574.
|
||||||
|
- xmm13/xmm9 fills = config constants from FUN_180529fe0 prologue (offline), unknown values.
|
||||||
|
- FFT size N = 2*0x540534; 0x1a0 = pow(2,floor(log2(SR/44100)))*412 (SR 44.1k -> 412); 0x540868=0x1a0*iVar9*8.
|
||||||
|
|
||||||
|
### Conclusions:
|
||||||
|
- freq-axis NOT the boost source (offline const). FFT tables NOT windows. The whole freq-shaping funnels
|
||||||
|
through 0x540658 window in step 5 + the offline fill constants. To resolve: runtime capture of 0x540658
|
||||||
|
(needs the plugin under a debugger) OR empirically back out its response from the model residual.
|
||||||
|
- Recommend: since bridge already at 0.236 and FFT window content is static-invisible, next high-value move =
|
||||||
|
full pipeline render (step 5) rather than more static FFT mining.
|
||||||
|
|
||||||
## ============ UPDATE 2026-08-18b: FREQ-AXIS 0x540698 BUILDER (decomp :21735-21757) ============
|
## ============ UPDATE 2026-08-18b: FREQ-AXIS 0x540698 BUILDER (decomp :21735-21757) ============
|
||||||
- Allocation+fill of freq-axis 0x540698 lives in the SAME function as the 0x540668 FIR window alloc
|
- Allocation+fill of freq-axis 0x540698 lives in the SAME function as the 0x540668 FIR window alloc
|
||||||
(decomp_funs.txt :21735-21757, the builder calls FUN_18052e190(param_1+0x540698, count=0x54086c)).
|
(decomp_funs.txt :21735-21757, the builder calls FUN_18052e190(param_1+0x540698, count=0x54086c)).
|
||||||
|
|||||||
Reference in New Issue
Block a user