{"type": "func", "start": 6443724272, "end": 6443724764, "name": "__remainder_piby2_fma3", "pseudocode": "// \n// __remainder_piby2_fma3 from 0x180136df0 to 0x180136fdc (492 bytes)\n// \n// 2 xrefs:\n// > cosf @ 0x18012b3e0\n// > <???> @ 0x180203590\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!\n__int64 __fastcall _remainder_piby2_fma3(double _XMM0_8)\n{\n  unsigned __int64 v3; // rcx\n  unsigned __int64 v4; // r11\n  unsigned __int64 v6; // rax\n  __int64 v7; // rcx\n  unsigned __int64 v10; // r8\n  unsigned __int64 v11; // r11\n  unsigned __int128 v13; // kr00_16\n  unsigned __int64 v14; // r10\n  unsigned __int64 v15; // rdx\n  bool v16; // cf\n  unsigned __int64 v17; // rax\n  unsigned __int64 v18; // r10\n  unsigned __int64 v19; // r11\n  __int64 v21; // rcx\n  unsigned __int64 v22; // r9\n  __int64 v23; // r11\n  __int64 v24; // rcx\n  unsigned __int64 v25; // r8\n  __int64 v26; // rcx\n  unsigned __int64 v27; // r10\n  __int64 v28; // r9\n  __int64 v29; // r11\n  unsigned __int64 v32; // rcx\n\n  _R9 = &unk_180175690;\n  __asm { vmovq   r11, xmm0 }\n  v3 = _R11;\n  v4 = (_R11 >> 52) - 1023;\n  _R10 = 134 - (v4 >> 3);\n  v6 = *(_QWORD *)((char *)&unk_180175690 + _R10);\n  v7 = v3 & 0xFFFFFFFFFFFFFLL | 0x10000000000000LL;\n  _R10 += 8;\n  __asm { vmovdqu xmm0, xmmword ptr [r9+r10] }\n  _RAX = (unsigned __int64)v7 * (unsigned __int128)v6;\n  v10 = _RAX;\n  __asm { vmovq   rax, xmm0 }\n  v11 = v4 & 7;\n  __asm { vpsrldq xmm0, xmm0, 8 }\n  v13 = *((unsigned __int64 *)&_RAX + 1) + (unsigned __int64)v7 * (unsigned __int128)(unsigned __int64)_RAX;\n  __asm { vmovq   rax, xmm0 }\n  v14 = v7 * _RAX + *((_QWORD *)&v13 + 1);\n  v15 = 0;\n  v16 = __CFSHR__(v14, 54 - v11);\n  v17 = v14 >> (54 - (unsigned __int8)v11);\n  if ( v16 )\n  {\n    v14 = ~v14;\n    v10 = ~v10;\n    v15 = 0x8000000000000000uLL;\n    *(_QWORD *)&v13 = ~(_QWORD)v13;\n  }\n  v18 = v14 << ((unsigned __int8)v11 + 10) >> ((unsigned __int8)v11 + 10);\n  v19 = v11 - 54;\n  if ( !_BitScanReverse64((unsigned __int64 *)&v21, v18) )\n  {\n    v18 = v13;\n    v22 = v10;\n    v10 = 0;\n    _BitScanReverse64((unsigned __int64 *)&v21, v13);\n    v19 -= 64LL;\n    *(_QWORD *)&v13 = v22;\n  }\n  v23 = v21 + v19;\n  v24 = v21 - 52;\n  if ( v24 < 0 )\n  {\n    v26 = -v24;\n    v27 = v18 << v26;\n    v28 = (_QWORD)v13 << v26;\n    LOBYTE(v26) = 64 - v26;\n    v18 = ((unsigned __int64)v13 >> v26) | v27;\n    *(_QWORD *)&v13 = (v10 >> v26) | v28;\n  }\n  else if ( v24 )\n  {\n    v25 = v18;\n    v18 >>= v24;\n    *(_QWORD *)&v13 = (v25 << (64 - (unsigned __int8)v24)) | ((unsigned __int64)v13 >> v24);\n  }\n  v29 = v23 + 1023;\n  _R10 = (v29 << 52) | v15 | v18 & 0xFFEFFFFFFFFFFFFFuLL;\n  __asm { vmovq   xmm2, r10 }\n  _BitScanReverse64(&v32, v13);\n  _R9 = ((v29 - (64 - v32 + 52)) << 52) | v15 | ((_QWORD)v13 << (64 - (unsigned __int8)v32) >> 12);\n  __asm\n  {\n    vmovq   xmm1, r9\n    vandpd  xmm4, xmm2, cs:xmmword_180176030\n    vsubsd  xmm0, xmm2, xmm4\n    vmulsd  xmm5, xmm2, cs:qword_180176020\n    vmulsd  xmm3, xmm4, cs:qword_180176040\n    vsubsd  xmm3, xmm3, xmm5\n    vfmadd231sd xmm3, xmm0, cs:qword_180176040\n    vfmadd231sd xmm3, xmm4, cs:qword_180176050\n    vfmadd231sd xmm3, xmm0, cs:qword_180176050\n    vmulsd  xmm4, xmm1, cs:qword_180176020\n    vfmadd231sd xmm4, xmm2, cs:qword_180176060\n    vaddsd  xmm3, xmm3, xmm4\n    vaddsd  xmm0, xmm5, xmm3\n    vsubsd  xmm1, xmm5, xmm0\n    vaddsd  xmm1, xmm1, xmm3\n  }\n  return (v16 + (_BYTE)v17) & 3;\n}", "assembly": "; \n; __remainder_piby2_fma3 from 0x180136df0 to 0x180136fdc (492 bytes)\n; \n; 2 xrefs:\n; > cosf @ 0x18012b3e0\n; > <???> @ 0x180203590\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, 0x180136df0\nlea     r9, unk_180175690                                              ; +0x4, 0x180136df4\nvmovq   r11, xmm0                                                      ; +0xb, 0x180136dfb\nmov     rcx, r11                                                       ; +0x10, 0x180136e00\nshr     r11, 34h                                                       ; +0x13, 0x180136e03\nsub     r11, 3FFh                                                      ; +0x17, 0x180136e07\nmov     r10, r11                                                       ; +0x1e, 0x180136e0e\nshr     r10, 3                                                         ; +0x21, 0x180136e11\nsub     r10, 86h                                                       ; +0x25, 0x180136e15\nneg     r10                                                            ; +0x2c, 0x180136e1c\nmov     rax, [r9+r10]                                                  ; +0x2f, 0x180136e1f\nshl     rcx, 0Ch                                                       ; +0x33, 0x180136e23\nshr     rcx, 0Ch                                                       ; +0x37, 0x180136e27\nbts     rcx, 34h ; '4'                                                 ; +0x3b, 0x180136e2b\nadd     r10, 8                                                         ; +0x40, 0x180136e30\nvmovdqu xmm0, xmmword ptr [r9+r10]                                     ; +0x44, 0x180136e34\nmul     rcx                                                            ; +0x4a, 0x180136e3a\nmov     r8, rax                                                        ; +0x4d, 0x180136e3d\nmov     r10, rdx                                                       ; +0x50, 0x180136e40\nvmovq   rax, xmm0                                                      ; +0x53, 0x180136e43\nmul     rcx                                                            ; +0x58, 0x180136e48\nand     r11, 7                                                         ; +0x5b, 0x180136e4b\nvpsrldq xmm0, xmm0, 8                                                  ; +0x5f, 0x180136e4f\nadd     rax, r10                                                       ; +0x64, 0x180136e54\nadc     rdx, 0                                                         ; +0x67, 0x180136e57\nmov     r9, rax                                                        ; +0x6b, 0x180136e5b\nmov     r10, rdx                                                       ; +0x6e, 0x180136e5e\nvmovq   rax, xmm0                                                      ; +0x71, 0x180136e61\nmul     rcx                                                            ; +0x76, 0x180136e66\nadd     r10, rax                                                       ; +0x79, 0x180136e69\nmov     rcx, 36h ; '6'                                                 ; +0x7c, 0x180136e6c\nmov     rax, r10                                                       ; +0x83, 0x180136e73\nsub     rcx, r11                                                       ; +0x86, 0x180136e76\nxor     rdx, rdx                                                       ; +0x89, 0x180136e79\nshr     rax, cl                                                        ; +0x8c, 0x180136e7c\njnb     short L__no_point_five_1                                       ; +0x8f, 0x180136e7f\nnot     r10                                                            ; +0x91, 0x180136e81\nnot     r9                                                             ; +0x94, 0x180136e84\nnot     r8                                                             ; +0x97, 0x180136e87\nmov     rdx, 8000000000000000h                                         ; +0x9a, 0x180136e8a\nnop     word ptr [rax+rax+00000000h]                                   ; +0xa4, 0x180136e94\nadc     rax, 0                                                         ; +0xb0, 0x180136ea0\nand     rax, 3                                                         ; +0xb4, 0x180136ea4\nmov     [rsp+38h+var_18], rax                                          ; +0xb8, 0x180136ea8\nmov     rcx, r11                                                       ; +0xbd, 0x180136ead\nadd     rcx, 0Ah                                                       ; +0xc0, 0x180136eb0\nshl     r10, cl                                                        ; +0xc4, 0x180136eb4\nshr     r10, cl                                                        ; +0xc7, 0x180136eb7\nsub     rcx, 40h ; '@'                                                 ; +0xca, 0x180136eba\nmov     r11, rcx                                                       ; +0xce, 0x180136ebe\nbsr     rcx, r10                                                       ; +0xd1, 0x180136ec1\njnz     short L__form_mantissa_1                                       ; +0xd5, 0x180136ec5\nmov     r10, r9                                                        ; +0xd7, 0x180136ec7\nmov     r9, r8                                                         ; +0xda, 0x180136eca\nmov     r8, 0                                                          ; +0xdd, 0x180136ecd\nbsr     rcx, r10                                                       ; +0xe4, 0x180136ed4\nsub     r11, 40h ; '@'                                                 ; +0xe8, 0x180136ed8\nnop     dword ptr [rax+00h]                                            ; +0xec, 0x180136edc\nadd     r11, rcx                                                       ; +0xf0, 0x180136ee0\nsub     rcx, 34h ; '4'                                                 ; +0xf3, 0x180136ee3\ncmp     rcx, 0                                                         ; +0xf7, 0x180136ee7\njl      short L__hsb_below_52_1                                        ; +0xfb, 0x180136eeb\njz      short L__form_numbers_1                                        ; +0xfd, 0x180136eed\nmov     r8, r10                                                        ; +0xff, 0x180136eef\nshr     r10, cl                                                        ; +0x102, 0x180136ef2\nshr     r9, cl                                                         ; +0x105, 0x180136ef5\nsub     rcx, 40h ; '@'                                                 ; +0x108, 0x180136ef8\nneg     rcx                                                            ; +0x10c, 0x180136efc\nshl     r8, cl                                                         ; +0x10f, 0x180136eff\nor      r9, r8                                                         ; +0x112, 0x180136f02\njmp     short L__form_numbers_1                                        ; +0x115, 0x180136f05\nalign 10h                                                              ; +0x117, 0x180136f07\nneg     rcx                                                            ; +0x120, 0x180136f10\nmov     rax, r9                                                        ; +0x123, 0x180136f13\nshl     r10, cl                                                        ; +0x126, 0x180136f16\nshl     r9, cl                                                         ; +0x129, 0x180136f19\nsub     rcx, 40h ; '@'                                                 ; +0x12c, 0x180136f1c\nneg     rcx                                                            ; +0x130, 0x180136f20\nshr     rax, cl                                                        ; +0x133, 0x180136f23\nor      r10, rax                                                       ; +0x136, 0x180136f26\nshr     r8, cl                                                         ; +0x139, 0x180136f29\nor      r9, r8                                                         ; +0x13c, 0x180136f2c\nnop                                                                    ; +0x13f, 0x180136f2f\nadd     r11, 3FFh                                                      ; +0x140, 0x180136f30\nbtr     r10, 34h ; '4'                                                 ; +0x147, 0x180136f37\nmov     rcx, r11                                                       ; +0x14c, 0x180136f3c\nor      r10, rdx                                                       ; +0x14f, 0x180136f3f\nshl     rcx, 34h                                                       ; +0x152, 0x180136f42\nor      r10, rcx                                                       ; +0x156, 0x180136f46\nvmovq   xmm2, r10                                                      ; +0x159, 0x180136f49\nbsr     rcx, r9                                                        ; +0x15e, 0x180136f4e\nsub     rcx, 40h ; '@'                                                 ; +0x162, 0x180136f52\nneg     rcx                                                            ; +0x166, 0x180136f56\nshl     r9, cl                                                         ; +0x169, 0x180136f59\nshr     r9, 0Ch                                                        ; +0x16c, 0x180136f5c\nadd     rcx, 34h ; '4'                                                 ; +0x170, 0x180136f60\nsub     r11, rcx                                                       ; +0x174, 0x180136f64\nshl     r11, 34h                                                       ; +0x177, 0x180136f67\nor      r9, rdx                                                        ; +0x17b, 0x180136f6b\nor      r9, r11                                                        ; +0x17e, 0x180136f6e\nvmovq   xmm1, r9                                                       ; +0x181, 0x180136f71\nvandpd  xmm4, xmm2, cs:xmmword_180176030                               ; +0x186, 0x180136f76\nvsubsd  xmm0, xmm2, xmm4                                               ; +0x18e, 0x180136f7e\nvmulsd  xmm5, xmm2, cs:qword_180176020                                 ; +0x192, 0x180136f82\nvmulsd  xmm3, xmm4, cs:qword_180176040                                 ; +0x19a, 0x180136f8a\nvsubsd  xmm3, xmm3, xmm5                                               ; +0x1a2, 0x180136f92\nvfmadd231sd xmm3, xmm0, cs:qword_180176040                             ; +0x1a6, 0x180136f96\nvfmadd231sd xmm3, xmm4, cs:qword_180176050                             ; +0x1af, 0x180136f9f\nvfmadd231sd xmm3, xmm0, cs:qword_180176050                             ; +0x1b8, 0x180136fa8\nvmulsd  xmm4, xmm1, cs:qword_180176020                                 ; +0x1c1, 0x180136fb1\nvfmadd231sd xmm4, xmm2, cs:qword_180176060                             ; +0x1c9, 0x180136fb9\nvaddsd  xmm3, xmm3, xmm4                                               ; +0x1d2, 0x180136fc2\nvaddsd  xmm0, xmm5, xmm3                                               ; +0x1d6, 0x180136fc6\nvsubsd  xmm1, xmm5, xmm0                                               ; +0x1da, 0x180136fca\nvaddsd  xmm1, xmm1, xmm3                                               ; +0x1de, 0x180136fce\nmov     rax, [rsp+38h+var_18]                                          ; +0x1e2, 0x180136fd2\nadd     rsp, 38h                                                       ; +0x1e7, 0x180136fd7\nretn                                                                   ; +0x1eb, 0x180136fdb", "xrefs": ["cosf @ 0x18012b3e0", "<???> @ 0x180203590"], "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"}