{"type": "func", "start": 6443770264, "end": 6443770966, "name": "common_control87", "pseudocode": "// \n// common_control87 from 0x180142198 to 0x180142456 (702 bytes)\n// \n// 2 xrefs:\n// > j_common_control87 @ 0x180142190\n// > <???> @ 0x180203d28\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 common_control87(int a1, int a2)\n{\n  int v3; // r12d\n  unsigned int fpsr; // eax\n  __int16 v5; // r10\n  int v6; // edx\n  int v7; // ecx\n  int v8; // edx\n  int v9; // ecx\n  unsigned int v10; // edx\n  int v11; // eax\n  int v12; // r10d\n  int v13; // r10d\n  int v14; // r8d\n  int v15; // edx\n  int v16; // ecx\n  int v17; // edx\n  int v18; // ecx\n  unsigned int v19; // ebx\n  int v20; // eax\n  int v21; // r8d\n  int v22; // edx\n  int v23; // ecx\n  int v24; // edx\n  int v25; // ecx\n  int v26; // eax\n  int v27; // ebx\n  int v28; // ebx\n\n  v3 = a2 & 0x308031F;\n  fpsr = get_fpsr();\n  v5 = fpsr;\n  v6 = (fpsr >> 3) & 0x10 | 8;\n  if ( (fpsr & 0x200) == 0 )\n    v6 = (fpsr >> 3) & 0x10;\n  v7 = v6 | 4;\n  if ( (fpsr & 0x400) == 0 )\n    v7 = v6;\n  v8 = v7 | 2;\n  if ( (fpsr & 0x800) == 0 )\n    v8 = v7;\n  v9 = v8 | 1;\n  if ( (fpsr & 0x1000) == 0 )\n    v9 = v8;\n  v10 = v9 | 0x80000;\n  if ( (fpsr & 0x100) == 0 )\n    v10 = v9;\n  v11 = fpsr & 0x6000;\n  if ( (v5 & 0x6000) != 0 )\n  {\n    switch ( v11 )\n    {\n      case 8192:\n        v10 |= 0x100u;\n        break;\n      case 16384:\n        v10 |= 0x200u;\n        break;\n      case 24576:\n        v10 |= 0x300u;\n        break;\n    }\n  }\n  v12 = (v5 & 0x8040) - 64;\n  if ( v12 )\n  {\n    v13 = v12 - 32704;\n    if ( v13 )\n    {\n      if ( v13 == 64 )\n        v10 |= 0x1000000u;\n    }\n    else\n    {\n      v10 |= 0x3000000u;\n    }\n  }\n  else\n  {\n    v10 |= 0x2000000u;\n  }\n  v14 = v3 & a1 | v10 & ~v3;\n  if ( v14 != v10 )\n  {\n    v15 = (8 * (v14 & 0x10)) | 0x200;\n    if ( (v14 & 8) == 0 )\n      v15 = 8 * (v14 & 0x10);\n    v16 = v15 | 0x400;\n    if ( (v14 & 4) == 0 )\n      v16 = v15;\n    v17 = v16 | 0x800;\n    if ( (v14 & 2) == 0 )\n      v17 = v16;\n    v18 = v17 | 0x1000;\n    if ( (v14 & 1) == 0 )\n      v18 = v17;\n    v19 = v18 | 0x100;\n    if ( (v14 & 0x80000) == 0 )\n      v19 = v18;\n    v20 = v14 & 0x300;\n    if ( (v14 & 0x300) != 0 )\n    {\n      switch ( v20 )\n      {\n        case 256:\n          v19 |= 0x2000u;\n          break;\n        case 512:\n          v19 |= 0x4000u;\n          break;\n        case 768:\n          v19 |= 0x6000u;\n          break;\n      }\n    }\n    v21 = v14 & 0x3000000;\n    switch ( v21 )\n    {\n      case 16777216:\n        v19 |= 0x8040u;\n        break;\n      case 33554432:\n        v19 |= 0x40u;\n        break;\n      case 50331648:\n        v19 |= 0x8000u;\n        break;\n    }\n    if ( byte_1801B2300 && (v19 & 0x40) != 0 )\n    {\n      set_fpsr(v19);\n    }\n    else\n    {\n      v19 &= ~0x40u;\n      set_fpsr(v19);\n    }\n    v22 = (v19 >> 3) & 0x10 | 8;\n    if ( (v19 & 0x200) == 0 )\n      v22 = (v19 >> 3) & 0x10;\n    v23 = v22 | 4;\n    if ( (v19 & 0x400) == 0 )\n      v23 = v22;\n    v24 = v23 | 2;\n    if ( (v19 & 0x800) == 0 )\n      v24 = v23;\n    v25 = v24 | 1;\n    if ( (v19 & 0x1000) == 0 )\n      v25 = v24;\n    v10 = v25 | 0x80000;\n    if ( (v19 & 0x100) == 0 )\n      v10 = v25;\n    v26 = v19 & 0x6000;\n    if ( (v19 & 0x6000) != 0 )\n    {\n      switch ( v26 )\n      {\n        case 8192:\n          v10 |= 0x100u;\n          break;\n        case 16384:\n          v10 |= 0x200u;\n          break;\n        case 24576:\n          v10 |= 0x300u;\n          break;\n      }\n    }\n    v27 = (v19 & 0x8040) - 64;\n    if ( v27 )\n    {\n      v28 = v27 - 32704;\n      if ( v28 )\n      {\n        if ( v28 == 64 )\n          v10 |= 0x1000000u;\n      }\n      else\n      {\n        v10 |= 0x3000000u;\n      }\n    }\n    else\n    {\n      v10 |= 0x2000000u;\n    }\n  }\n  return v10;\n}", "assembly": "; \n; common_control87 from 0x180142198 to 0x180142456 (702 bytes)\n; \n; 2 xrefs:\n; > j_common_control87 @ 0x180142190\n; > <???> @ 0x180203d28\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, 0x180142198\nmov     [rsp+arg_10], rsi                                              ; +0x5, 0x18014219d\npush    r12                                                            ; +0xa, 0x1801421a2\npush    r14                                                            ; +0xc, 0x1801421a4\npush    r15                                                            ; +0xe, 0x1801421a6\nsub     rsp, 20h                                                       ; +0x10, 0x1801421a8\nmov     r12d, edx                                                      ; +0x14, 0x1801421ac\nmov     ebx, ecx                                                       ; +0x17, 0x1801421af\nand     r12d, 308031Fh                                                 ; +0x19, 0x1801421b1\ncall    _get_fpsr                                                      ; +0x20, 0x1801421b8\nmov     r10d, eax                                                      ; +0x25, 0x1801421bd\nmov     r9d, eax                                                       ; +0x28, 0x1801421c0\nshr     r9d, 3                                                         ; +0x2b, 0x1801421c3\nand     r9d, 10h                                                       ; +0x2f, 0x1801421c7\nmov     r8d, eax                                                       ; +0x33, 0x1801421cb\nmov     r14d, 200h                                                     ; +0x36, 0x1801421ce\nmov     edx, r9d                                                       ; +0x3c, 0x1801421d4\nor      edx, 8                                                         ; +0x3f, 0x1801421d7\nand     r8d, r14d                                                      ; +0x42, 0x1801421da\ncmovz   edx, r9d                                                       ; +0x45, 0x1801421dd\nmov     ecx, edx                                                       ; +0x49, 0x1801421e1\nor      ecx, 4                                                         ; +0x4b, 0x1801421e3\nand     eax, 400h                                                      ; +0x4e, 0x1801421e6\ncmovz   ecx, edx                                                       ; +0x53, 0x1801421eb\nmov     eax, r10d                                                      ; +0x56, 0x1801421ee\nmov     r9d, 800h                                                      ; +0x59, 0x1801421f1\nmov     edx, ecx                                                       ; +0x5f, 0x1801421f7\nor      edx, 2                                                         ; +0x61, 0x1801421f9\nand     eax, r9d                                                       ; +0x64, 0x1801421fc\ncmovz   edx, ecx                                                       ; +0x67, 0x1801421ff\nmov     eax, r10d                                                      ; +0x6a, 0x180142202\nmov     r11d, 1000h                                                    ; +0x6d, 0x180142205\nmov     ecx, edx                                                       ; +0x73, 0x18014220b\nor      ecx, 1                                                         ; +0x75, 0x18014220d\nand     eax, r11d                                                      ; +0x78, 0x180142210\ncmovz   ecx, edx                                                       ; +0x7b, 0x180142213\nmov     eax, r10d                                                      ; +0x7e, 0x180142216\nmov     esi, 100h                                                      ; +0x81, 0x180142219\nmov     edx, ecx                                                       ; +0x86, 0x18014221e\nbts     edx, 13h                                                       ; +0x88, 0x180142220\nand     eax, esi                                                       ; +0x8c, 0x180142224\ncmovz   edx, ecx                                                       ; +0x8e, 0x180142226\nmov     eax, r10d                                                      ; +0x91, 0x180142229\nmov     r15d, 6000h                                                    ; +0x94, 0x18014222c\nand     eax, r15d                                                      ; +0x9a, 0x180142232\njz      short loc_180142259                                            ; +0x9d, 0x180142235\ncmp     eax, 2000h                                                     ; +0x9f, 0x180142237\njz      short loc_180142257                                            ; +0xa4, 0x18014223c\ncmp     eax, 4000h                                                     ; +0xa6, 0x18014223e\njz      short loc_180142252                                            ; +0xab, 0x180142243\ncmp     eax, r15d                                                      ; +0xad, 0x180142245\njnz     short loc_180142259                                            ; +0xb0, 0x180142248\nor      edx, 300h                                                      ; +0xb2, 0x18014224a\njmp     short loc_180142259                                            ; +0xb8, 0x180142250\nor      edx, r14d                                                      ; +0xba, 0x180142252\njmp     short loc_180142259                                            ; +0xbd, 0x180142255\nor      edx, esi                                                       ; +0xbf, 0x180142257\nand     r10d, 8040h                                                    ; +0xc1, 0x180142259\nsub     r10d, 40h ; '@'                                                ; +0xc8, 0x180142260\njz      short loc_180142283                                            ; +0xcc, 0x180142264\nsub     r10d, 7FC0h                                                    ; +0xce, 0x180142266\njz      short loc_18014227B                                            ; +0xd5, 0x18014226d\ncmp     r10d, 40h ; '@'                                                ; +0xd7, 0x18014226f\njnz     short loc_180142287                                            ; +0xdb, 0x180142273\nbts     edx, 18h                                                       ; +0xdd, 0x180142275\njmp     short loc_180142287                                            ; +0xe1, 0x180142279\nor      edx, 3000000h                                                  ; +0xe3, 0x18014227b\njmp     short loc_180142287                                            ; +0xe9, 0x180142281\nbts     edx, 19h                                                       ; +0xeb, 0x180142283\nmov     r8d, r12d                                                      ; +0xef, 0x180142287\nnot     r8d                                                            ; +0xf2, 0x18014228a\nand     r8d, edx                                                       ; +0xf5, 0x18014228d\nand     ebx, r12d                                                      ; +0xf8, 0x180142290\nor      r8d, ebx                                                       ; +0xfb, 0x180142293\ncmp     r8d, edx                                                       ; +0xfe, 0x180142296\njz      loc_18014243F                                                  ; +0x101, 0x180142299\nmov     ecx, r8d                                                       ; +0x107, 0x18014229f\nand     ecx, 10h                                                       ; +0x10a, 0x1801422a2\nshl     ecx, 3                                                         ; +0x10d, 0x1801422a5\nmov     eax, r8d                                                       ; +0x110, 0x1801422a8\nmov     edx, ecx                                                       ; +0x113, 0x1801422ab\nor      edx, r14d                                                      ; +0x115, 0x1801422ad\nand     al, 8                                                          ; +0x118, 0x1801422b0\ncmovz   edx, ecx                                                       ; +0x11a, 0x1801422b2\nmov     eax, r8d                                                       ; +0x11d, 0x1801422b5\nmov     ecx, edx                                                       ; +0x120, 0x1801422b8\nbts     ecx, 0Ah                                                       ; +0x122, 0x1801422ba\nand     al, 4                                                          ; +0x126, 0x1801422be\ncmovz   ecx, edx                                                       ; +0x128, 0x1801422c0\nmov     eax, r8d                                                       ; +0x12b, 0x1801422c3\nmov     edx, ecx                                                       ; +0x12e, 0x1801422c6\nor      edx, r9d                                                       ; +0x130, 0x1801422c8\nand     al, 2                                                          ; +0x133, 0x1801422cb\ncmovz   edx, ecx                                                       ; +0x135, 0x1801422cd\nmov     eax, r8d                                                       ; +0x138, 0x1801422d0\nmov     ecx, edx                                                       ; +0x13b, 0x1801422d3\nor      ecx, r11d                                                      ; +0x13d, 0x1801422d5\nand     al, 1                                                          ; +0x140, 0x1801422d8\ncmovz   ecx, edx                                                       ; +0x142, 0x1801422da\nmov     eax, r8d                                                       ; +0x145, 0x1801422dd\nmov     ebx, ecx                                                       ; +0x148, 0x1801422e0\nor      ebx, esi                                                       ; +0x14a, 0x1801422e2\nand     eax, 80000h                                                    ; +0x14c, 0x1801422e4\ncmovz   ebx, ecx                                                       ; +0x151, 0x1801422e9\nmov     eax, r8d                                                       ; +0x154, 0x1801422ec\nand     eax, 300h                                                      ; +0x157, 0x1801422ef\njz      short loc_180142319                                            ; +0x15c, 0x1801422f4\ncmp     eax, esi                                                       ; +0x15e, 0x1801422f6\njz      short loc_180142315                                            ; +0x160, 0x1801422f8\ncmp     eax, r14d                                                      ; +0x162, 0x1801422fa\njz      short loc_18014230F                                            ; +0x165, 0x1801422fd\nmov     [rsp+38h+arg_0], ebx                                           ; +0x167, 0x1801422ff\ncmp     eax, 300h                                                      ; +0x16b, 0x180142303\njnz     short loc_18014231D                                            ; +0x170, 0x180142308\nor      ebx, r15d                                                      ; +0x172, 0x18014230a\njmp     short loc_180142319                                            ; +0x175, 0x18014230d\nbts     ebx, 0Eh                                                       ; +0x177, 0x18014230f\njmp     short loc_180142319                                            ; +0x17b, 0x180142313\nbts     ebx, 0Dh                                                       ; +0x17d, 0x180142315\nmov     [rsp+38h+arg_0], ebx                                           ; +0x181, 0x180142319\nand     r8d, 3000000h                                                  ; +0x185, 0x18014231d\ncmp     r8d, 1000000h                                                  ; +0x18c, 0x180142324\njz      short loc_18014234A                                            ; +0x193, 0x18014232b\ncmp     r8d, 2000000h                                                  ; +0x195, 0x18014232d\njz      short loc_180142345                                            ; +0x19c, 0x180142334\ncmp     r8d, 3000000h                                                  ; +0x19e, 0x180142336\njnz     short loc_180142354                                            ; +0x1a5, 0x18014233d\nbts     ebx, 0Fh                                                       ; +0x1a7, 0x18014233f\njmp     short loc_180142350                                            ; +0x1ab, 0x180142343\nor      ebx, 40h                                                       ; +0x1ad, 0x180142345\njmp     short loc_180142350                                            ; +0x1b0, 0x180142348\nor      ebx, 8040h                                                     ; +0x1b2, 0x18014234a\nmov     [rsp+38h+arg_0], ebx                                           ; +0x1b8, 0x180142350\ncmp     cs:byte_1801B2300, 0                                           ; +0x1bc, 0x180142354\njz      short loc_180142393                                            ; +0x1c3, 0x18014235b\ntest    bl, 40h                                                        ; +0x1c5, 0x18014235d\njz      short loc_180142393                                            ; +0x1c8, 0x180142360\nmov     ecx, ebx                                                       ; +0x1ca, 0x180142362\ncall    _set_fpsr                                                      ; +0x1cc, 0x180142364\njmp     short loc_18014239D                                            ; +0x1d1, 0x180142369\nmov     cs:byte_1801B2300, 0                                           ; +0x1d3, 0x18014236b\nmov     ebx, [rsp+38h+arg_0]                                           ; +0x1da, 0x180142372\nand     ebx, 0FFFFFFBFh                                                ; +0x1de, 0x180142376\nmov     ecx, ebx                                                       ; +0x1e1, 0x180142379\ncall    _set_fpsr                                                      ; +0x1e3, 0x18014237b\nmov     esi, 100h                                                      ; +0x1e8, 0x180142380\nmov     r14d, 200h                                                     ; +0x1ed, 0x180142385\nmov     r15d, 6000h                                                    ; +0x1f3, 0x18014238b\njmp     short loc_18014239D                                            ; +0x1f9, 0x180142391\nand     ebx, 0FFFFFFBFh                                                ; +0x1fb, 0x180142393\nmov     ecx, ebx                                                       ; +0x1fe, 0x180142396\ncall    _set_fpsr                                                      ; +0x200, 0x180142398\nmov     ecx, ebx                                                       ; +0x205, 0x18014239d\nshr     ecx, 3                                                         ; +0x207, 0x18014239f\nand     ecx, 10h                                                       ; +0x20a, 0x1801423a2\nmov     eax, ebx                                                       ; +0x20d, 0x1801423a5\nmov     edx, ecx                                                       ; +0x20f, 0x1801423a7\nor      edx, 8                                                         ; +0x211, 0x1801423a9\nand     eax, r14d                                                      ; +0x214, 0x1801423ac\ncmovz   edx, ecx                                                       ; +0x217, 0x1801423af\nmov     eax, ebx                                                       ; +0x21a, 0x1801423b2\nmov     ecx, edx                                                       ; +0x21c, 0x1801423b4\nor      ecx, 4                                                         ; +0x21e, 0x1801423b6\nand     eax, 400h                                                      ; +0x221, 0x1801423b9\ncmovz   ecx, edx                                                       ; +0x226, 0x1801423be\nmov     eax, ebx                                                       ; +0x229, 0x1801423c1\nmov     edx, ecx                                                       ; +0x22b, 0x1801423c3\nor      edx, 2                                                         ; +0x22d, 0x1801423c5\nand     eax, 800h                                                      ; +0x230, 0x1801423c8\ncmovz   edx, ecx                                                       ; +0x235, 0x1801423cd\nmov     eax, ebx                                                       ; +0x238, 0x1801423d0\nmov     ecx, edx                                                       ; +0x23a, 0x1801423d2\nor      ecx, 1                                                         ; +0x23c, 0x1801423d4\nand     eax, 1000h                                                     ; +0x23f, 0x1801423d7\ncmovz   ecx, edx                                                       ; +0x244, 0x1801423dc\nmov     eax, ebx                                                       ; +0x247, 0x1801423df\nmov     edx, ecx                                                       ; +0x249, 0x1801423e1\nbts     edx, 13h                                                       ; +0x24b, 0x1801423e3\nand     eax, esi                                                       ; +0x24f, 0x1801423e7\ncmovz   edx, ecx                                                       ; +0x251, 0x1801423e9\nmov     eax, ebx                                                       ; +0x254, 0x1801423ec\nand     eax, r15d                                                      ; +0x256, 0x1801423ee\njz      short loc_180142415                                            ; +0x259, 0x1801423f1\ncmp     eax, 2000h                                                     ; +0x25b, 0x1801423f3\njz      short loc_180142413                                            ; +0x260, 0x1801423f8\ncmp     eax, 4000h                                                     ; +0x262, 0x1801423fa\njz      short loc_18014240E                                            ; +0x267, 0x1801423ff\ncmp     eax, r15d                                                      ; +0x269, 0x180142401\njnz     short loc_180142415                                            ; +0x26c, 0x180142404\nor      edx, 300h                                                      ; +0x26e, 0x180142406\njmp     short loc_180142415                                            ; +0x274, 0x18014240c\nor      edx, r14d                                                      ; +0x276, 0x18014240e\njmp     short loc_180142415                                            ; +0x279, 0x180142411\nor      edx, esi                                                       ; +0x27b, 0x180142413\nand     ebx, 8040h                                                     ; +0x27d, 0x180142415\nsub     ebx, 40h ; '@'                                                 ; +0x283, 0x18014241b\njz      short loc_18014243B                                            ; +0x286, 0x18014241e\nsub     ebx, 7FC0h                                                     ; +0x288, 0x180142420\njz      short loc_180142433                                            ; +0x28e, 0x180142426\ncmp     ebx, 40h ; '@'                                                 ; +0x290, 0x180142428\njnz     short loc_18014243F                                            ; +0x293, 0x18014242b\nbts     edx, 18h                                                       ; +0x295, 0x18014242d\njmp     short loc_18014243F                                            ; +0x299, 0x180142431\nor      edx, 3000000h                                                  ; +0x29b, 0x180142433\njmp     short loc_18014243F                                            ; +0x2a1, 0x180142439\nbts     edx, 19h                                                       ; +0x2a3, 0x18014243b\nmov     eax, edx                                                       ; +0x2a7, 0x18014243f\nmov     rbx, [rsp+38h+arg_8]                                           ; +0x2a9, 0x180142441\nmov     rsi, [rsp+38h+arg_10]                                          ; +0x2ae, 0x180142446\nadd     rsp, 20h                                                       ; +0x2b3, 0x18014244b\npop     r15                                                            ; +0x2b7, 0x18014244f\npop     r14                                                            ; +0x2b9, 0x180142451\npop     r12                                                            ; +0x2bb, 0x180142453\nretn                                                                   ; +0x2bd, 0x180142455", "xrefs": ["j_common_control87 @ 0x180142190", "<???> @ 0x180203d28"], "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"}