// // sub_180002B80 from 0x180002b80 to 0x180003124 (1444 bytes) // // 5 xrefs: // > sub_180009770 @ 0x180009a89 // > @ 0x18017d4e0 // > @ 0x18017d514 // > @ 0x1801a78a0 // > @ 0x1801f6144 // // 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_180002B80(__int64 a1, __m128 *a2, __int64 a3, int a4) { unsigned int v4; // r14d __m128i v7; // xmm11 __m128 v9; // xmm12 __m128 v10; // xmm13 int v11; // edi int i; // r15d __m128i v13; // xmm0 __m128 v14; // xmm2 __m128 v15; // xmm1 __m128 v16; // xmm0 __m128 v17; // xmm2 int j; // edi __m128i v19; // xmm6 int k; // r15d __m128 v21; // xmm6 __m128 v22; // xmm7 __m128 v23; // xmm8 __m128 v24; // xmm10 __m128i v25; // xmm0 __m128 v26; // xmm2 __m128 v27; // xmm9 __m128 v28; // xmm3 __m128 v29; // xmm4 __m128 v30; // xmm9 __m128 v31; // xmm2 __m128 v32; // xmm5 __m128 v33; // xmm2 int m; // edi int v35; // r15d __m128i v36; // xmm0 __m128 v37; // xmm3 __m128 v38; // xmm4 __m128 v39; // xmm2 __m128 v40; // xmm9 __m128 v41; // xmm7 __m128 v42; // xmm1 __m128 v43; // xmm5 __m128 v44; // xmm8 __m128 v45; // xmm9 __m128 v46; // xmm6 __m128 v47; // xmm3 __m128 v48; // xmm7 __m128 v49; // xmm4 __m128 v50; // xmm8 __m128 v51; // xmm2 __m128 v52; // xmm6 __m128 v53; // xmm0 __m128 v54; // xmm0 int n; // edi __m128i v56; // xmm2 __m128i v57; // xmm2 __m128i v59; // [rsp+20h] [rbp-D8h] BYREF __m128i v60; // [rsp+30h] [rbp-C8h] BYREF int v61; // [rsp+118h] [rbp+20h] 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; v61 = 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: for ( i = a4 >> 3; i; --i ) { v13 = sub_180002960(a1, a3); v14 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(v13, v7)), v10), v9); v15 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(_mm_srai_epi32(v13, v4), v7)), v10), v9); v16 = _mm_add_ps(_mm_unpacklo_ps(v14, v15), *a2); v17 = _mm_add_ps(_mm_unpackhi_ps(v14, v15), a2[1]); *a2 = v16; a2[1] = v17; a2 += 2; } for ( j = v11 & 1; j; --j ) { v19 = sub_180002760(a1, a3); *a2 = _mm_add_ps( _mm_shuffle_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(v19, v7)), v10), v9), _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(sub_180002760(a1, a3), v7)), v10), v9), 68), *a2); ++a2; } break; case 4: case 5: case 6: case 7: for ( k = a4 >> 4; k; --k ) { v21 = *a2; v22 = a2[1]; v23 = a2[2]; v24 = a2[3]; v25 = sub_180002960(a1, a3); v26 = (__m128)_mm_and_si128(_mm_srai_epi32(v25, v4), v7); v27 = (__m128)_mm_and_si128(v25, v7); v28 = (__m128)_mm_and_si128(_mm_srai_epi32(v25, 3 * v4), v7); v29 = _mm_shuffle_ps(v27, v26, 68); v30 = _mm_shuffle_ps(v27, v26, 238); v31 = (__m128)_mm_and_si128(_mm_srai_epi32(v25, 2 * v4), v7); v32 = _mm_shuffle_ps(v31, v28, 238); v33 = _mm_shuffle_ps(v31, v28, 68); *a2 = _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v29, v33, 136)), v10), v9), v21); a2[1] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v29, v33, 221)), v10), v9), v22); a2[2] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v30, v32, 136)), v10), v9), v23); a2[3] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v30, v32, 221)), v10), v9), v24); a2 += 4; } for ( m = v11 & 3; m; --m ) { *a2 = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_and_si128(sub_180002760(a1, a3), v7)), v10), v9), *a2); ++a2; } break; case 8: v35 = a4 >> 5; if ( a4 >> 5 ) { do { v36 = sub_180002960(a1, a3); v37 = (__m128)_mm_and_si128(_mm_srai_epi32(v36, v4), v7); v38 = (__m128)_mm_and_si128(_mm_srai_epi32(v36, 3 * v4), v7); v39 = (__m128)_mm_and_si128(_mm_srai_epi32(v36, 5 * v4), v7); v40 = (__m128)_mm_and_si128(v36, v7); v41 = (__m128)_mm_and_si128(_mm_srai_epi32(v36, 2 * v4), v7); v42 = (__m128)_mm_and_si128(_mm_srai_epi32(v36, 7 * v4), v7); v43 = _mm_shuffle_ps(v40, v37, 68); v44 = (__m128)_mm_and_si128(_mm_srai_epi32(v36, 4 * v4), v7); v45 = _mm_shuffle_ps(v40, v37, 238); v46 = (__m128)_mm_and_si128(_mm_srai_epi32(v36, 6 * v4), v7); v47 = _mm_shuffle_ps(v41, v38, 68); v48 = _mm_shuffle_ps(v41, v38, 238); v49 = _mm_shuffle_ps(v44, v39, 68); v50 = _mm_shuffle_ps(v44, v39, 238); v51 = _mm_shuffle_ps(v46, v42, 68); v52 = _mm_shuffle_ps(v46, v42, 238); *a2 = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v43, v47, 136)), v10), v9), *a2); v53 = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v43, v47, 221)), v10), v9), a2[2]); a2[1] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v49, v51, 136)), v10), v9), a2[1]); a2[2] = v53; a2[3] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v49, v51, 221)), v10), v9), a2[3]); a2[4] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v45, v48, 136)), v10), v9), a2[4]); v54 = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v45, v48, 221)), v10), v9), a2[6]); a2[5] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v50, v52, 136)), v10), v9), a2[5]); a2[6] = v54; a2[7] = _mm_add_ps( _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps((__m128i)_mm_shuffle_ps(v50, v52, 221)), v10), v9), a2[7]); a2 += 8; --v35; } while ( v35 ); v11 = v61; } for ( n = (v11 >> 1) & 3; n; --n ) { sub_180002830(a1, a3, &v59, &v60); v56 = _mm_load_si128(&v60); v59 = _mm_and_si128(_mm_load_si128(&v59), v7); v57 = _mm_and_si128(v56, v7); v60 = v57; *a2 = _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(v59), v10), v9), *a2); a2[1] = _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(v57), v10), v9), a2[1]); a2 += 2; } break; default: return 0; } return 0; }