// // sub_180005E80 from 0x180005e80 to 0x18000606e (494 bytes) // // 1 xrefs: // > sub_180005520 @ 0x1800055a0 // // 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 sub_180005E80( _DWORD *_RCX, __int64 _RDX, __int64 _R8, __int64 _R9, __int64 a5, int a6, int a7, int a8, int a9) { int v9; // eax int v12; // r10d int v13; // eax __int64 result; // rax int v15; // r11d int v22; // r10d int v27; // r11d int v33; // r10d int v40; // r8d int v45; // edx v9 = a6 >> 3; if ( a6 >> 3 ) { __asm { vmovdqu ymm1, cs:ymmword_1801446A0 } do { __asm { vpermps ymm0, ymm1, ymmword ptr [r9-20h] } _R9 -= 32; __asm { vmovups ymmword ptr [rcx], ymm0 } _RCX += 8; --v9; } while ( v9 ); } v12 = a6 & 7; if ( (a6 & 7) != 0 ) { do { v13 = *(_DWORD *)(_R9 - 4); _R9 -= 4; *_RCX++ = v13; --v12; } while ( v12 ); } result = a5; v15 = a7 >> 3; if ( a7 >> 3 ) { __asm { vmovdqu ymm4, cs:ymmword_1801446A0 } do { __asm { vmovups ymm2, ymmword ptr [r8] vmovups ymm0, ymmword ptr [r9-20h] vmulps ymm1, ymm0, ymmword ptr [rdx-20h] } _R9 -= 32; _RDX -= 32; __asm { vpermps ymm3, ymm4, ymm1 vfmadd231ps ymm3, ymm2, ymmword ptr [rax] vmovups ymmword ptr [rcx], ymm3 } _RCX += 8; _R8 += 32; result += 32; --v15; } while ( v15 ); } v22 = a7 & 7; if ( (a7 & 7) != 0 ) { do { __asm { vmovss xmm0, dword ptr [r8] vmulss xmm2, xmm0, dword ptr [rax] vmovss xmm1, dword ptr [rdx-4] vfmadd231ss xmm2, xmm1, dword ptr [r9-4] } _RDX -= 4; _R9 -= 4; __asm { vmovss dword ptr [rcx], xmm2 } ++_RCX; _R8 += 4; result += 4; --v22; } while ( v22 ); } v27 = a8 >> 3; if ( a8 >> 3 ) { __asm { vmovdqu ymm3, cs:ymmword_1801446A0 } do { __asm { vpermps ymm0, ymm3, ymmword ptr [rax-20h] vmulps ymm2, ymm0, ymmword ptr [r8] vpermps ymm1, ymm3, ymmword ptr [rdx-20h] vfmsub231ps ymm2, ymm1, ymmword ptr [r9] } result -= 32; _RDX -= 32; __asm { vmovups ymmword ptr [rcx], ymm2 } _RCX += 8; _R8 += 32; _R9 += 32; --v27; } while ( v27 ); } v33 = a8 & 7; if ( (a8 & 7) != 0 ) { _RDX = _RDX - result; _R8 = _R8 - (_QWORD)_RCX; do { __asm { vmovss xmm0, dword ptr [r8+rcx] vmulss xmm2, xmm0, dword ptr [rax-4] vmovss xmm1, dword ptr [rdx+rax-4] vfmsub231ss xmm2, xmm1, dword ptr [r9+rcx] } result -= 4; __asm { vmovss dword ptr [rcx], xmm2 } ++_RCX; --v33; } while ( v33 ); } v40 = a9 >> 3; if ( a9 >> 3 ) { __asm { vmovdqu ymm2, cs:ymmword_1801446A0 vmovups ymm3, cs:ymmword_1801446C0 } do { __asm { vpermps ymm0, ymm2, ymmword ptr [rax-20h] } result -= 32; __asm { vxorps ymm1, ymm0, ymm3 vmovups ymmword ptr [rcx], ymm1 } _RCX += 8; --v40; } while ( v40 ); } v45 = a9 & 7; if ( (a9 & 7) != 0 ) { __asm { vmovss xmm2, dword ptr cs:xmmword_180144610 } do { result -= 4; ++_RCX; __asm { vmovss xmm0, dword ptr [rax] vxorps xmm1, xmm0, xmm2 vmovss dword ptr [rcx-4], xmm1 } --v45; } while ( v45 ); } __asm { vzeroupper } return result; }