{"type": "func", "start": 6443722912, "end": 6443723308, "name": "__remainder_piby2d2f_forC", "pseudocode": "// \n// __remainder_piby2d2f_forC from 0x1801368a0 to 0x180136a2c (396 bytes)\n// \n// 3 xrefs:\n// > sinf @ 0x18012a0d4\n// > <???> @ 0x18020353c\n// > <???> @ 0x180203548\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\nunsigned __int64 __fastcall _remainder_piby2d2f_forC(unsigned __int64 a1, double *a2, _DWORD *a3)\n{\n  unsigned __int64 v4; // r11\n  __int64 v5; // r10\n  __int64 v7; // rcx\n  __m128i v8; // xmm0\n  __int64 v9; // r8\n  unsigned __int64 v10; // r11\n  unsigned __int64 v11; // r9\n  __int64 v12; // r10\n  unsigned __int128 v13; // kr10_16\n  unsigned __int64 v14; // rdx\n  bool v15; // cf\n  unsigned __int64 result; // rax\n  unsigned __int64 v17; // r10\n  unsigned __int64 v18; // r11\n  __int64 v20; // rcx\n  __int64 v21; // r11\n  __int64 v22; // rcx\n  __int64 v23; // rcx\n\n  v4 = (a1 >> 52) - 1023;\n  v5 = 134 - (v4 >> 3);\n  v7 = a1 & 0xFFFFFFFFFFFFFLL | 0x10000000000000LL;\n  v8 = _mm_loadu_si128((const __m128i *)((char *)&unk_180175740 + v5 + 8));\n  v9 = v7 * *(_QWORD *)((char *)&unk_180175740 + v5);\n  v10 = v4 & 7;\n  v13 = __PAIR128__(\n          v7 * _mm_srli_si128(v8, 8).m128i_u64[0],\n          ((unsigned __int64)v7 * (unsigned __int128)*(unsigned __int64 *)((char *)&unk_180175740 + v5)) >> 64)\n      + (unsigned __int64)v7 * (unsigned __int128)v8.m128i_u64[0];\n  v12 = *((_QWORD *)&v13 + 1);\n  v11 = v13;\n  v14 = 0;\n  v15 = __CFSHR__(*((_QWORD *)&v13 + 1), 54 - v10);\n  if ( v15 )\n  {\n    v12 = ~*((_QWORD *)&v13 + 1);\n    v11 = ~(_QWORD)v13;\n    v9 = ~v9;\n    v14 = 0x8000000000000000uLL;\n  }\n  result = (v15 + (unsigned __int8)(*((_QWORD *)&v13 + 1) >> (54 - (unsigned __int8)v10))) & 3;\n  *a3 = result;\n  v17 = (unsigned __int64)(v12 << ((unsigned __int8)v10 + 10)) >> ((unsigned __int8)v10 + 10);\n  v18 = v10 - 54;\n  if ( !_BitScanReverse64((unsigned __int64 *)&v20, v17) )\n  {\n    v17 = v11;\n    v11 = v9;\n    _BitScanReverse64((unsigned __int64 *)&v20, v17);\n    v18 -= 64LL;\n  }\n  v21 = v20 + v18;\n  v22 = v20 - 52;\n  if ( v22 < 0 )\n  {\n    v23 = -v22;\n    result = v11 >> (64 - (unsigned __int8)v23);\n    v17 = result | (v17 << v23);\n  }\n  else if ( v22 )\n  {\n    v17 >>= v22;\n  }\n  *a2 = COERCE_DOUBLE(((v21 + 1023) << 52) | v14 | v17 & 0xFFEFFFFFFFFFFFFFuLL) * 1.570796326794897;\n  return result;\n}", "assembly": "; \n; __remainder_piby2d2f_forC from 0x1801368a0 to 0x180136a2c (396 bytes)\n; \n; 3 xrefs:\n; > sinf @ 0x18012a0d4\n; > <???> @ 0x18020353c\n; > <???> @ 0x180203548\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, 88h                                                       ; +0x0, 0x1801368a0\nmov     [rsp+88h+var_68], rdi                                          ; +0x7, 0x1801368a7\nmov     [rsp+88h+var_58], rsi                                          ; +0xc, 0x1801368ac\nmov     rdi, rcx                                                       ; +0x11, 0x1801368b1\nmov     rsi, rdx                                                       ; +0x14, 0x1801368b4\nmov     rdx, r8                                                        ; +0x17, 0x1801368b7\nmovq    xmm0, rdi                                                      ; +0x1a, 0x1801368ba\nlea     r9, unk_180175740                                              ; +0x1f, 0x1801368bf\nmovq    r11, xmm0                                                      ; +0x26, 0x1801368c6\nmov     rcx, r11                                                       ; +0x2b, 0x1801368cb\nshr     r11, 34h                                                       ; +0x2e, 0x1801368ce\nsub     r11, 3FFh                                                      ; +0x32, 0x1801368d2\nmov     r10, r11                                                       ; +0x39, 0x1801368d9\nshr     r10, 3                                                         ; +0x3c, 0x1801368dc\nsub     r10, 86h                                                       ; +0x40, 0x1801368e0\nneg     r10                                                            ; +0x47, 0x1801368e7\nmov     rax, [r9+r10]                                                  ; +0x4a, 0x1801368ea\nmov     rdi, rdx                                                       ; +0x4e, 0x1801368ee\nshl     rcx, 0Ch                                                       ; +0x51, 0x1801368f1\nshr     rcx, 0Ch                                                       ; +0x55, 0x1801368f5\nbts     rcx, 34h ; '4'                                                 ; +0x59, 0x1801368f9\nadd     r10, 8                                                         ; +0x5e, 0x1801368fe\nmovdqu  xmm0, xmmword ptr [r9+r10]                                     ; +0x62, 0x180136902\nmul     rcx                                                            ; +0x68, 0x180136908\nmov     r8, rax                                                        ; +0x6b, 0x18013690b\nmov     r10, rdx                                                       ; +0x6e, 0x18013690e\nmovq    rax, xmm0                                                      ; +0x71, 0x180136911\nmul     rcx                                                            ; +0x76, 0x180136916\nand     r11, 7                                                         ; +0x79, 0x180136919\npsrldq  xmm0, 8                                                        ; +0x7d, 0x18013691d\nadd     rax, r10                                                       ; +0x82, 0x180136922\nadc     rdx, 0                                                         ; +0x85, 0x180136925\nmov     r9, rax                                                        ; +0x89, 0x180136929\nmov     r10, rdx                                                       ; +0x8c, 0x18013692c\nmovq    rax, xmm0                                                      ; +0x8f, 0x18013692f\nmul     rcx                                                            ; +0x94, 0x180136934\nadd     r10, rax                                                       ; +0x97, 0x180136937\nmov     rcx, 36h ; '6'                                                 ; +0x9a, 0x18013693a\nmov     rax, r10                                                       ; +0xa1, 0x180136941\nsub     rcx, r11                                                       ; +0xa4, 0x180136944\nxor     rdx, rdx                                                       ; +0xa7, 0x180136947\nshr     rax, cl                                                        ; +0xaa, 0x18013694a\njnb     short L__no_point_five                                         ; +0xad, 0x18013694d\nnot     r10                                                            ; +0xaf, 0x18013694f\nnot     r9                                                             ; +0xb2, 0x180136952\nnot     r8                                                             ; +0xb5, 0x180136955\nmov     rdx, 8000000000000000h                                         ; +0xb8, 0x180136958\nnop     word ptr [rax+rax+00000000h]                                   ; +0xc2, 0x180136962\nadc     rax, 0                                                         ; +0xd0, 0x180136970\nand     rax, 3                                                         ; +0xd4, 0x180136974\nmov     [rdi], eax                                                     ; +0xd8, 0x180136978\nmov     rcx, r11                                                       ; +0xda, 0x18013697a\nadd     rcx, 0Ah                                                       ; +0xdd, 0x18013697d\nshl     r10, cl                                                        ; +0xe1, 0x180136981\nshr     r10, cl                                                        ; +0xe4, 0x180136984\nsub     rcx, 40h ; '@'                                                 ; +0xe7, 0x180136987\nmov     r11, rcx                                                       ; +0xeb, 0x18013698b\nbsr     rcx, r10                                                       ; +0xee, 0x18013698e\njnz     short L__form_mantissa                                         ; +0xf2, 0x180136992\nmov     r10, r9                                                        ; +0xf4, 0x180136994\nmov     r9, r8                                                         ; +0xf7, 0x180136997\nbsr     rcx, r10                                                       ; +0xfa, 0x18013699a\nsub     r11, 40h ; '@'                                                 ; +0xfe, 0x18013699e\nnop     word ptr [rax+rax+00000000h]                                   ; +0x102, 0x1801369a2\nadd     r11, rcx                                                       ; +0x110, 0x1801369b0\nsub     rcx, 34h ; '4'                                                 ; +0x113, 0x1801369b3\ncmp     rcx, 0                                                         ; +0x117, 0x1801369b7\njl      short L__hsb_below_52                                          ; +0x11b, 0x1801369bb\njz      short L__form_numbers                                          ; +0x11d, 0x1801369bd\nmov     r8, r10                                                        ; +0x11f, 0x1801369bf\nshr     r10, cl                                                        ; +0x122, 0x1801369c2\njmp     short L__form_numbers                                          ; +0x125, 0x1801369c5\nalign 10h                                                              ; +0x127, 0x1801369c7\nneg     rcx                                                            ; +0x130, 0x1801369d0\nmov     rax, r9                                                        ; +0x133, 0x1801369d3\nshl     r10, cl                                                        ; +0x136, 0x1801369d6\nshl     r9, cl                                                         ; +0x139, 0x1801369d9\nsub     rcx, 40h ; '@'                                                 ; +0x13c, 0x1801369dc\nneg     rcx                                                            ; +0x140, 0x1801369e0\nshr     rax, cl                                                        ; +0x143, 0x1801369e3\nor      r10, rax                                                       ; +0x146, 0x1801369e6\nnop     dword ptr [rax+00000000h]                                      ; +0x149, 0x1801369e9\nadd     r11, 3FFh                                                      ; +0x150, 0x1801369f0\nbtr     r10, 34h ; '4'                                                 ; +0x157, 0x1801369f7\nmov     rcx, r11                                                       ; +0x15c, 0x1801369fc\nor      r10, rdx                                                       ; +0x15f, 0x1801369ff\nshl     rcx, 34h                                                       ; +0x162, 0x180136a02\nor      r10, rcx                                                       ; +0x166, 0x180136a06\nmovq    xmm0, r10                                                      ; +0x169, 0x180136a09\nmulsd   xmm0, cs:qword_180175730                                       ; +0x16e, 0x180136a0e\nmovsd   qword ptr [rsi], xmm0                                          ; +0x176, 0x180136a16\nmov     rsi, [rsp+88h+var_58]                                          ; +0x17a, 0x180136a1a\nmov     rdi, [rsp+88h+var_68]                                          ; +0x17f, 0x180136a1f\nadd     rsp, 88h                                                       ; +0x184, 0x180136a24\nretn                                                                   ; +0x18b, 0x180136a2b", "xrefs": ["sinf @ 0x18012a0d4", "<???> @ 0x18020353c", "<???> @ 0x180203548"], "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"}