// // sub_180003130 from 0x180003130 to 0x18000338c (604 bytes) // // 5 xrefs: // > sub_180009770 @ 0x180009a91 // > @ 0x18017d45c // > @ 0x18017d494 // > @ 0x1801a78a8 // > @ 0x1801f6180 // // 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_180003130(__int64 a1, __m128 *a2, __int64 a3, int a4) { unsigned int v4; // r15d __m128i v7; // xmm6 __m128 v9; // xmm7 __m128 v10; // xmm8 int v11; // edi int v12; // ebp __int64 v13; // rdi __m128i v14; // xmm0 int v15; // ebp __int64 v16; // rcx __int64 v17; // rdi __int64 v18; // r12 __int64 v19; // r13 __m128i v20; // xmm0 v4 = *(char *)(a1 + 102); v7 = _mm_loadu_si128((const __m128i *)a1); v9 = *(__m128 *)(a1 + 16); v10 = *(__m128 *)(a1 + 32); _mm_prefetch(*(const char **)(a1 + 48), 1); _mm_prefetch(*(const char **)(a1 + 56), 1); v11 = a4 >> 2; switch ( *(_BYTE *)(a1 + 100) ) { case 0: case 1: for ( ; v11; --v11 ) { *a2 = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(sub_180002960(a1, a3), v7)), v10), v9), *a2); ++a2; } break; case 2: case 3: v12 = a4 >> 3; if ( a4 >> 3 ) { v13 = v11 / 2; do { v14 = sub_180002960(a1, a3); *a2 = _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(v14, v7)), v10), v9), *a2); a2[v13] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v14, v4), v7)), v10), v9), a2[v13]); ++a2; --v12; } while ( v12 ); } break; case 4: case 5: case 6: case 7: v15 = a4 >> 4; if ( a4 >> 4 ) { v16 = v11 / 4; v17 = v16; v18 = 2 * v16; v19 = 3 * v16; do { v20 = sub_180002960(a1, a3); *a2 = _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(v20, v7)), v10), v9), *a2); a2[v17] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v20, v4), v7)), v10), v9), a2[v17]); a2[v18] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v20, 2 * v4), v7)), v10), v9), a2[v18]); a2[v19] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v20, 3 * v4), v7)), v10), v9), a2[v19]); ++a2; --v15; } while ( v15 ); } break; default: return 0; } return 0; }