{"type": "func", "start": 6443660512, "end": 6443660878, "name": "ldexp", "pseudocode": "// \n// ldexp from 0x1801274e0 to 0x18012764e (366 bytes)\n// \n// 7 xrefs:\n// > sub_180001A10 @ 0x180001bee\n// > sub_180001A10 @ 0x180001c2d\n// > sub_180012FF0 @ 0x18001309f\n// > sub_180012FF0 @ 0x1800130c9\n// > sub_1800501A0 @ 0x18005020c\n// > sub_1800501A0 @ 0x180050242\n// > <???> @ 0x1802029f0\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\ndouble __cdecl ldexp(double X, int Y)\n{\n  double v3; // xmm6_8\n  __int64 v4; // rax\n  __int64 v5; // rcx\n  __int64 v6; // rdi\n  int v7; // eax\n  int v8; // r8d\n  int v9; // r9d\n  int v11; // ecx\n  int v12; // edx\n  int v13; // [rsp+60h] [rbp+18h] BYREF\n\n  v3 = X;\n  v4 = ctrlfp(8064, 65472);\n  v5 = HIWORD(X);\n  v6 = v4;\n  if ( (HIWORD(X) & 0x7FF0) != 0x7FF0 )\n  {\n    if ( X == 0.0 )\n      goto LABEL_7;\n    LOWORD(v5) = HIWORD(X) & 0x7FF0;\n    decomp(v5, &v13);\n    if ( Y >= 0 )\n    {\n      if ( v13 > 0x7FFFFFFF - Y )\n        goto LABEL_23;\n    }\n    else if ( v13 < (int)(0x80000000 - Y) )\n    {\n      goto LABEL_18;\n    }\n    v12 = v13 + Y;\n    if ( v13 + Y <= 2560 )\n    {\n      if ( v12 > 1024 )\n      {\n        set_exp((unsigned int)v13, (unsigned int)(v12 - 1536));\nLABEL_24:\n        v11 = 17;\n        return except2(v11, 25, v8, v9, *(__int64 *)&X, v6);\n      }\n      if ( v12 >= -2557 )\n      {\n        if ( v12 >= -1021 )\n        {\n          ((void (*)(void))set_exp)();\n          goto LABEL_6;\n        }\n        set_exp((unsigned int)v13, (unsigned int)(v12 + 1536));\n        goto LABEL_19;\n      }\nLABEL_18:\n      X = X * 0.0;\nLABEL_19:\n      v11 = 18;\n      return except2(v11, 25, v8, v9, *(__int64 *)&X, v6);\n    }\nLABEL_23:\n    X = copysign(INFINITY, X);\n    goto LABEL_24;\n  }\n  v7 = sptype();\n  if ( v7 > 0 )\n  {\n    if ( v7 <= 2 )\n    {\nLABEL_7:\n      ctrlfp(v6, 65472);\n      return v3;\n    }\n    if ( v7 == 3 )\n    {\n      X = handle_qnan2();\nLABEL_6:\n      v3 = X;\n      goto LABEL_7;\n    }\n  }\n  v11 = 8;\n  X = X + 1.0;\n  return except2(v11, 25, v8, v9, *(__int64 *)&X, v6);\n}", "assembly": "; \n; ldexp from 0x1801274e0 to 0x18012764e (366 bytes)\n; \n; 7 xrefs:\n; > sub_180001A10 @ 0x180001bee\n; > sub_180001A10 @ 0x180001c2d\n; > sub_180012FF0 @ 0x18001309f\n; > sub_180012FF0 @ 0x1800130c9\n; > sub_1800501A0 @ 0x18005020c\n; > sub_1800501A0 @ 0x180050242\n; > <???> @ 0x1802029f0\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\nmov     rax, rsp                                                       ; +0x0, 0x1801274e0\nmov     [rax+10h], rbx                                                 ; +0x3, 0x1801274e3\nmov     [rax+20h], rsi                                                 ; +0x7, 0x1801274e7\nmovsd   qword ptr [rax+8], xmm0                                        ; +0xb, 0x1801274eb\npush    rdi                                                            ; +0x10, 0x1801274f0\nsub     rsp, 40h                                                       ; +0x11, 0x1801274f1\nmov     ebx, edx                                                       ; +0x15, 0x1801274f5\nmovaps  xmmword ptr [rax-18h], xmm6                                    ; +0x17, 0x1801274f7\nmov     esi, 0FFC0h                                                    ; +0x1b, 0x1801274fb\nmov     ecx, 1F80h                                                     ; +0x20, 0x180127500\nmov     edx, esi                                                       ; +0x25, 0x180127505\nmovaps  xmm6, xmm0                                                     ; +0x27, 0x180127507\ncall    _ctrlfp                                                        ; +0x2a, 0x18012750a\nmovzx   ecx, [rsp+48h+arg_6]                                           ; +0x2f, 0x18012750f\nmov     rdi, rax                                                       ; +0x34, 0x180127514\nmov     eax, 7FF0h                                                     ; +0x37, 0x180127517\nand     cx, ax                                                         ; +0x3c, 0x18012751c\ncmp     cx, ax                                                         ; +0x3f, 0x18012751f\njnz     short loc_180127575                                            ; +0x42, 0x180127522\nmovaps  xmm0, xmm6                                                     ; +0x44, 0x180127524\ncall    _sptype                                                        ; +0x47, 0x180127527\ntest    eax, eax                                                       ; +0x4c, 0x18012752c\njle     short loc_180127560                                            ; +0x4e, 0x18012752e\ncmp     eax, 2                                                         ; +0x50, 0x180127530\njle     short loc_18012754D                                            ; +0x53, 0x180127533\ncmp     eax, 3                                                         ; +0x55, 0x180127535\njnz     short loc_180127560                                            ; +0x58, 0x180127538\nmovd    xmm1, ebx                                                      ; +0x5a, 0x18012753a\nmovaps  xmm0, xmm6                                                     ; +0x5e, 0x18012753e\ncvtdq2pd xmm1, xmm1                                                    ; +0x61, 0x180127541\ncall    _handle_qnan2                                                  ; +0x65, 0x180127545\nmovaps  xmm6, xmm0                                                     ; +0x6a, 0x18012754a\nmov     rdx, rsi                                                       ; +0x6d, 0x18012754d\nmov     rcx, rdi                                                       ; +0x70, 0x180127550\ncall    _ctrlfp                                                        ; +0x73, 0x180127553\nmovaps  xmm0, xmm6                                                     ; +0x78, 0x180127558\njmp     loc_180127639                                                  ; +0x7b, 0x18012755b\nmovaps  xmm0, xmm6                                                     ; +0x80, 0x180127560\nmov     ecx, 8                                                         ; +0x83, 0x180127563\naddsd   xmm0, cs:qword_18016F8B0                                       ; +0x88, 0x180127568\njmp     loc_180127619                                                  ; +0x90, 0x180127570\nucomisd xmm6, cs:qword_180170C20                                       ; +0x95, 0x180127575\njp      short loc_180127581                                            ; +0x9d, 0x18012757d\njz      short loc_18012754D                                            ; +0x9f, 0x18012757f\nlea     rdx, [rsp+48h+arg_10]                                          ; +0xa1, 0x180127581\nmovaps  xmm0, xmm6                                                     ; +0xa6, 0x180127586\ncall    _decomp                                                        ; +0xa9, 0x180127589\nmov     ecx, [rsp+48h+arg_10]                                          ; +0xae, 0x18012758e\ntest    ebx, ebx                                                       ; +0xb2, 0x180127592\njns     short loc_1801275A3                                            ; +0xb4, 0x180127594\nmov     eax, 80000000h                                                 ; +0xb6, 0x180127596\nsub     eax, ebx                                                       ; +0xbb, 0x18012759b\ncmp     ecx, eax                                                       ; +0xbd, 0x18012759d\njl      short loc_1801275D6                                            ; +0xbf, 0x18012759f\njmp     short loc_1801275AE                                            ; +0xc1, 0x1801275a1\nmov     eax, 7FFFFFFFh                                                 ; +0xc3, 0x1801275a3\nsub     eax, ebx                                                       ; +0xc8, 0x1801275a8\ncmp     ecx, eax                                                       ; +0xca, 0x1801275aa\njg      short loc_180127604                                            ; +0xcc, 0x1801275ac\nlea     edx, [rcx+rbx]                                                 ; +0xce, 0x1801275ae\ncmp     edx, 0A00h                                                     ; +0xd1, 0x1801275b1\njg      short loc_180127604                                            ; +0xd7, 0x1801275b7\ncmp     edx, 400h                                                      ; +0xd9, 0x1801275b9\njle     short loc_1801275CE                                            ; +0xdf, 0x1801275bf\nadd     edx, 0FFFFFA00h                                                ; +0xe1, 0x1801275c1\ncall    _set_exp                                                       ; +0xe7, 0x1801275c7\njmp     short loc_180127614                                            ; +0xec, 0x1801275cc\ncmp     edx, 0FFFFF603h                                                ; +0xee, 0x1801275ce\njge     short loc_1801275E5                                            ; +0xf4, 0x1801275d4\nmulsd   xmm0, cs:qword_180170C20                                       ; +0xf6, 0x1801275d6\nmov     ecx, 12h                                                       ; +0xfe, 0x1801275de\njmp     short loc_180127619                                            ; +0x103, 0x1801275e3\ncmp     edx, 0FFFFFC03h                                                ; +0x105, 0x1801275e5\njge     short loc_1801275FA                                            ; +0x10b, 0x1801275eb\nadd     edx, 600h                                                      ; +0x10d, 0x1801275ed\ncall    _set_exp                                                       ; +0x113, 0x1801275f3\njmp     short loc_1801275DE                                            ; +0x118, 0x1801275f8\ncall    _set_exp                                                       ; +0x11a, 0x1801275fa\njmp     loc_18012754A                                                  ; +0x11f, 0x1801275ff\nmovaps  xmm1, xmm0; Sign                                               ; +0x124, 0x180127604\nmovsd   xmm0, cs:Number; Number                                        ; +0x127, 0x180127607\ncall    _copysign                                                      ; +0x12f, 0x18012760f\nmov     ecx, 11h                                                       ; +0x134, 0x180127614\nmovd    xmm3, ebx                                                      ; +0x139, 0x180127619\nmovaps  xmm2, xmm6                                                     ; +0x13d, 0x18012761d\ncvtdq2pd xmm3, xmm3                                                    ; +0x140, 0x180127620\nmov     [rsp+48h+var_20], rdi                                          ; +0x144, 0x180127624\nmov     edx, 19h                                                       ; +0x149, 0x180127629\nmovsd   [rsp+48h+var_28], xmm0                                         ; +0x14e, 0x18012762e\ncall    _except2                                                       ; +0x154, 0x180127634\nmov     rbx, [rsp+48h+arg_8]                                           ; +0x159, 0x180127639\nmov     rsi, [rsp+48h+arg_18]                                          ; +0x15e, 0x18012763e\nmovaps  xmm6, [rsp+48h+var_18]                                         ; +0x163, 0x180127643\nadd     rsp, 40h                                                       ; +0x168, 0x180127648\npop     rdi                                                            ; +0x16c, 0x18012764c\nretn                                                                   ; +0x16d, 0x18012764d", "xrefs": ["sub_180001A10 @ 0x180001bee", "sub_180001A10 @ 0x180001c2d", "sub_180012FF0 @ 0x18001309f", "sub_180012FF0 @ 0x1800130c9", "sub_1800501A0 @ 0x18005020c", "sub_1800501A0 @ 0x180050242", "<???> @ 0x1802029f0"], "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"}