{"type": "func", "start": 6443723936, "end": 6443724268, "name": "__remainder_piby2d2f_forAsm", "pseudocode": "// \n// __remainder_piby2d2f_forAsm from 0x180136ca0 to 0x180136dec (332 bytes)\n// \n// 2 xrefs:\n// > cosf @ 0x18012b15a\n// > <???> @ 0x180203584\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 __fastcall _remainder_piby2d2f_forAsm(double a1)\n{\n  unsigned __int64 v1; // r11\n  __int64 v2; // r10\n  __int64 v3; // rcx\n  __m128i v4; // xmm0\n  __int64 v5; // r8\n  unsigned __int64 v6; // r11\n  unsigned __int64 v7; // r9\n  __int64 v8; // r10\n  unsigned __int128 v9; // kr10_16\n  unsigned __int64 v10; // rdx\n  unsigned __int64 v11; // r10\n  unsigned __int64 v12; // r11\n  __int64 v14; // rcx\n  __int64 v15; // r11\n  __int64 v16; // rcx\n\n  v1 = (*(_QWORD *)&a1 >> 52) - 1023LL;\n  v2 = 134 - (v1 >> 3);\n  v3 = *(_QWORD *)&a1 & 0xFFFFFFFFFFFFFLL | 0x10000000000000LL;\n  v4 = _mm_loadu_si128((const __m128i *)((char *)&unk_180175690 + v2 + 8));\n  v5 = v3 * *(_QWORD *)((char *)&unk_180175690 + v2);\n  v6 = v1 & 7;\n  v9 = __PAIR128__(\n         v3 * _mm_srli_si128(v4, 8).m128i_u64[0],\n         ((unsigned __int64)v3 * (unsigned __int128)*(unsigned __int64 *)((char *)&unk_180175690 + v2)) >> 64)\n     + (unsigned __int64)v3 * (unsigned __int128)v4.m128i_u64[0];\n  v8 = *((_QWORD *)&v9 + 1);\n  v7 = v9;\n  v10 = 0;\n  if ( __CFSHR__(*((_QWORD *)&v9 + 1), 54 - v6) )\n  {\n    v8 = ~*((_QWORD *)&v9 + 1);\n    v7 = ~(_QWORD)v9;\n    v5 = ~v5;\n    v10 = 0x8000000000000000uLL;\n  }\n  v11 = (unsigned __int64)(v8 << ((unsigned __int8)v6 + 10)) >> ((unsigned __int8)v6 + 10);\n  v12 = v6 - 54;\n  if ( !_BitScanReverse64((unsigned __int64 *)&v14, v11) )\n  {\n    v11 = v7;\n    v7 = v5;\n    _BitScanReverse64((unsigned __int64 *)&v14, v11);\n    v12 -= 64LL;\n  }\n  v15 = v14 + v12;\n  v16 = v14 - 52;\n  if ( v16 < 0 )\n  {\n    v11 = (v7 >> ((unsigned __int8)v16 + 64)) | (v11 << -(char)v16);\n  }\n  else if ( v16 )\n  {\n    v11 >>= v16;\n  }\n  return COERCE_DOUBLE(((v15 + 1023) << 52) | v10 | v11 & 0xFFEFFFFFFFFFFFFFuLL) * 1.570796326794897;\n}", "assembly": "; \n; __remainder_piby2d2f_forAsm from 0x180136ca0 to 0x180136dec (332 bytes)\n; \n; 2 xrefs:\n; > cosf @ 0x18012b15a\n; > <???> @ 0x180203584\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\nlea     r9, unk_180175690                                              ; +0x0, 0x180136ca0\nmovq    r11, xmm0                                                      ; +0x7, 0x180136ca7\nmov     rcx, r11                                                       ; +0xc, 0x180136cac\nshr     r11, 34h                                                       ; +0xf, 0x180136caf\nsub     r11, 3FFh                                                      ; +0x13, 0x180136cb3\nmov     r10, r11                                                       ; +0x1a, 0x180136cba\nshr     r10, 3                                                         ; +0x1d, 0x180136cbd\nsub     r10, 86h                                                       ; +0x21, 0x180136cc1\nneg     r10                                                            ; +0x28, 0x180136cc8\nmov     rax, [r9+r10]                                                  ; +0x2b, 0x180136ccb\nshl     rcx, 0Ch                                                       ; +0x2f, 0x180136ccf\nshr     rcx, 0Ch                                                       ; +0x33, 0x180136cd3\nbts     rcx, 34h ; '4'                                                 ; +0x37, 0x180136cd7\nadd     r10, 8                                                         ; +0x3c, 0x180136cdc\nmovdqu  xmm0, xmmword ptr [r9+r10]                                     ; +0x40, 0x180136ce0\nmul     rcx                                                            ; +0x46, 0x180136ce6\nmov     r8, rax                                                        ; +0x49, 0x180136ce9\nmov     r10, rdx                                                       ; +0x4c, 0x180136cec\nmovq    rax, xmm0                                                      ; +0x4f, 0x180136cef\nmul     rcx                                                            ; +0x54, 0x180136cf4\nand     r11, 7                                                         ; +0x57, 0x180136cf7\npsrldq  xmm0, 8                                                        ; +0x5b, 0x180136cfb\nadd     rax, r10                                                       ; +0x60, 0x180136d00\nadc     rdx, 0                                                         ; +0x63, 0x180136d03\nmov     r9, rax                                                        ; +0x67, 0x180136d07\nmov     r10, rdx                                                       ; +0x6a, 0x180136d0a\nmovq    rax, xmm0                                                      ; +0x6d, 0x180136d0d\nmul     rcx                                                            ; +0x72, 0x180136d12\nadd     r10, rax                                                       ; +0x75, 0x180136d15\nmov     rcx, 36h ; '6'                                                 ; +0x78, 0x180136d18\nmov     rax, r10                                                       ; +0x7f, 0x180136d1f\nsub     rcx, r11                                                       ; +0x82, 0x180136d22\nxor     rdx, rdx                                                       ; +0x85, 0x180136d25\nshr     rax, cl                                                        ; +0x88, 0x180136d28\njnb     short L__no_point_five_0                                       ; +0x8b, 0x180136d2b\nnot     r10                                                            ; +0x8d, 0x180136d2d\nnot     r9                                                             ; +0x90, 0x180136d30\nnot     r8                                                             ; +0x93, 0x180136d33\nmov     rdx, 8000000000000000h                                         ; +0x96, 0x180136d36\nadc     rax, 0                                                         ; +0xa0, 0x180136d40\nand     rax, 3                                                         ; +0xa4, 0x180136d44\nmovq    xmm1, rax                                                      ; +0xa8, 0x180136d48\nmov     rcx, r11                                                       ; +0xad, 0x180136d4d\nadd     rcx, 0Ah                                                       ; +0xb0, 0x180136d50\nshl     r10, cl                                                        ; +0xb4, 0x180136d54\nshr     r10, cl                                                        ; +0xb7, 0x180136d57\nsub     rcx, 40h ; '@'                                                 ; +0xba, 0x180136d5a\nmov     r11, rcx                                                       ; +0xbe, 0x180136d5e\nbsr     rcx, r10                                                       ; +0xc1, 0x180136d61\njnz     short L__form_mantissa_0                                       ; +0xc5, 0x180136d65\nmov     r10, r9                                                        ; +0xc7, 0x180136d67\nmov     r9, r8                                                         ; +0xca, 0x180136d6a\nbsr     rcx, r10                                                       ; +0xcd, 0x180136d6d\nsub     r11, 40h ; '@'                                                 ; +0xd1, 0x180136d71\nnop     word ptr [rax+rax+00000000h]                                   ; +0xd5, 0x180136d75\nadd     r11, rcx                                                       ; +0xe0, 0x180136d80\nsub     rcx, 34h ; '4'                                                 ; +0xe3, 0x180136d83\ncmp     rcx, 0                                                         ; +0xe7, 0x180136d87\njl      short L__hsb_below_52_0                                        ; +0xeb, 0x180136d8b\njz      short L__form_numbers_0                                        ; +0xed, 0x180136d8d\nmov     r8, r10                                                        ; +0xef, 0x180136d8f\nshr     r10, cl                                                        ; +0xf2, 0x180136d92\njmp     short L__form_numbers_0                                        ; +0xf5, 0x180136d95\nalign 20h                                                              ; +0xf7, 0x180136d97\nneg     rcx                                                            ; +0x100, 0x180136da0\nmov     rax, r9                                                        ; +0x103, 0x180136da3\nshl     r10, cl                                                        ; +0x106, 0x180136da6\nshl     r9, cl                                                         ; +0x109, 0x180136da9\nsub     rcx, 40h ; '@'                                                 ; +0x10c, 0x180136dac\nneg     rcx                                                            ; +0x110, 0x180136db0\nshr     rax, cl                                                        ; +0x113, 0x180136db3\nor      r10, rax                                                       ; +0x116, 0x180136db6\nnop     dword ptr [rax+00000000h]                                      ; +0x119, 0x180136db9\nadd     r11, 3FFh                                                      ; +0x120, 0x180136dc0\nbtr     r10, 34h ; '4'                                                 ; +0x127, 0x180136dc7\nmov     rcx, r11                                                       ; +0x12c, 0x180136dcc\nor      r10, rdx                                                       ; +0x12f, 0x180136dcf\nshl     rcx, 34h                                                       ; +0x132, 0x180136dd2\nor      r10, rcx                                                       ; +0x136, 0x180136dd6\nmovq    xmm0, r10                                                      ; +0x139, 0x180136dd9\nmovq    rax, xmm1                                                      ; +0x13e, 0x180136dde\nmulsd   xmm0, cs:qword_180176010                                       ; +0x143, 0x180136de3\nretn                                                                   ; +0x14b, 0x180136deb", "xrefs": ["cosf @ 0x18012b15a", "<???> @ 0x180203584"], "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"}