From e958b3d3d63859bf7a72beb5d7553a01b496bc52 Mon Sep 17 00:00:00 2001 From: Matiq Date: Wed, 26 Aug 2026 02:06:24 +0300 Subject: [PATCH] 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 --- handoff/BLOCKMAP_529fe0.md | 79 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/handoff/BLOCKMAP_529fe0.md b/handoff/BLOCKMAP_529fe0.md index 5d08fe0..5c75b49 100644 --- a/handoff/BLOCKMAP_529fe0.md +++ b/handoff/BLOCKMAP_529fe0.md @@ -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-секция +```