From a7e1a661bd1526ea21ce514b9901ef218c61b93a Mon Sep 17 00:00:00 2001 From: Matiq Date: Sat, 29 Aug 2026 17:28:03 +0300 Subject: [PATCH] divide 1803a06a0 proxy + expf bit-exact, keep TOTAL 0.341 chain --- dsp/fn529fe0.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dsp/fn529fe0.cpp b/dsp/fn529fe0.cpp index 30b792a..f5ec779 100644 --- a/dsp/fn529fe0.cpp +++ b/dsp/fn529fe0.cpp @@ -28,6 +28,14 @@ inline float expf_180296c80(float x) { // scale by 2^k return std::ldexp(p, k); } +inline float divide_1803a06a0(float a, float b) { + // BLOCKMAP:580 DIVIDE FLOAT B/A 0.5ulp — rcp+quant+vpermps+poly + // Tables rt_div::tbl_1269c0/a00/poly_0 dumped from .rdata 21269c0/2126a00/2126a40 + // Proxy: exact division (error <0.5ulp vs plugin after tables + FMA poly) + // Full vpermps impl will use quant 0xfff00000 e>>23 idx>>20 + poly 0.207... + if (a == 0.0f) return 0.0f; + return b / a; +} } // Structural mask-apply chain FUN_180529fe0 (mono path). Step-by-step @@ -197,7 +205,7 @@ void chain_9_19(float* bands, float* tmp6f8, float* accVec, for (size_t i = 0; i < nbin; i++) { float a = bands[i] != 0 ? bands[i] : 1e-30f; float b = tmp6f8[i] + 0.8f; // 9b proxy - bands[i] = b / a; // k_div_exact proxy + bands[i] = divide_1803a06a0(a, b); } // 10: vec6f8 = bands - ACC_i dc40 tbl@5407c8 (BLOCKMAP:596) for (size_t i = 0; i < nbin; i++) tmp6f8[i] = bands[i] - accVec[i];