24mm2: full static resolve of all 10 bigkernel stubs (divide/expf/logf/pow/sincos/custom-curve), expf fully decoded, step-14 order fix, ACC slot at 5407c8
This commit is contained in:
@@ -536,3 +536,82 @@ R@5407f8 = единичная нормировка (все 1.0000 в этом п
|
||||
### Статус
|
||||
Канонический путь чтения ПРИМЕНЁННОЙ маски: слот [ctx+0x540678] (кривая
|
||||
банды) — он стабилен и МАТЧИТ АУДИО в deep-фазах (±5%).
|
||||
|
||||
## ДОПОЛНЕНИЕ 24mm2: ПОЛНАЯ РЕЗОЛЮВСЯ ВСЕХ 10 ЯДЕР + ИСПРАВЛЕНИЯ DATAFLOW
|
||||
|
||||
Инструмент: статический резолв цепочки стаб→таблица→L2→IAT-слот по
|
||||
soothe_mem.bin (без live). Стаб = `movsxd rax,[idx@1826159a0]; lea r10,[tbl];
|
||||
jmp [r10+rax*8]`, idx=4, L2=`mov rax,[slot]; jmp rax`.
|
||||
|
||||
### Таблица резолва (исправляет 24jj!)
|
||||
| стаб | таблица | runtime | опознание по константам |
|
||||
|------|---------|---------|------------------------|
|
||||
| 140950 | 182617448 | **18026b820** | exp2/exp DOUBLE (ln2, log2e, 1021.5, 2^27) |
|
||||
| 140980 | 182617488 | **18027c120** | **logf** FLOAT (ряд −½,+⅓,−¼,+⅕,−⅙; ln2 hi/lo; 2^32) |
|
||||
| 1409b0 | 1826174c8 | **18028d1e0** | **powf/log+exp** DOUBLE (ряд log + магия expf вместе) |
|
||||
| 1409e0 | 182617508 | 180296c80 ✓ | **expf** FLOAT — ДЕКОДИРОВАН ПОЛНОСТЬЮ (ниже) |
|
||||
| 140a40 | 182617588 | 1802dc0e0 ✓ | exp-вариант FLOAT c hi/lo сплитами |
|
||||
| 140aa0 | 182617608 | **18030fee0** | **sincos** DOUBLE (1/6,1/120,1/5040; π hi/lo) |
|
||||
| 140ad0 | 182617648 | 180323f20 ✓ | кусочно-табличная DOUBLE (сетка Δ=0.00541521) |
|
||||
| 140b00 | 182617688 | **180367980** | pow/exp DOUBLE (1023/1022, магия 1.5·2^20) |
|
||||
| 140b30 | 1826176c8 | **1803831c0** | кусочно-табличная FLOAT (π/2, π/4, сетка 184.665!) |
|
||||
| 140b60 | 182617708 | 1803a06a0 ✓ | **DIVIDE** FLOAT B/A (rcp+квантование+vpermps-таблицы+полином невязки) |
|
||||
|
||||
**ИСПРАВЛЕНИЕ 24jj**: «140b30/140b60 → общий 1803a06a0» — НЕВЕРНО.
|
||||
FIR-секция вызывает 140b30 = 1803831c0 (табличная кривая), divide только в шаге 9c.
|
||||
|
||||
### ДИСПЕТЧЕР float/double
|
||||
Каждый call-site имеет ПАРУ стабов через `call [181bab008]; test eax,eax; jne`:
|
||||
float-стаб (eax==0) / double-стаб. Дескрипторы type_info СТАТИЧЕСКИ идентичны
|
||||
(оба →182650db8) ⇒ eax=0 ⇒ **double-ядра мертвы на нашем пути**; рендеры
|
||||
идут по float. Double-тела не транскрибируем (отмечено на будущее M8).
|
||||
|
||||
### expf 180296c80 — полная формула (горячий цикл, FMA-точно)
|
||||
```
|
||||
n = fma(log2e_hi=1.4427, x, MAGIC=12582912.0) ; округление до int
|
||||
k = n − MAGIC
|
||||
r = (x − 0.693146·k) − 1.42861e-06·k ; ln2 hi/lo
|
||||
p = (((0.00829172·r + 0.0418735)·r + 0.166674)·r + 0.499994)·r + 1)·r + 1
|
||||
out = bits( (k<<23) + bits(p) ) ; vpaddd сборка
|
||||
guard: |x|>87.3365 → slow-path; head/tail через vmaskmovps+popcnt-маски
|
||||
```
|
||||
Коэф. минимаксные — транскрибировать КАК ЕСТЬ.
|
||||
|
||||
### DIVIDE 1803a06a0 — структура (90%)
|
||||
```
|
||||
A=[rcx], B=[rdx], dst=[r8]; r9d=n
|
||||
q0 = rcp(A); q0 += 2^23-magic (округление); q = q0 & 0xfff00000 ; 12 бит
|
||||
e = (q>>23); idx = q>>20 → vpermps tbl@1821269c0 (127±ε) и @182126a00
|
||||
err = 1 − q·A
|
||||
полином невязки {0.207515, −0.241687, 0.288535, −0.360671, ..., 0.240264, 0.0555119}
|
||||
сборка через магию 1.5·2^20 + vpslld 20
|
||||
результат ≈ B/A с точностью ~0.5 ulp
|
||||
```
|
||||
Таблицы коррекций сдамплены (per-mantissa-top-bits).
|
||||
|
||||
### ИСПРАВЛЕНИЯ DATAFLOW (по fn529fe0.dis, адреса call-sites)
|
||||
1. **Шаг 14 порядок ОБРАТЕН к BLOCKMAP 24ii**: сначала `bigkernel exp IN-PLACE
|
||||
на bands_curve` (52ae0e), ПОТОМ `bands_curve += (−1.0)` (52ae40, конст.
|
||||
1824c4680 через th2270).
|
||||
2. Шаг 9b точно: `vec6f8 += [ctx+54087c] · 0.8` (xmm10=0.8@1824c3e28,
|
||||
множитель виден в asm: mulss xmm6,xmm10 после movss xmm6,[54087c]).
|
||||
3. Шаг 9a: `vec698 *= (xmm12=1.0 − [54087c])` ⇒ zero-fill при дефолтах ✓.
|
||||
4. Шаг 10 combine dc40: аргументы rcx=ACC_i(**таблица указателей @0x5407c8**,
|
||||
НЕ дампилась rendersnap2!), rdx=bands_curve_i(@678+i), r8=vec6f8(@6f8),
|
||||
семантика dst=r8: vec6f8 = bands_curve_i − ACC_i. ACC-слот надо ДОБАВИТЬ
|
||||
в SLOTS rendersnap2 (0x5407c8).
|
||||
5. Шаги 15/16 подтверждены: th2000/th1c40 array-mul; затем rbx=[5406a8]
|
||||
(kWarp) — array-mul на bands_curve.
|
||||
6. Эпилог: скалярная часть из decomp (consumers_out 100-143): mix-веса,
|
||||
`fVar17 = [540874] − expf(DAT_1824c4704=-ln1000)` → bands += f17·[540888].
|
||||
|
||||
### Call-site карта больших ядер (fn529fe0)
|
||||
```
|
||||
52a63a/52a641: 140980(logf-float)/1409b0 — pre-combine #1
|
||||
52ab84/52ab8b: 140b60(divide)/140950 — шаг 9c
|
||||
52acd? : (шаги 10–12 мелкие ILT)
|
||||
52ae0e/52ae15: 1409e0(expf)/140ad0 — шаг 14 нелинейность
|
||||
52b32c/52b336: 1409e0(expf)/140ad0 — шаг 17 (повтор)
|
||||
52b3a0/52b3aa: 140a40(exp-var)/140b00 — пост-17
|
||||
52b716/52b71d: 140b30(кривая-float)/140aa0 — FIR-секция
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user