// // sub_180003390 from 0x180003390 to 0x180003734 (932 bytes) // // 5 xrefs: // > sub_180009770 @ 0x180009ccd // > @ 0x18017d54c // > @ 0x18017d584 // > @ 0x1801a78b0 // > @ 0x1801f61bc // // 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_180003390(__int64 a1, _QWORD *a2, int a3, __int64 a4, __int64 a5, int a6) { unsigned int v7; // r14d __m128i v8; // xmm7 __m128 v9; // xmm8 __int64 v10; // r8 __m128 v11; // xmm9 __m128 *v12; // rdi __m128 *v13; // rbx int v14; // esi __m128 v15; // xmm6 __m128 v16; // xmm1 __m128i v17; // xmm0 int i; // esi __m128i v19; // xmm0 __m128 v20; // xmm6 __m128 v21; // xmm5 __m128 v22; // xmm3 __m128 v23; // xmm2 int j; // esi __m128i v25; // xmm0 __m128i v26; // xmm3 __m128i v27; // xmm1 __m128 v28; // xmm6 __m128 v29; // xmm5 __m128 v30; // xmm4 __m128 v31; // xmm2 __m128 v32; // xmm1 __m128 v33; // xmm5 __m128i v35; // [rsp+20h] [rbp-A8h] BYREF __m128i v36; // [rsp+30h] [rbp-98h] BYREF __m128i v37; // [rsp+40h] [rbp-88h] BYREF __m128i v38; // [rsp+50h] [rbp-78h] BYREF v7 = *(char *)(a1 + 102); v8 = _mm_loadu_si128((const __m128i *)a1); v9 = *(__m128 *)(a1 + 16); v10 = 4LL * a3; v11 = *(__m128 *)(a1 + 32); v12 = (__m128 *)(v10 + *a2); v13 = (__m128 *)(v10 + a2[1]); _mm_prefetch(*(const char **)(a1 + 48), 1); _mm_prefetch(*(const char **)(a1 + 56), 1); v14 = a6 >> 2; switch ( *(_BYTE *)(a1 + 100) ) { case 0: case 1: for ( ; v14; --v14 ) { v15 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(sub_180002960(a1, a5), v8)), v11), v9); v16 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(sub_180002960(a1, a5), v8)), v11), v9); *v12 = _mm_add_ps(_mm_shuffle_ps(v15, v16, 136), *v12); ++v12; *v13 = _mm_add_ps(_mm_shuffle_ps(v15, v16, 221), *v13); ++v13; } break; case 2: case 3: for ( ; v14; --v14 ) { v17 = sub_180002960(a1, a5); *v12 = _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(v17, v8)), v11), v9), *v12); ++v12; *v13 = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v17, v7), v8)), v11), v9), *v13); ++v13; } break; case 4: case 5: case 6: case 7: for ( i = a6 >> 3; i; --i ) { v19 = sub_180002960(a1, a5); v20 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(v19, v8)), v11), v9); v21 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v19, v7), v8)), v11), v9); v22 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v19, 2 * v7), v8)), v11), v9); v23 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v19, 3 * v7), v8)), v11), v9); *v12 = _mm_add_ps(_mm_unpacklo_ps(v20, v22), *v12); *v13 = _mm_add_ps(_mm_unpacklo_ps(v21, v23), *v13); v12[1] = _mm_add_ps(_mm_unpackhi_ps(v20, v22), v12[1]); v12 += 2; v13[1] = _mm_add_ps(_mm_unpackhi_ps(v21, v23), v13[1]); v13 += 2; } break; case 8: for ( j = a6 >> 3; j; --j ) { sub_180002830(a1, a5, &v35, &v36); sub_180002830(a1, a5, &v37, &v38); v25 = _mm_and_si128(_mm_load_si128(&v35), v8); v26 = _mm_load_si128(&v38); v27 = _mm_and_si128(_mm_load_si128(&v36), v8); v37 = _mm_and_si128(_mm_load_si128(&v37), v8); v35 = v25; v28 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(v25), v11), v9); v36 = v27; v29 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(v37), v11), v9); v38 = _mm_and_si128(v26, v8); v30 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(v27), v11), v9); v31 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(v38), v11), v9); v32 = _mm_add_ps(_mm_shuffle_ps(v29, v31, 136), v12[1]); *v12 = _mm_add_ps(_mm_shuffle_ps(v28, v30, 136), *v12); v12[1] = v32; v12 += 2; v33 = _mm_add_ps(_mm_shuffle_ps(v29, v31, 221), v13[1]); *v13 = _mm_add_ps(_mm_shuffle_ps(v28, v30, 221), *v13); v13[1] = v33; v13 += 2; } break; default: return 0; } return 0; }