{"type": "func", "start": 6443708768, "end": 6443709383, "name": "_handle_exc", "pseudocode": "// \n// _handle_exc from 0x180133160 to 0x1801333c7 (615 bytes)\n// \n// 2 xrefs:\n// > _except2 @ 0x18013309d\n// > <???> @ 0x180203128\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__int64 __fastcall handle_exc(unsigned int a1, double *a2, __int16 a3)\n{\n  unsigned int v3; // r14d\n  int v5; // ebx\n  char v7; // r15\n  __int64 v8; // rax\n  double v9; // xmm0_8\n  double v10; // xmm0_8\n  int v11; // edi\n  int v12; // ecx\n  double v13; // xmm0_8\n  int v14; // r8d\n  unsigned int v15; // eax\n  __int64 v16; // rdx\n  unsigned int v17; // ecx\n  int v19; // [rsp+70h] [rbp+8h] BYREF\n  double v20; // [rsp+88h] [rbp+20h]\n\n  v3 = 0;\n  v5 = a1 & 0x1F;\n  v7 = a1;\n  if ( (a1 & 8) != 0 && (a3 & 0x80u) != 0 )\n  {\n    set_statfp(1);\n    v5 &= ~8u;\n    goto LABEL_46;\n  }\n  if ( (a1 & 4) != 0 && (a3 & 0x200) != 0 )\n  {\n    set_statfp(4);\n    v5 &= ~4u;\n    goto LABEL_46;\n  }\n  if ( (a1 & 1) != 0 && (a3 & 0x400) != 0 )\n  {\n    set_statfp(8);\n    v8 = a3 & 0x6000;\n    if ( (a3 & 0x6000) != 0 )\n    {\n      if ( v8 != 0x2000 )\n      {\n        if ( v8 != 0x4000 )\n        {\n          if ( v8 != 24576 )\n          {\nLABEL_24:\n            v5 &= ~1u;\n            goto LABEL_46;\n          }\n          v9 = 1.797693134862316e308;\n          if ( *a2 <= 0.0 )\n            goto LABEL_22;\nLABEL_23:\n          *a2 = v9;\n          goto LABEL_24;\n        }\n        if ( *a2 <= 0.0 )\n        {\n          v9 = 1.797693134862316e308;\nLABEL_22:\n          v9 = -v9;\n          goto LABEL_23;\n        }\nLABEL_20:\n        v9 = INFINITY;\n        goto LABEL_23;\n      }\n      if ( *a2 > 0.0 )\n      {\n        v9 = 1.797693134862316e308;\n        goto LABEL_23;\n      }\n    }\n    else if ( *a2 > 0.0 )\n    {\n      goto LABEL_20;\n    }\n    v9 = INFINITY;\n    goto LABEL_22;\n  }\n  if ( (a1 & 2) != 0 && (a3 & 0x800) != 0 )\n  {\n    v10 = *a2;\n    v11 = (a1 >> 4) & 1;\n    if ( *a2 == 0.0 )\n    {\n      v11 = 1;\n    }\n    else\n    {\n      decomp(v10, &v19);\n      v12 = v19 - 1536;\n      v20 = v10;\n      if ( v19 - 1536 >= -1074 )\n      {\n        v14 = 0;\n        LOBYTE(v14) = v10 < 0.0;\n        HIWORD(v20) = BYTE6(v20) & 0xF | 0x10;\n        if ( v12 < -1021 )\n        {\n          v15 = LODWORD(v20);\n          v16 = (unsigned int)(-1021 - v12);\n          v17 = HIDWORD(v20);\n          do\n          {\n            if ( (v15 & 1) != 0 && !v11 )\n              v11 = 1;\n            v15 >>= 1;\n            LODWORD(v20) = v15;\n            if ( (v17 & 1) != 0 )\n            {\n              v15 |= 0x80000000;\n              LODWORD(v20) = v15;\n            }\n            v17 >>= 1;\n            --v16;\n          }\n          while ( v16 );\n          HIDWORD(v20) = v17;\n        }\n        v13 = v20;\n        if ( v14 )\n          v13 = -v20;\n      }\n      else\n      {\n        v13 = v10 * 0.0;\n        v11 = 1;\n      }\n      *a2 = v13;\n    }\n    if ( v11 )\n      set_statfp(16);\n    v5 &= ~2u;\n  }\nLABEL_46:\n  if ( (v7 & 0x10) != 0 && (a3 & 0x1000) != 0 )\n  {\n    set_statfp(32);\n    v5 &= ~0x10u;\n  }\n  LOBYTE(v3) = v5 == 0;\n  return v3;\n}", "assembly": "; \n; _handle_exc from 0x180133160 to 0x1801333c7 (615 bytes)\n; \n; 2 xrefs:\n; > _except2 @ 0x18013309d\n; > <???> @ 0x180203128\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     [rsp+arg_8], rbx                                               ; +0x0, 0x180133160\npush    rbp                                                            ; +0x5, 0x180133165\npush    rsi                                                            ; +0x6, 0x180133166\npush    rdi                                                            ; +0x7, 0x180133167\npush    r12                                                            ; +0x8, 0x180133168\npush    r13                                                            ; +0xa, 0x18013316a\npush    r14                                                            ; +0xc, 0x18013316c\npush    r15                                                            ; +0xe, 0x18013316e\nsub     rsp, 30h                                                       ; +0x10, 0x180133170\nxor     r14d, r14d                                                     ; +0x14, 0x180133174\nmovaps  [rsp+68h+var_48], xmm6                                         ; +0x17, 0x180133177\nmov     ebx, ecx                                                       ; +0x1c, 0x18013317c\nmov     r12, r8                                                        ; +0x1e, 0x18013317e\nand     ebx, 1Fh                                                       ; +0x21, 0x180133181\nmov     rbp, rdx                                                       ; +0x24, 0x180133184\nmov     r15d, ecx                                                      ; +0x27, 0x180133187\nlea     r13d, [r14+10h]                                                ; +0x2a, 0x18013318a\ntest    cl, 8                                                          ; +0x2e, 0x18013318e\njz      short loc_1801331A9                                            ; +0x31, 0x180133191\ntest    r12b, r12b                                                     ; +0x33, 0x180133193\njns     short loc_1801331A9                                            ; +0x36, 0x180133196\nlea     ecx, [r14+1]                                                   ; +0x38, 0x180133198\ncall    _set_statfp                                                    ; +0x3c, 0x18013319c\nand     ebx, 0FFFFFFF7h                                                ; +0x41, 0x1801331a1\njmp     loc_18013338B                                                  ; +0x44, 0x1801331a4\nmov     ecx, 4                                                         ; +0x49, 0x1801331a9\ntest    cl, r15b                                                       ; +0x4e, 0x1801331ae\njz      short loc_1801331C7                                            ; +0x51, 0x1801331b1\nbt      r12, 9                                                         ; +0x53, 0x1801331b3\njnb     short loc_1801331C7                                            ; +0x58, 0x1801331b8\ncall    _set_statfp                                                    ; +0x5a, 0x1801331ba\nand     ebx, 0FFFFFFFBh                                                ; +0x5f, 0x1801331bf\njmp     loc_18013338B                                                  ; +0x62, 0x1801331c2\nmov     esi, 1                                                         ; +0x67, 0x1801331c7\ntest    sil, r15b                                                      ; +0x6c, 0x1801331cc\njz      loc_18013328A                                                  ; +0x6f, 0x1801331cf\nbt      r12, 0Ah                                                       ; +0x75, 0x1801331d5\njnb     loc_18013328A                                                  ; +0x7a, 0x1801331da\nlea     ecx, [rsi+7]                                                   ; +0x80, 0x1801331e0\ncall    _set_statfp                                                    ; +0x83, 0x1801331e3\nmov     rax, r12                                                       ; +0x88, 0x1801331e8\nmov     ecx, 6000h                                                     ; +0x8b, 0x1801331eb\nand     rax, rcx                                                       ; +0x90, 0x1801331f0\njz      short loc_180133255                                            ; +0x93, 0x1801331f3\ncmp     rax, 2000h                                                     ; +0x95, 0x1801331f5\njz      short loc_18013323C                                            ; +0x9b, 0x1801331fb\ncmp     rax, 4000h                                                     ; +0x9d, 0x1801331fd\njz      short loc_180133223                                            ; +0xa3, 0x180133203\ncmp     rax, rcx                                                       ; +0xa5, 0x180133205\njnz     short loc_180133282                                            ; +0xa8, 0x180133208\nmovsd   xmm0, qword ptr [rbp+0]                                        ; +0xaa, 0x18013320a\ncomisd  xmm0, cs:qword_180170C20                                       ; +0xaf, 0x18013320f\nmovsd   xmm0, cs:qword_180173178                                       ; +0xb7, 0x180133217\nja      short loc_18013327D                                            ; +0xbf, 0x18013321f\njmp     short loc_180133276                                            ; +0xc1, 0x180133221\nmovsd   xmm0, qword ptr [rbp+0]                                        ; +0xc3, 0x180133223\ncomisd  xmm0, cs:qword_180170C20                                       ; +0xc8, 0x180133228\nja      short loc_180133264                                            ; +0xd0, 0x180133230\nmovsd   xmm0, cs:qword_180173178                                       ; +0xd2, 0x180133232\njmp     short loc_180133276                                            ; +0xda, 0x18013323a\nmovsd   xmm0, qword ptr [rbp+0]                                        ; +0xdc, 0x18013323c\ncomisd  xmm0, cs:qword_180170C20                                       ; +0xe1, 0x180133241\njbe     short loc_18013326E                                            ; +0xe9, 0x180133249\nmovsd   xmm0, cs:qword_180173178                                       ; +0xeb, 0x18013324b\njmp     short loc_18013327D                                            ; +0xf3, 0x180133253\nmovsd   xmm0, qword ptr [rbp+0]                                        ; +0xf5, 0x180133255\ncomisd  xmm0, cs:qword_180170C20                                       ; +0xfa, 0x18013325a\njbe     short loc_18013326E                                            ; +0x102, 0x180133262\nmovsd   xmm0, cs:Number                                                ; +0x104, 0x180133264\njmp     short loc_18013327D                                            ; +0x10c, 0x18013326c\nmovsd   xmm0, cs:Number                                                ; +0x10e, 0x18013326e\nxorps   xmm0, cs:xmmword_1801445D0                                     ; +0x116, 0x180133276\nmovsd   qword ptr [rbp+0], xmm0                                        ; +0x11d, 0x18013327d\nand     ebx, 0FFFFFFFEh                                                ; +0x122, 0x180133282\njmp     loc_18013338B                                                  ; +0x125, 0x180133285\ntest    r15b, 2                                                        ; +0x12a, 0x18013328a\njz      loc_18013338B                                                  ; +0x12e, 0x18013328e\nbt      r12, 0Bh                                                       ; +0x134, 0x180133294\njnb     loc_18013338B                                                  ; +0x139, 0x180133299\nmovsd   xmm0, qword ptr [rdx]                                          ; +0x13f, 0x18013329f\nmov     edi, r15d                                                      ; +0x143, 0x1801332a3\nshr     edi, 4                                                         ; +0x146, 0x1801332a6\nxorps   xmm6, xmm6                                                     ; +0x149, 0x1801332a9\nand     edi, esi                                                       ; +0x14c, 0x1801332ac\nucomisd xmm0, xmm6                                                     ; +0x14e, 0x1801332ae\njp      short loc_1801332BD                                            ; +0x152, 0x1801332b2\njnz     short loc_1801332BD                                            ; +0x154, 0x1801332b4\nmov     edi, esi                                                       ; +0x156, 0x1801332b6\njmp     loc_18013337C                                                  ; +0x158, 0x1801332b8\nlea     rdx, [rsp+68h+arg_0]                                           ; +0x15d, 0x1801332bd\ncall    _decomp                                                        ; +0x162, 0x1801332c2\nmov     ecx, [rsp+68h+arg_0]                                           ; +0x167, 0x1801332c7\nadd     ecx, 0FFFFFA00h                                                ; +0x16b, 0x1801332cb\nmovsd   [rsp+68h+arg_18], xmm0                                         ; +0x171, 0x1801332d1\ncmp     ecx, 0FFFFFBCEh                                                ; +0x17a, 0x1801332da\njge     short loc_1801332ED                                            ; +0x180, 0x1801332e0\nmulsd   xmm0, xmm6                                                     ; +0x182, 0x1801332e2\nmov     edi, esi                                                       ; +0x186, 0x1801332e6\njmp     loc_180133377                                                  ; +0x188, 0x1801332e8\nmov     rax, [rsp+68h+arg_18]                                          ; +0x18d, 0x1801332ed\nmov     r8d, r14d                                                      ; +0x195, 0x1801332f5\ncomisd  xmm6, xmm0                                                     ; +0x198, 0x1801332f8\nsetnbe  r8b                                                            ; +0x19c, 0x1801332fc\nshr     rax, 30h                                                       ; +0x1a0, 0x180133300\nand     ax, 0Fh                                                        ; +0x1a4, 0x180133304\nor      ax, r13w                                                       ; +0x1a8, 0x180133308\nmov     word ptr [rsp+68h+arg_18+6], ax                                ; +0x1ac, 0x18013330c\ncmp     ecx, 0FFFFFC03h                                                ; +0x1b4, 0x180133314\njge     short loc_180133362                                            ; +0x1ba, 0x18013331a\nmov     eax, dword ptr [rsp+68h+arg_18]                                ; +0x1bc, 0x18013331c\nmov     edx, 0FFFFFC03h                                                ; +0x1c3, 0x180133323\nsub     edx, ecx                                                       ; +0x1c8, 0x180133328\nmov     ecx, dword ptr [rsp+68h+arg_18+4]                              ; +0x1ca, 0x18013332a\ntest    sil, al                                                        ; +0x1d1, 0x180133331\njz      short loc_18013333B                                            ; +0x1d4, 0x180133334\ntest    edi, edi                                                       ; +0x1d6, 0x180133336\ncmovz   edi, esi                                                       ; +0x1d8, 0x180133338\nshr     eax, 1                                                         ; +0x1db, 0x18013333b\nmov     dword ptr [rsp+68h+arg_18], eax                                ; +0x1dd, 0x18013333d\ntest    sil, cl                                                        ; +0x1e4, 0x180133344\njz      short loc_180133354                                            ; +0x1e7, 0x180133347\nbts     eax, 1Fh                                                       ; +0x1e9, 0x180133349\nmov     dword ptr [rsp+68h+arg_18], eax                                ; +0x1ed, 0x18013334d\nshr     ecx, 1                                                         ; +0x1f4, 0x180133354\nsub     rdx, rsi                                                       ; +0x1f6, 0x180133356\njnz     short loc_180133331                                            ; +0x1f9, 0x180133359\nmov     dword ptr [rsp+68h+arg_18+4], ecx                              ; +0x1fb, 0x18013335b\nmovsd   xmm0, [rsp+68h+arg_18]                                         ; +0x202, 0x180133362\ntest    r8d, r8d                                                       ; +0x20b, 0x18013336b\njz      short loc_180133377                                            ; +0x20e, 0x18013336e\nxorps   xmm0, cs:xmmword_1801445D0                                     ; +0x210, 0x180133370\nmovsd   qword ptr [rbp+0], xmm0                                        ; +0x217, 0x180133377\ntest    edi, edi                                                       ; +0x21c, 0x18013337c\njz      short loc_180133388                                            ; +0x21e, 0x18013337e\nmov     rcx, r13                                                       ; +0x220, 0x180133380\ncall    _set_statfp                                                    ; +0x223, 0x180133383\nand     ebx, 0FFFFFFFDh                                                ; +0x228, 0x180133388\ntest    r13b, r15b                                                     ; +0x22b, 0x18013338b\njz      short loc_1801333A4                                            ; +0x22e, 0x18013338e\nbt      r12, 0Ch                                                       ; +0x230, 0x180133390\njnb     short loc_1801333A4                                            ; +0x235, 0x180133395\nmov     ecx, 20h ; ' '                                                 ; +0x237, 0x180133397\ncall    _set_statfp                                                    ; +0x23c, 0x18013339c\nand     ebx, 0FFFFFFEFh                                                ; +0x241, 0x1801333a1\nmovaps  xmm6, [rsp+68h+var_48]                                         ; +0x244, 0x1801333a4\ntest    ebx, ebx                                                       ; +0x249, 0x1801333a9\nmov     rbx, [rsp+68h+arg_8]                                           ; +0x24b, 0x1801333ab\nsetz    r14b                                                           ; +0x250, 0x1801333b0\nmov     eax, r14d                                                      ; +0x254, 0x1801333b4\nadd     rsp, 30h                                                       ; +0x257, 0x1801333b7\npop     r15                                                            ; +0x25b, 0x1801333bb\npop     r14                                                            ; +0x25d, 0x1801333bd\npop     r13                                                            ; +0x25f, 0x1801333bf\npop     r12                                                            ; +0x261, 0x1801333c1\npop     rdi                                                            ; +0x263, 0x1801333c3\npop     rsi                                                            ; +0x264, 0x1801333c4\npop     rbp                                                            ; +0x265, 0x1801333c5\nretn                                                                   ; +0x266, 0x1801333c6", "xrefs": ["_except2 @ 0x18013309d", "<???> @ 0x180203128"], "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"}