{"type": "func", "start": 6442475136, "end": 6442475630, "name": "sub_180005E80", "pseudocode": "// \n// sub_180005E80 from 0x180005e80 to 0x18000606e (494 bytes)\n// \n// 1 xrefs:\n// > sub_180005520 @ 0x1800055a0\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 sub_180005E80(\n        _DWORD *_RCX,\n        __int64 _RDX,\n        __int64 _R8,\n        __int64 _R9,\n        __int64 a5,\n        int a6,\n        int a7,\n        int a8,\n        int a9)\n{\n  int v9; // eax\n  int v12; // r10d\n  int v13; // eax\n  __int64 result; // rax\n  int v15; // r11d\n  int v22; // r10d\n  int v27; // r11d\n  int v33; // r10d\n  int v40; // r8d\n  int v45; // edx\n\n  v9 = a6 >> 3;\n  if ( a6 >> 3 )\n  {\n    __asm { vmovdqu ymm1, cs:ymmword_1801446A0 }\n    do\n    {\n      __asm { vpermps ymm0, ymm1, ymmword ptr [r9-20h] }\n      _R9 -= 32;\n      __asm { vmovups ymmword ptr [rcx], ymm0 }\n      _RCX += 8;\n      --v9;\n    }\n    while ( v9 );\n  }\n  v12 = a6 & 7;\n  if ( (a6 & 7) != 0 )\n  {\n    do\n    {\n      v13 = *(_DWORD *)(_R9 - 4);\n      _R9 -= 4;\n      *_RCX++ = v13;\n      --v12;\n    }\n    while ( v12 );\n  }\n  result = a5;\n  v15 = a7 >> 3;\n  if ( a7 >> 3 )\n  {\n    __asm { vmovdqu ymm4, cs:ymmword_1801446A0 }\n    do\n    {\n      __asm\n      {\n        vmovups ymm2, ymmword ptr [r8]\n        vmovups ymm0, ymmword ptr [r9-20h]\n        vmulps  ymm1, ymm0, ymmword ptr [rdx-20h]\n      }\n      _R9 -= 32;\n      _RDX -= 32;\n      __asm\n      {\n        vpermps ymm3, ymm4, ymm1\n        vfmadd231ps ymm3, ymm2, ymmword ptr [rax]\n        vmovups ymmword ptr [rcx], ymm3\n      }\n      _RCX += 8;\n      _R8 += 32;\n      result += 32;\n      --v15;\n    }\n    while ( v15 );\n  }\n  v22 = a7 & 7;\n  if ( (a7 & 7) != 0 )\n  {\n    do\n    {\n      __asm\n      {\n        vmovss  xmm0, dword ptr [r8]\n        vmulss  xmm2, xmm0, dword ptr [rax]\n        vmovss  xmm1, dword ptr [rdx-4]\n        vfmadd231ss xmm2, xmm1, dword ptr [r9-4]\n      }\n      _RDX -= 4;\n      _R9 -= 4;\n      __asm { vmovss  dword ptr [rcx], xmm2 }\n      ++_RCX;\n      _R8 += 4;\n      result += 4;\n      --v22;\n    }\n    while ( v22 );\n  }\n  v27 = a8 >> 3;\n  if ( a8 >> 3 )\n  {\n    __asm { vmovdqu ymm3, cs:ymmword_1801446A0 }\n    do\n    {\n      __asm\n      {\n        vpermps ymm0, ymm3, ymmword ptr [rax-20h]\n        vmulps  ymm2, ymm0, ymmword ptr [r8]\n        vpermps ymm1, ymm3, ymmword ptr [rdx-20h]\n        vfmsub231ps ymm2, ymm1, ymmword ptr [r9]\n      }\n      result -= 32;\n      _RDX -= 32;\n      __asm { vmovups ymmword ptr [rcx], ymm2 }\n      _RCX += 8;\n      _R8 += 32;\n      _R9 += 32;\n      --v27;\n    }\n    while ( v27 );\n  }\n  v33 = a8 & 7;\n  if ( (a8 & 7) != 0 )\n  {\n    _RDX = _RDX - result;\n    _R8 = _R8 - (_QWORD)_RCX;\n    do\n    {\n      __asm\n      {\n        vmovss  xmm0, dword ptr [r8+rcx]\n        vmulss  xmm2, xmm0, dword ptr [rax-4]\n        vmovss  xmm1, dword ptr [rdx+rax-4]\n        vfmsub231ss xmm2, xmm1, dword ptr [r9+rcx]\n      }\n      result -= 4;\n      __asm { vmovss  dword ptr [rcx], xmm2 }\n      ++_RCX;\n      --v33;\n    }\n    while ( v33 );\n  }\n  v40 = a9 >> 3;\n  if ( a9 >> 3 )\n  {\n    __asm\n    {\n      vmovdqu ymm2, cs:ymmword_1801446A0\n      vmovups ymm3, cs:ymmword_1801446C0\n    }\n    do\n    {\n      __asm { vpermps ymm0, ymm2, ymmword ptr [rax-20h] }\n      result -= 32;\n      __asm\n      {\n        vxorps  ymm1, ymm0, ymm3\n        vmovups ymmword ptr [rcx], ymm1\n      }\n      _RCX += 8;\n      --v40;\n    }\n    while ( v40 );\n  }\n  v45 = a9 & 7;\n  if ( (a9 & 7) != 0 )\n  {\n    __asm { vmovss  xmm2, dword ptr cs:xmmword_180144610 }\n    do\n    {\n      result -= 4;\n      ++_RCX;\n      __asm\n      {\n        vmovss  xmm0, dword ptr [rax]\n        vxorps  xmm1, xmm0, xmm2\n        vmovss  dword ptr [rcx-4], xmm1\n      }\n      --v45;\n    }\n    while ( v45 );\n  }\n  __asm { vzeroupper }\n  return result;\n}", "assembly": "; \n; sub_180005E80 from 0x180005e80 to 0x18000606e (494 bytes)\n; \n; 1 xrefs:\n; > sub_180005520 @ 0x1800055a0\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     r10d, [rsp+arg_28]                                             ; +0x0, 0x180005e80\nmov     eax, r10d                                                      ; +0x5, 0x180005e85\nsar     eax, 3                                                         ; +0x8, 0x180005e88\ntest    eax, eax                                                       ; +0xb, 0x180005e8b\njz      short loc_180005EB7                                            ; +0xd, 0x180005e8d\nvmovdqu ymm1, cs:ymmword_1801446A0                                     ; +0xf, 0x180005e8f\nnop     word ptr [rax+rax+00000000h]                                   ; +0x17, 0x180005e97\nvpermps ymm0, ymm1, ymmword ptr [r9-20h]                               ; +0x20, 0x180005ea0\nsub     r9, 20h ; ' '                                                  ; +0x26, 0x180005ea6\nvmovups ymmword ptr [rcx], ymm0                                        ; +0x2a, 0x180005eaa\nadd     rcx, 20h ; ' '                                                 ; +0x2e, 0x180005eae\nsub     eax, 1                                                         ; +0x32, 0x180005eb2\njnz     short loc_180005EA0                                            ; +0x35, 0x180005eb5\nand     r10d, 7                                                        ; +0x37, 0x180005eb7\njz      short loc_180005ED4                                            ; +0x3b, 0x180005ebb\nnop     dword ptr [rax]                                                ; +0x3d, 0x180005ebd\nmov     eax, [r9-4]                                                    ; +0x40, 0x180005ec0\nsub     r9, 4                                                          ; +0x44, 0x180005ec4\nmov     [rcx], eax                                                     ; +0x48, 0x180005ec8\nadd     rcx, 4                                                         ; +0x4a, 0x180005eca\nsub     r10d, 1                                                        ; +0x4e, 0x180005ece\njnz     short loc_180005EC0                                            ; +0x52, 0x180005ed2\nmov     r10d, [rsp+arg_30]                                             ; +0x54, 0x180005ed4\nmov     r11d, r10d                                                     ; +0x59, 0x180005ed9\nmov     rax, [rsp+arg_20]                                              ; +0x5c, 0x180005edc\nsar     r11d, 3                                                        ; +0x61, 0x180005ee1\ntest    r11d, r11d                                                     ; +0x65, 0x180005ee5\njz      short loc_180005F38                                            ; +0x68, 0x180005ee8\nvmovdqu ymm4, cs:ymmword_1801446A0                                     ; +0x6a, 0x180005eea\nnop     dword ptr [rax+00h]                                            ; +0x72, 0x180005ef2\nnop     word ptr [rax+rax+00000000h]                                   ; +0x76, 0x180005ef6\nvmovups ymm2, ymmword ptr [r8]                                         ; +0x80, 0x180005f00\nvmovups ymm0, ymmword ptr [r9-20h]                                     ; +0x85, 0x180005f05\nvmulps  ymm1, ymm0, ymmword ptr [rdx-20h]                              ; +0x8b, 0x180005f0b\nsub     r9, 20h ; ' '                                                  ; +0x90, 0x180005f10\nsub     rdx, 20h ; ' '                                                 ; +0x94, 0x180005f14\nvpermps ymm3, ymm4, ymm1                                               ; +0x98, 0x180005f18\nvfmadd231ps ymm3, ymm2, ymmword ptr [rax]                              ; +0x9d, 0x180005f1d\nvmovups ymmword ptr [rcx], ymm3                                        ; +0xa2, 0x180005f22\nadd     rcx, 20h ; ' '                                                 ; +0xa6, 0x180005f26\nadd     r8, 20h ; ' '                                                  ; +0xaa, 0x180005f2a\nadd     rax, 20h ; ' '                                                 ; +0xae, 0x180005f2e\nsub     r11d, 1                                                        ; +0xb2, 0x180005f32\njnz     short loc_180005F00                                            ; +0xb6, 0x180005f36\nand     r10d, 7                                                        ; +0xb8, 0x180005f38\njz      short loc_180005F72                                            ; +0xbc, 0x180005f3c\nxchg    ax, ax                                                         ; +0xbe, 0x180005f3e\nvmovss  xmm0, dword ptr [r8]                                           ; +0xc0, 0x180005f40\nvmulss  xmm2, xmm0, dword ptr [rax]                                    ; +0xc5, 0x180005f45\nvmovss  xmm1, dword ptr [rdx-4]                                        ; +0xc9, 0x180005f49\nvfmadd231ss xmm2, xmm1, dword ptr [r9-4]                               ; +0xce, 0x180005f4e\nsub     rdx, 4                                                         ; +0xd4, 0x180005f54\nsub     r9, 4                                                          ; +0xd8, 0x180005f58\nvmovss  dword ptr [rcx], xmm2                                          ; +0xdc, 0x180005f5c\nadd     rcx, 4                                                         ; +0xe0, 0x180005f60\nadd     r8, 4                                                          ; +0xe4, 0x180005f64\nadd     rax, 4                                                         ; +0xe8, 0x180005f68\nsub     r10d, 1                                                        ; +0xec, 0x180005f6c\njnz     short loc_180005F40                                            ; +0xf0, 0x180005f70\nmov     r10d, [rsp+arg_38]                                             ; +0xf2, 0x180005f72\nmov     r11d, r10d                                                     ; +0xf7, 0x180005f77\nsar     r11d, 3                                                        ; +0xfa, 0x180005f7a\ntest    r11d, r11d                                                     ; +0xfe, 0x180005f7e\njz      short loc_180005FC4                                            ; +0x101, 0x180005f81\nvmovdqu ymm3, cs:ymmword_1801446A0                                     ; +0x103, 0x180005f83\nnop     dword ptr [rax+rax+00h]                                        ; +0x10b, 0x180005f8b\nvpermps ymm0, ymm3, ymmword ptr [rax-20h]                              ; +0x110, 0x180005f90\nvmulps  ymm2, ymm0, ymmword ptr [r8]                                   ; +0x116, 0x180005f96\nvpermps ymm1, ymm3, ymmword ptr [rdx-20h]                              ; +0x11b, 0x180005f9b\nvfmsub231ps ymm2, ymm1, ymmword ptr [r9]                               ; +0x121, 0x180005fa1\nsub     rax, 20h ; ' '                                                 ; +0x126, 0x180005fa6\nsub     rdx, 20h ; ' '                                                 ; +0x12a, 0x180005faa\nvmovups ymmword ptr [rcx], ymm2                                        ; +0x12e, 0x180005fae\nadd     rcx, 20h ; ' '                                                 ; +0x132, 0x180005fb2\nadd     r8, 20h ; ' '                                                  ; +0x136, 0x180005fb6\nadd     r9, 20h ; ' '                                                  ; +0x13a, 0x180005fba\nsub     r11d, 1                                                        ; +0x13e, 0x180005fbe\njnz     short loc_180005F90                                            ; +0x142, 0x180005fc2\nand     r10d, 7                                                        ; +0x144, 0x180005fc4\njz      short loc_180005FFC                                            ; +0x148, 0x180005fc8\nsub     r9, rcx                                                        ; +0x14a, 0x180005fca\nsub     rdx, rax                                                       ; +0x14d, 0x180005fcd\nsub     r8, rcx                                                        ; +0x150, 0x180005fd0\nvmovss  xmm0, dword ptr [r8+rcx]                                       ; +0x153, 0x180005fd3\nvmulss  xmm2, xmm0, dword ptr [rax-4]                                  ; +0x159, 0x180005fd9\nvmovss  xmm1, dword ptr [rdx+rax-4]                                    ; +0x15e, 0x180005fde\nvfmsub231ss xmm2, xmm1, dword ptr [r9+rcx]                             ; +0x164, 0x180005fe4\nsub     rax, 4                                                         ; +0x16a, 0x180005fea\nvmovss  dword ptr [rcx], xmm2                                          ; +0x16e, 0x180005fee\nadd     rcx, 4                                                         ; +0x172, 0x180005ff2\nsub     r10d, 1                                                        ; +0x176, 0x180005ff6\njnz     short loc_180005FD3                                            ; +0x17a, 0x180005ffa\nmov     edx, [rsp+arg_40]                                              ; +0x17c, 0x180005ffc\nmov     r8d, edx                                                       ; +0x180, 0x180006000\nsar     r8d, 3                                                         ; +0x183, 0x180006003\ntest    r8d, r8d                                                       ; +0x187, 0x180006007\njz      short loc_18000603C                                            ; +0x18a, 0x18000600a\nvmovdqu ymm2, cs:ymmword_1801446A0                                     ; +0x18c, 0x18000600c\nvmovups ymm3, cs:ymmword_1801446C0                                     ; +0x194, 0x180006014\nnop     dword ptr [rax+00h]                                            ; +0x19c, 0x18000601c\nvpermps ymm0, ymm2, ymmword ptr [rax-20h]                              ; +0x1a0, 0x180006020\nsub     rax, 20h ; ' '                                                 ; +0x1a6, 0x180006026\nvxorps  ymm1, ymm0, ymm3                                               ; +0x1aa, 0x18000602a\nvmovups ymmword ptr [rcx], ymm1                                        ; +0x1ae, 0x18000602e\nadd     rcx, 20h ; ' '                                                 ; +0x1b2, 0x180006032\nsub     r8d, 1                                                         ; +0x1b6, 0x180006036\njnz     short loc_180006020                                            ; +0x1ba, 0x18000603a\nand     edx, 7                                                         ; +0x1bc, 0x18000603c\njz      short loc_18000606A                                            ; +0x1bf, 0x18000603f\nvmovss  xmm2, dword ptr cs:xmmword_180144610                           ; +0x1c1, 0x180006041\nnop     dword ptr [rax+00000000h]                                      ; +0x1c9, 0x180006049\nlea     rax, [rax-4]                                                   ; +0x1d0, 0x180006050\nlea     rcx, [rcx+4]                                                   ; +0x1d4, 0x180006054\nvmovss  xmm0, dword ptr [rax]                                          ; +0x1d8, 0x180006058\nvxorps  xmm1, xmm0, xmm2                                               ; +0x1dc, 0x18000605c\nvmovss  dword ptr [rcx-4], xmm1                                        ; +0x1e0, 0x180006060\nsub     edx, 1                                                         ; +0x1e5, 0x180006065\njnz     short loc_180006050                                            ; +0x1e8, 0x180006068\nvzeroupper                                                             ; +0x1ea, 0x18000606a\nretn                                                                   ; +0x1ed, 0x18000606d", "xrefs": ["sub_180005520 @ 0x1800055a0"], "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"}