// // asinf from 0x180130b90 to 0x180130d7a (490 bytes) // // 2 xrefs: // > sub_1800F9FF0 @ 0x1800fa8c0 // > @ 0x180202e94 // // 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 // float __cdecl asinf(float X) { float v1; // xmm5_4 float v2; // xmm6_4 __int64 v3; // rdx float v4; // xmm1_4 float v5; // xmm4_4 float v6; // xmm4_4 float v7; // [rsp+70h] [rbp+8h] v1 = 0.0; v2 = X; v3 = (unsigned __int8)(LODWORD(X) >> 23); if ( (LODWORD(X) & 0x7FFFFFFFu) > 0x7F800000 ) return handle_nanf(LODWORD(X), v3); if ( (unsigned int)v3 < 0x71 ) goto LABEL_9; if ( (unsigned int)v3 < 0x7F ) { if ( X < 0.0 ) v2 = -X; if ( (unsigned int)v3 < 0x7E ) { v4 = v2 * v2; v7 = v2 * v2; } else { v4 = (float)(1.0 - v2) * 0.5; v7 = v4; v1 = fsqrt(v4); v2 = v1; } v5 = (float)((float)((float)((float)((float)((float)(-0.013381929 - (float)(v4 * 0.0039613745)) * v4) - 0.056529868) * v4) + 0.1841616) * v4) / (float)(1.1049696 - (float)(v4 * 0.8364113)); if ( (unsigned int)v3 < 0x7E ) v6 = (float)(v5 * v2) + v2; else v6 = 0.78539813 - (float)((float)((float)((float)(v1 + v1) * v5) - (float)(0.000000075497894 - (float)((float)((float)(v7 - (float)(COERCE_FLOAT(LODWORD(v1) & 0xFFFF0000) * COERCE_FLOAT(LODWORD(v1) & 0xFFFF0000))) / (float)(COERCE_FLOAT(LODWORD(v1) & 0xFFFF0000) + v1)) + (float)((float)(v7 - (float)(COERCE_FLOAT(LODWORD(v1) & 0xFFFF0000) * COERCE_FLOAT(LODWORD(v1) & 0xFFFF0000))) / (float)(COERCE_FLOAT(LODWORD(v1) & 0xFFFF0000) + v1))))) - (float)(0.78539813 - (float)(COERCE_FLOAT(LODWORD(v1) & 0xFFFF0000) * 2.0))); if ( X < 0.0 ) return -v6; return v6; } else { if ( X == 1.0 ) { v2 = 1.5707964; LABEL_9: set_statfp(32); return v2; } if ( X == -1.0 ) { v2 = -1.5707964; goto LABEL_9; } handle_errorf((unsigned int)"asinf", 14, -4194304, 1, 8, 33, LODWORD(X), 0, 1); } return X; }