// // sub_180003740 from 0x180003740 to 0x180003d2c (1516 bytes) // // 4 xrefs: // > sub_180003D30 @ 0x180003ec8 // > @ 0x18017d624 // > @ 0x18017d634 // > @ 0x1801f61f8 // // 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_180003740( __int64 a1, float *a2, __int64 a3, float *a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { __int64 v12; // r11 __int64 v14; // r10 __int64 v15; // rdi int v16; // r9d __int64 v17; // r8 __int64 v18; // rcx int v19; // eax int v20; // ecx int *v21; // r8 int v22; // eax __int64 v23; // rdi float v24; // xmm3_4 float v25; // xmm4_4 __int64 v26; // rax int v27; // r9d float *v28; // rcx float *v29; // r8 float v30; // xmm2_4 float v31; // xmm0_4 int v32; // r8d float *v33; // rcx float *v34; // rax float v35; // xmm1_4 float v36; // xmm0_4 __int64 v37; // r14 __int64 v38; // rdi char *v39; // rbp float v40; // xmm3_4 float v41; // xmm4_4 __int64 v42; // rax int v43; // r9d float *v44; // rcx float *v45; // r8 float v46; // xmm2_4 float v47; // xmm0_4 int v48; // r8d float *v49; // rcx float *v50; // rax float v51; // xmm1_4 float v52; // xmm0_4 __int64 result; // rax unsigned int v54; // r11d __int64 v55; // r9 int v56; // r8d __int64 v57; // rcx __int64 v58; // rax float v59; // xmm0_4 float *v60; // rcx float v61; // xmm0_4 v12 = *(_QWORD *)(a1 + 16) + 4LL * a5; v14 = *(_QWORD *)(a1 + 8) + 4LL * a6; if ( a8 > 0 ) { v15 = (unsigned int)a8; do { v12 -= 4; v16 = a7 >> 3; v17 = 0; if ( a7 >> 3 ) { v18 = v12 + 4096; v17 = 8LL * (unsigned int)(a7 >> 3); do { v19 = *(_DWORD *)(v18 - 4096); v18 += 0x4000; *(_DWORD *)a2 = v19; a2[1] = *(float *)(v18 - 18432); a2[2] = *(float *)(v18 - 0x4000); a2[3] = *(float *)(v18 - 14336); a2[4] = *(float *)(v18 - 12288); a2[5] = *(float *)(v18 - 10240); a2[6] = *(float *)(v18 - 0x2000); a2[7] = *(float *)(v18 - 6144); a2 += 8; --v16; } while ( v16 ); } v20 = a7 & 7; if ( (a7 & 7) != 0 ) { v21 = (int *)(v12 + (v17 << 11)); do { v22 = *v21; v21 += 512; *(_DWORD *)a2++ = v22; --v20; } while ( v20 ); } --v15; } while ( v15 ); } if ( a9 > 0 ) { v23 = (unsigned int)a9; do { v24 = *(float *)(a3 - 4); a3 -= 4; v25 = *a4; v12 -= 4; v26 = 0; v27 = a7 >> 3; if ( a7 >> 3 ) { v28 = (float *)(v12 + 4096); v26 = 8LL * (unsigned int)(a7 >> 3); v29 = (float *)(v14 + 0x2000); do { *a2 = (float)(v25 * *(v29 - 2048)) + (float)(v24 * *(v28 - 1024)); a2[1] = (float)(v25 * *(v29 - 1024)) + (float)(v24 * *(v28 - 512)); a2[2] = (float)(v25 * *v29) + (float)(v24 * *v28); a2[3] = (float)(v25 * v29[1024]) + (float)(v24 * v28[512]); a2[4] = (float)(v25 * v29[2048]) + (float)(v24 * v28[1024]); a2[5] = (float)(v25 * v29[3072]) + (float)(v24 * v28[1536]); a2[6] = (float)(v25 * v29[4096]) + (float)(v24 * v28[2048]); v30 = v25 * v29[5120]; v29 += 0x2000; v31 = v24 * v28[2560]; v28 += 4096; a2[7] = v30 + v31; a2 += 8; --v27; } while ( v27 ); } v32 = a7 & 7; if ( (a7 & 7) != 0 ) { v33 = (float *)(v12 + (v26 << 11)); v34 = (float *)(v14 + (v26 << 12)); do { v35 = v25 * *v34; v34 += 1024; v36 = v24 * *v33; v33 += 512; *a2++ = v35 + v36; --v32; } while ( v32 ); } v14 += 4; ++a4; --v23; } while ( v23 ); } if ( a10 > 0 ) { v37 = a3 - v14; v38 = (unsigned int)a10; v39 = (char *)a4 - v12; do { v40 = *(float *)(v37 + v14 - 4); v14 -= 4; v41 = *(float *)&v39[v12]; v42 = 0; v43 = a7 >> 3; if ( a7 >> 3 ) { v44 = (float *)(v14 + 0x2000); v42 = 8LL * (unsigned int)(a7 >> 3); v45 = (float *)(v12 + 4096); do { *a2 = (float)(v40 * *(v45 - 1024)) - (float)(v41 * *(v44 - 2048)); a2[1] = (float)(v40 * *(v45 - 512)) - (float)(v41 * *(v44 - 1024)); a2[2] = (float)(v40 * *v45) - (float)(v41 * *v44); a2[3] = (float)(v40 * v45[512]) - (float)(v41 * v44[1024]); a2[4] = (float)(v40 * v45[1024]) - (float)(v41 * v44[2048]); a2[5] = (float)(v40 * v45[1536]) - (float)(v41 * v44[3072]); a2[6] = (float)(v40 * v45[2048]) - (float)(v41 * v44[4096]); v46 = v40 * v45[2560]; v45 += 4096; v47 = v41 * v44[5120]; v44 += 0x2000; a2[7] = v46 - v47; a2 += 8; --v43; } while ( v43 ); } v48 = a7 & 7; if ( (a7 & 7) != 0 ) { v49 = (float *)(v14 + (v42 << 12)); v50 = (float *)(v12 + (v42 << 11)); do { v51 = v40 * *v50; v50 += 512; v52 = v41 * *v49; v49 += 1024; *a2++ = v51 - v52; --v48; } while ( v48 ); } v12 += 4; --v38; } while ( v38 ); } result = (unsigned int)a11; if ( a11 > 0 ) { v54 = a7 >> 3; v55 = (unsigned int)a11; do { v14 -= 4; v56 = a7 >> 3; v57 = 0; if ( v54 ) { v58 = v14 + 0x2000; v57 = 8LL * v54; do { v59 = *(float *)(v58 - 0x2000); v58 += 0x8000; *a2 = -v59; a2[1] = -*(float *)(v58 - 36864); a2[2] = -*(float *)(v58 - 0x8000); a2[3] = -*(float *)(v58 - 28672); a2[4] = -*(float *)(v58 - 24576); a2[5] = -*(float *)(v58 - 20480); a2[6] = -*(float *)(v58 - 0x4000); a2[7] = -*(float *)(v58 - 12288); a2 += 8; --v56; } while ( v56 ); } result = a7 & 7; if ( (a7 & 7) != 0 ) { v60 = (float *)(v14 + (v57 << 12)); do { v61 = *v60; v60 += 1024; *a2++ = -v61; result = (unsigned int)(result - 1); } while ( (_DWORD)result ); } --v55; } while ( v55 ); } return result; }