{"type": "func", "start": 6443694832, "end": 6443695511, "name": "expf", "pseudocode": "// \n// expf from 0x18012faf0 to 0x18012fd97 (679 bytes)\n// \n// 11 xrefs:\n// > sub_1800564A0 @ 0x18005663e\n// > sub_1800564A0 @ 0x180056696\n// > sub_1800895C0 @ 0x1800895f3\n// > sub_1800DBF50 @ 0x1800dbfc0\n// > sub_1800DBF50 @ 0x1800dbff9\n// > sub_1800DBF50 @ 0x1800dc03d\n// > sub_1800DC760 @ 0x1800dc84c\n// > sub_1800DC760 @ 0x1800dc89e\n// > sub_1800F23B0 @ 0x1800f2468\n// > sub_1800F23B0 @ 0x1800f24c4\n// > <???> @ 0x180202de0\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n// local variable allocation has failed, the output may be wrong!\nfloat __cdecl expf(float X)\n{\n  __int64 v2; // rcx\n  __int64 v4; // rdx\n  __m128d v5; // xmm3\n  __m128i v6; // xmm4\n  int v7; // ecx\n  double v8; // xmm1_8\n  int v9; // edx\n\n  if ( !dword_1801F4D54 )\n  {\n    v4 = (unsigned int)_mm_cvtsi128_si32(*(__m128i *)&X);\n    LODWORD(v4) = v4 & 0x7FFFFFFF;\n    if ( (int)v4 < 2139095040 )\n    {\n      *(double *)&X = X;\n      v5.m128d_f64[1] = 0.0;\n      v5.m128d_f64[0] = 92.33248261689366 * *(double *)&X;\n      if ( 92.33248261689366 * *(double *)&X >= 8192.0 || v5.m128d_f64[0] < -9600.0 )\n        return expf_special(v2, v4);\n      v6 = _mm_cvtpd_epi32(v5);\n      v7 = _mm_cvtsi128_si32(v6);\n      v8 = *(double *)&X - 0.01083042469624915 * _mm_cvtepi32_pd(v6).m128d_f64[0];\n      return ((v8 * v8 * (0.1666666666666667 * v8 + 0.5) + v8) * dbl_180173A60[v7 & 0x3F] + dbl_180173A60[v7 & 0x3F])\n           * COERCE_DOUBLE(((unsigned int)((v7 - (v7 & 0x3F)) >> 6) + 1023LL) << 52);\n    }\n    v9 = _mm_cvtsi128_si32(*(__m128i *)&X);\n    if ( v9 == 2139095040 )\n      return X;\n    if ( v9 != -8388608 )\n      return expf_special(v2, v9 | 0x400000u);\n    return 0.0;\n  }\n  __asm { vmovd   edx, xmm0 }\n  LODWORD(_RDX) = _EDX & 0x7FFFFFFF;\n  if ( (int)_RDX < 2139095040 )\n  {\n    __asm\n    {\n      vcvtss2sd xmm0, xmm0, xmm0\n      vmulsd  xmm3, xmm0, qword ptr cs:xmmword_1801721E0\n      vcomisd xmm3, cs:qword_1801721C0\n    }\n    __asm { vucomisd xmm3, cs:qword_1801721D0 }\n    __asm\n    {\n      vxorps  xmm1, xmm1, xmm1\n      vmovd   xmm0, edx\n    }\n    return expf_special(v2, _RDX);\n  }\n  __asm { vmovd   edx, xmm0 }\n  if ( _EDX != 2139095040 )\n  {\n    if ( _EDX != -8388608 )\n    {\n      _RDX = _EDX | 0x400000u;\n      __asm { vmovd   xmm1, edx }\n      return expf_special(v2, _RDX);\n    }\n    return 0.0;\n  }\n  return X;\n}", "assembly": "; \n; expf from 0x18012faf0 to 0x18012fd97 (679 bytes)\n; \n; 11 xrefs:\n; > sub_1800564A0 @ 0x18005663e\n; > sub_1800564A0 @ 0x180056696\n; > sub_1800895C0 @ 0x1800895f3\n; > sub_1800DBF50 @ 0x1800dbfc0\n; > sub_1800DBF50 @ 0x1800dbff9\n; > sub_1800DBF50 @ 0x1800dc03d\n; > sub_1800DC760 @ 0x1800dc84c\n; > sub_1800DC760 @ 0x1800dc89e\n; > sub_1800F23B0 @ 0x1800f2468\n; > sub_1800F23B0 @ 0x1800f24c4\n; > <???> @ 0x180202de0\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nsub     rsp, 38h                                                       ; +0x0, 0x18012faf0\ncmp     cs:dword_1801F4D54, 0                                          ; +0x4, 0x18012faf4\njnz     Lexpf_fma3                                                     ; +0xb, 0x18012fafb\nmovd    edx, xmm0                                                      ; +0x11, 0x18012fb01\nbtr     edx, 1Fh                                                       ; +0x15, 0x18012fb05\ncmp     edx, dword ptr cs:xmmword_1801721B0                            ; +0x19, 0x18012fb09\njge     Lexpf_x_is_inf_or_nan                                          ; +0x1f, 0x18012fb0f\ncvtss2sd xmm0, xmm0                                                    ; +0x25, 0x18012fb15\nmovapd  xmm3, cs:xmmword_1801721E0                                     ; +0x29, 0x18012fb19\nmulsd   xmm3, xmm0                                                     ; +0x31, 0x18012fb21\ncomisd  xmm3, cs:qword_1801721C0                                       ; +0x35, 0x18012fb25\njnb     Lexpf_y_is_inf                                                 ; +0x3d, 0x18012fb2d\ncomisd  xmm3, cs:qword_1801721D0                                       ; +0x43, 0x18012fb33\njb      Lexpf_y_is_zero                                                ; +0x4b, 0x18012fb3b\ncvtpd2dq xmm4, xmm3                                                    ; +0x51, 0x18012fb41\nlea     r10, dbl_180173A60                                             ; +0x55, 0x18012fb45\ncvtdq2pd xmm1, xmm4                                                    ; +0x5c, 0x18012fb4c\nmovapd  xmm2, cs:xmmword_1801721F0                                     ; +0x60, 0x18012fb50\nmulpd   xmm2, xmm1                                                     ; +0x68, 0x18012fb58\nmovd    ecx, xmm4                                                      ; +0x6c, 0x18012fb5c\nmov     rax, 3Fh ; '?'                                                 ; +0x70, 0x18012fb60\nand     eax, ecx                                                       ; +0x77, 0x18012fb67\nsubpd   xmm0, xmm2                                                     ; +0x79, 0x18012fb69\nmovapd  xmm1, xmm0                                                     ; +0x7d, 0x18012fb6d\nsub     ecx, eax                                                       ; +0x81, 0x18012fb71\nsar     ecx, 6                                                         ; +0x83, 0x18012fb73\nmovapd  xmm3, cs:xmmword_180172200                                     ; +0x86, 0x18012fb76\nmulpd   xmm3, xmm0                                                     ; +0x8e, 0x18012fb7e\nmulpd   xmm0, xmm0                                                     ; +0x92, 0x18012fb82\naddpd   xmm3, cs:xmmword_180172210                                     ; +0x96, 0x18012fb86\nmulpd   xmm0, xmm3                                                     ; +0x9e, 0x18012fb8e\naddpd   xmm0, xmm1                                                     ; +0xa2, 0x18012fb92\nadd     rcx, 3FFh                                                      ; +0xa6, 0x18012fb96\nshl     rcx, 34h                                                       ; +0xad, 0x18012fb9d\nmovsd   xmm2, qword ptr [r10+rax*8]                                    ; +0xb1, 0x18012fba1\nmulpd   xmm0, xmm2                                                     ; +0xb7, 0x18012fba7\naddpd   xmm0, xmm2                                                     ; +0xbb, 0x18012fbab\nmovq    xmm1, rcx                                                      ; +0xbf, 0x18012fbaf\nmulpd   xmm0, xmm1                                                     ; +0xc4, 0x18012fbb4\ncvtsd2ss xmm0, xmm0                                                    ; +0xc8, 0x18012fbb8\nadd     rsp, 38h                                                       ; +0xcc, 0x18012fbbc\nretn                                                                   ; +0xd0, 0x18012fbc0\nalign 10h                                                              ; +0xd1, 0x18012fbc1\nxorps   xmm1, xmm1                                                     ; +0xe0, 0x18012fbd0\nmovd    xmm0, edx                                                      ; +0xe3, 0x18012fbd3\nmov     r8d, cs:dword_180172230                                        ; +0xe7, 0x18012fbd7\ncall    _expf_special                                                  ; +0xee, 0x18012fbde\njmp     short Lexpf_finish                                             ; +0xf3, 0x18012fbe3\nalign 10h                                                              ; +0xf5, 0x18012fbe5\nmovaps  xmm1, cs:xmmword_1801721B0                                     ; +0x100, 0x18012fbf0\nmovd    xmm0, edx                                                      ; +0x107, 0x18012fbf7\nmov     r8d, cs:dword_180172234                                        ; +0x10b, 0x18012fbfb\ncall    _expf_special                                                  ; +0x112, 0x18012fc02\njmp     short Lexpf_finish                                             ; +0x117, 0x18012fc07\nalign 10h                                                              ; +0x119, 0x18012fc09\nxorps   xmm0, xmm0                                                     ; +0x120, 0x18012fc10\nadd     rsp, 38h                                                       ; +0x123, 0x18012fc13\nretn                                                                   ; +0x127, 0x18012fc17\nalign 20h                                                              ; +0x128, 0x18012fc18\nadd     rsp, 38h                                                       ; +0x130, 0x18012fc20\nretn                                                                   ; +0x134, 0x18012fc24\nalign 10h                                                              ; +0x135, 0x18012fc25\nmovd    edx, xmm0                                                      ; +0x140, 0x18012fc30\ncmp     edx, dword ptr cs:xmmword_1801721B0                            ; +0x144, 0x18012fc34\njz      short Lexpf_finish                                             ; +0x14a, 0x18012fc3a\ncmp     edx, cs:dword_180172220                                        ; +0x14c, 0x18012fc3c\njz      short Lexpf_process_zero                                       ; +0x152, 0x18012fc42\nor      edx, cs:dword_180172224                                        ; +0x154, 0x18012fc44\nmovd    xmm1, edx                                                      ; +0x15a, 0x18012fc4a\nmov     r8d, cs:dword_18017222C                                        ; +0x15e, 0x18012fc4e\ncall    _expf_special                                                  ; +0x165, 0x18012fc55\njmp     short Lexpf_finish                                             ; +0x16a, 0x18012fc5a\nalign 20h                                                              ; +0x16c, 0x18012fc5c\nvmovd   edx, xmm0                                                      ; +0x170, 0x18012fc60\nbtr     edx, 1Fh                                                       ; +0x174, 0x18012fc64\ncmp     edx, dword ptr cs:xmmword_1801721B0                            ; +0x178, 0x18012fc68\njge     Lexpf_fma3_x_is_inf_or_nan                                     ; +0x17e, 0x18012fc6e\nvcvtss2sd xmm0, xmm0, xmm0                                             ; +0x184, 0x18012fc74\nvmulsd  xmm3, xmm0, qword ptr cs:xmmword_1801721E0                     ; +0x188, 0x18012fc78\nvcomisd xmm3, cs:qword_1801721C0                                       ; +0x190, 0x18012fc80\njnb     Lexpf_fma3_y_is_inf                                            ; +0x198, 0x18012fc88\nvucomisd xmm3, cs:qword_1801721D0                                      ; +0x19e, 0x18012fc8e\njb      short Lexpf_fma3_y_is_zero                                     ; +0x1a6, 0x18012fc96\nvcvtpd2dq xmm4, xmm3                                                   ; +0x1a8, 0x18012fc98\nlea     r10, dbl_180173A60                                             ; +0x1ac, 0x18012fc9c\nvcvtdq2pd xmm1, xmm4                                                   ; +0x1b3, 0x18012fca3\nvfnmadd231sd xmm0, xmm1, qword ptr cs:xmmword_1801721F0                ; +0x1b7, 0x18012fca7\nvmovd   ecx, xmm4                                                      ; +0x1c0, 0x18012fcb0\nmov     rax, 3Fh ; '?'                                                 ; +0x1c4, 0x18012fcb4\nand     eax, ecx                                                       ; +0x1cb, 0x18012fcbb\nvmovapd xmm1, xmm0                                                     ; +0x1cd, 0x18012fcbd\nsub     ecx, eax                                                       ; +0x1d1, 0x18012fcc1\nsar     ecx, 6                                                         ; +0x1d3, 0x18012fcc3\nvmovapd xmm3, cs:xmmword_180172200                                     ; +0x1d6, 0x18012fcc6\nvmulsd  xmm0, xmm0, xmm0                                               ; +0x1de, 0x18012fcce\nvfmadd213sd xmm3, xmm1, qword ptr cs:xmmword_180172210                 ; +0x1e2, 0x18012fcd2\nvfmadd213sd xmm0, xmm3, xmm1                                           ; +0x1eb, 0x18012fcdb\nadd     rcx, 3FFh                                                      ; +0x1f0, 0x18012fce0\nshl     rcx, 34h                                                       ; +0x1f7, 0x18012fce7\nvmovsd  xmm2, qword ptr [r10+rax*8]                                    ; +0x1fb, 0x18012fceb\nvfmadd213sd xmm0, xmm2, xmm2                                           ; +0x201, 0x18012fcf1\nvmovq   xmm2, rcx                                                      ; +0x206, 0x18012fcf6\nvmulsd  xmm0, xmm0, xmm2                                               ; +0x20b, 0x18012fcfb\nvcvtsd2ss xmm0, xmm0, xmm0                                             ; +0x20f, 0x18012fcff\nadd     rsp, 38h                                                       ; +0x213, 0x18012fd03\nretn                                                                   ; +0x217, 0x18012fd07\nalign 10h                                                              ; +0x218, 0x18012fd08\nvxorps  xmm1, xmm1, xmm1                                               ; +0x220, 0x18012fd10\nvmovd   xmm0, edx                                                      ; +0x224, 0x18012fd14\nmov     r8d, cs:dword_180172230                                        ; +0x228, 0x18012fd18\ncall    _expf_special                                                  ; +0x22f, 0x18012fd1f\njmp     short Lexpf_fma3_finish                                        ; +0x234, 0x18012fd24\nalign 10h                                                              ; +0x236, 0x18012fd26\nvmovaps xmm1, cs:xmmword_1801721B0                                     ; +0x240, 0x18012fd30\nvmovd   xmm0, edx                                                      ; +0x248, 0x18012fd38\nmov     r8d, cs:dword_180172234                                        ; +0x24c, 0x18012fd3c\ncall    _expf_special                                                  ; +0x253, 0x18012fd43\njmp     short $+2                                                      ; +0x258, 0x18012fd48\nadd     rsp, 38h                                                       ; +0x25a, 0x18012fd4a\nretn                                                                   ; +0x25e, 0x18012fd4e\nvxorps  xmm0, xmm0, xmm0                                               ; +0x25f, 0x18012fd4f\njmp     short Lexpf_fma3_final_check                                   ; +0x263, 0x18012fd53\nalign 20h                                                              ; +0x265, 0x18012fd55\nvmovd   edx, xmm0                                                      ; +0x270, 0x18012fd60\ncmp     edx, dword ptr cs:xmmword_1801721B0                            ; +0x274, 0x18012fd64\njz      Lexpf_finish                                                   ; +0x27a, 0x18012fd6a\ncmp     edx, cs:dword_180172220                                        ; +0x280, 0x18012fd70\njz      Lexpf_process_zero                                             ; +0x286, 0x18012fd76\nor      edx, cs:dword_180172224                                        ; +0x28c, 0x18012fd7c\nvmovd   xmm1, edx                                                      ; +0x292, 0x18012fd82\nmov     r8d, cs:dword_18017222C                                        ; +0x296, 0x18012fd86\ncall    _expf_special                                                  ; +0x29d, 0x18012fd8d\njmp     Lexpf_finish                                                   ; +0x2a2, 0x18012fd92", "xrefs": ["sub_1800564A0 @ 0x18005663e", "sub_1800564A0 @ 0x180056696", "sub_1800895C0 @ 0x1800895f3", "sub_1800DBF50 @ 0x1800dbfc0", "sub_1800DBF50 @ 0x1800dbff9", "sub_1800DBF50 @ 0x1800dc03d", "sub_1800DC760 @ 0x1800dc84c", "sub_1800DC760 @ 0x1800dc89e", "sub_1800F23B0 @ 0x1800f2468", "sub_1800F23B0 @ 0x1800f24c4", "<???> @ 0x180202de0"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}