// // common_control87 from 0x180142198 to 0x180142456 (702 bytes) // // 2 xrefs: // > j_common_control87 @ 0x180142190 // > @ 0x180203d28 // // 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 // __int64 __fastcall common_control87(int a1, int a2) { int v3; // r12d unsigned int fpsr; // eax __int16 v5; // r10 int v6; // edx int v7; // ecx int v8; // edx int v9; // ecx unsigned int v10; // edx int v11; // eax int v12; // r10d int v13; // r10d int v14; // r8d int v15; // edx int v16; // ecx int v17; // edx int v18; // ecx unsigned int v19; // ebx int v20; // eax int v21; // r8d int v22; // edx int v23; // ecx int v24; // edx int v25; // ecx int v26; // eax int v27; // ebx int v28; // ebx v3 = a2 & 0x308031F; fpsr = get_fpsr(); v5 = fpsr; v6 = (fpsr >> 3) & 0x10 | 8; if ( (fpsr & 0x200) == 0 ) v6 = (fpsr >> 3) & 0x10; v7 = v6 | 4; if ( (fpsr & 0x400) == 0 ) v7 = v6; v8 = v7 | 2; if ( (fpsr & 0x800) == 0 ) v8 = v7; v9 = v8 | 1; if ( (fpsr & 0x1000) == 0 ) v9 = v8; v10 = v9 | 0x80000; if ( (fpsr & 0x100) == 0 ) v10 = v9; v11 = fpsr & 0x6000; if ( (v5 & 0x6000) != 0 ) { switch ( v11 ) { case 8192: v10 |= 0x100u; break; case 16384: v10 |= 0x200u; break; case 24576: v10 |= 0x300u; break; } } v12 = (v5 & 0x8040) - 64; if ( v12 ) { v13 = v12 - 32704; if ( v13 ) { if ( v13 == 64 ) v10 |= 0x1000000u; } else { v10 |= 0x3000000u; } } else { v10 |= 0x2000000u; } v14 = v3 & a1 | v10 & ~v3; if ( v14 != v10 ) { v15 = (8 * (v14 & 0x10)) | 0x200; if ( (v14 & 8) == 0 ) v15 = 8 * (v14 & 0x10); v16 = v15 | 0x400; if ( (v14 & 4) == 0 ) v16 = v15; v17 = v16 | 0x800; if ( (v14 & 2) == 0 ) v17 = v16; v18 = v17 | 0x1000; if ( (v14 & 1) == 0 ) v18 = v17; v19 = v18 | 0x100; if ( (v14 & 0x80000) == 0 ) v19 = v18; v20 = v14 & 0x300; if ( (v14 & 0x300) != 0 ) { switch ( v20 ) { case 256: v19 |= 0x2000u; break; case 512: v19 |= 0x4000u; break; case 768: v19 |= 0x6000u; break; } } v21 = v14 & 0x3000000; switch ( v21 ) { case 16777216: v19 |= 0x8040u; break; case 33554432: v19 |= 0x40u; break; case 50331648: v19 |= 0x8000u; break; } if ( byte_1801B2300 && (v19 & 0x40) != 0 ) { set_fpsr(v19); } else { v19 &= ~0x40u; set_fpsr(v19); } v22 = (v19 >> 3) & 0x10 | 8; if ( (v19 & 0x200) == 0 ) v22 = (v19 >> 3) & 0x10; v23 = v22 | 4; if ( (v19 & 0x400) == 0 ) v23 = v22; v24 = v23 | 2; if ( (v19 & 0x800) == 0 ) v24 = v23; v25 = v24 | 1; if ( (v19 & 0x1000) == 0 ) v25 = v24; v10 = v25 | 0x80000; if ( (v19 & 0x100) == 0 ) v10 = v25; v26 = v19 & 0x6000; if ( (v19 & 0x6000) != 0 ) { switch ( v26 ) { case 8192: v10 |= 0x100u; break; case 16384: v10 |= 0x200u; break; case 24576: v10 |= 0x300u; break; } } v27 = (v19 & 0x8040) - 64; if ( v27 ) { v28 = v27 - 32704; if ( v28 ) { if ( v28 == 64 ) v10 |= 0x1000000u; } else { v10 |= 0x3000000u; } } else { v10 |= 0x2000000u; } } return v10; }