// // logf from 0x180127880 to 0x180127c76 (1014 bytes) // // 8 xrefs: // > sub_18001CFD0 @ 0x18001d61c // > sub_18004DE50 @ 0x18004dec0 // > sub_1800DBF50 @ 0x1800dc01e // > sub_1800DBF50 @ 0x1800dc069 // > sub_1800DC760 @ 0x1800dc7cf // > sub_1800DC760 @ 0x1800dc827 // > sub_1800DC760 @ 0x1800dc869 // > @ 0x180202a08 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // // local variable allocation has failed, the output may be wrong! float __cdecl logf(float X) { __int64 v1; // rcx __m128i v2; // xmm3 unsigned int v3; // eax float v4; // xmm5_4 __m128i v5; // xmm2 unsigned int v6; // eax __m128i v7; // xmm1 unsigned int v8; // eax float v9; // xmm1_4 float v10; // xmm0_4 float v11; // xmm1_4 __m128i v12; // xmm2 __m128i v13; // xmm5 if ( dword_1801F4D54 ) { __asm { vmovaps xmm4, cs:xmmword_180170CA0 } __asm { vpsrld xmm3, xmm0, 17h vmovd eax, xmm0 vpsubd xmm3, xmm3, cs:xmmword_180170CF0 vcvtdq2ps xmm5, xmm3 vpand xmm1, xmm0, xmm4 vcomiss xmm1, xmm4 } if ( _EAX == 2139095040 ) return X; if ( _EAX == -8388608 ) { __asm { vmovaps xmm1, cs:xmmword_180170CC0 } } else { _EAX = _EAX | 0x400000; __asm { vmovd xmm1, eax } } return logf_special(v1); } v2 = _mm_srli_epi32(*(__m128i *)&X, 0x17u); v3 = _mm_cvtsi128_si32(*(__m128i *)&X); v1 = v3; LODWORD(v1) = v3 & 0x7FFFFFFF; if ( (v3 & 0x7FFFFFFF) >= 0x7F800000 ) { if ( v3 == 2139095040 ) return X; if ( v3 != -8388608 ) { LODWORD(X) = v3 | 0x400000; return X; } return logf_special(v1); } v4 = _mm_cvtepi32_ps(_mm_sub_epi32(v2, (__m128i)xmmword_180170CF0)).m128_f32[0]; if ( X <= 0.0 ) return logf_special(v1); v5 = _mm_and_si128(*(__m128i *)&X, (__m128i)xmmword_180170CE0); if ( v4 == -127.0 ) { v12 = _mm_or_si128(v5, (__m128i)xmmword_180170C70); *(float *)v12.m128i_i32 = *(float *)v12.m128i_i32 - 1.0; v13 = v12; v5 = _mm_and_si128(v12, (__m128i)xmmword_180170CE0); v3 = _mm_cvtsi128_si32(v5); v4 = _mm_cvtepi32_ps(_mm_sub_epi32(_mm_srli_epi32(v13, 0x17u), (__m128i)xmmword_180170D00)).m128_f32[0]; } v6 = 2 * (v3 & 0x8000) + (v3 & 0x7F0000); v7 = _mm_cvtsi32_si128(v6); if ( fabs(X - 1.0) < 0.0625 ) { v10 = X - 1.0; v11 = v10 / (float)(v10 + 2.0); return v10 + (float)((float)((float)((float)((float)((float)(v11 + v11) * (float)(v11 + v11)) * 0.0125) + 0.083333336) * (float)((float)(v11 + v11) * (float)((float)(v11 + v11) * (float)(v11 + v11)))) - (float)(v10 * v11)); } else { v8 = HIWORD(v6); v9 = (float)(*(float *)_mm_or_si128(v7, (__m128i)xmmword_180170D70).m128i_i32 - *(float *)_mm_or_si128(v5, (__m128i)xmmword_180170D70).m128i_i32) * flt_180173840[v8]; return (float)((float)(0.69311523 * v4) + flt_180173420[v8]) + (float)((float)((float)(0.000031946183 * v4) - (float)(v9 + (float)((float)((float)(v9 * 0.33333334) + 0.5) * (float)(v9 * v9)))) + flt_180173630[v8]); } }