// // sub_100AA8 from 0x100aa8 to 0x100dec (836 bytes) // // 1 xrefs: // > @ 0x118b10 // // 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 // float32x2_t *__fastcall sub_100AA8( float32x2_t *result, float32x4_t *s, unsigned int a3, float *a4, __int64 a5, __int64 a6, int a7) { float v7; // s6 float32x2_t v8; // d0 float v9; // s7 float32x2_t v10; // d1 float v11; // s5 float32x2_t v12; // d2 float32x2_t v13; // d30 float v14; // s17 float v15; // s31 float32x2_t v16; // d3 float v17; // s16 float32x2_t v18; // d4 float32x4_t *v20; // x19 float32x2_t *v21; // x20 float32x2_t v22; // d8 unsigned int i; // w8 unsigned __int64 v24; // d4 unsigned __int64 v25; // d5 unsigned __int64 v26; // d6 unsigned __int64 v27; // d7 __int64 v28; // x8 float32x2_t v29; // d0 float32x4_t v30; // q18 float32x4_t v31; // q19 float32x4_t v32; // q20 float32x4_t v33; // q21 float32x4_t v34; // q22 float32x4_t v35; // q23 unsigned int v36; // w8 int32x4_t v37; // t1 int v38; // w8 float v39; // s18 float v40; // s19 int32x4_t v41; // t1 float32x4_t v42; // q26 float32x4_t v43; // q24 int v44; // w8 float *v45; // x9 float32x2_t v46; // d5 float32x2_t v47; // d17 float32x2_t v48; // d18 float32x2_t v49; // d5 float32x2_t v50; // d16 unsigned __int64 v51; // d7 float v52; // [xsp+0h] [xbp-50h] float v53; // [xsp+10h] [xbp-40h] v7 = a4[161]; v8.n64_f32[0] = a4[64]; v9 = a4[96]; v10.n64_f32[0] = a4[128]; v11 = a4[160]; v13.n64_f32[0] = *a4; v12.n64_f32[0] = a4[1]; v14 = a4[32]; v15 = a4[33]; v16.n64_f32[0] = a4[65]; v17 = a4[97]; v18.n64_f32[0] = a4[129]; v20 = s; v21 = result; if ( fabsf(v7) >= 0.00002 || fabsf(v11) >= 0.00002 || fabsf(v18.n64_f32[0]) >= 0.00002 || fabsf(v10.n64_f32[0]) >= 0.00002 || fabsf(v17) >= 0.00002 || fabsf(v9) >= 0.00002 || fabsf(v8.n64_f32[0]) >= 0.00002 || fabsf(v14) >= 0.00002 || fabsf(v12.n64_f32[0]) >= 0.00002 || fabsf(v16.n64_f32[0]) >= 0.00002 ) { v30.n128_f32[0] = *a4; v31.n128_f32[0] = a4[128]; v32.n128_f32[0] = a4[64]; v33.n128_f32[0] = a4[1]; v34.n128_f32[0] = a4[129]; v35.n128_f32[0] = a4[65]; v30.n128_f32[1] = a4[32]; v31.n128_f32[1] = a4[160]; v32.n128_f32[1] = a4[96]; v33.n128_f32[1] = a4[33]; v34.n128_f32[1] = a4[161]; v35.n128_f32[1] = a4[97]; v30.n128_u64[1] = __PAIR64__(LODWORD(v9), v8.n64_u32[0]); v31.n128_u64[1] = __PAIR64__(LODWORD(v14), v13.n64_u32[0]); v32.n128_u64[1] = __PAIR64__(LODWORD(v11), v10.n64_u32[0]); v33.n128_u64[1] = __PAIR64__(LODWORD(v17), v16.n64_u32[0]); v34.n128_u64[1] = __PAIR64__(LODWORD(v15), v12.n64_u32[0]); v35.n128_u64[1] = __PAIR64__(LODWORD(v7), v18.n64_u32[0]); v36 = a3 >> 1; if ( a7 ) { for ( ; v36; v20 += 3 ) { v37 = *(int32x4_t *)v21->n64_u64; v21 += 2; --v36; v20[1] = vmlaq_f32(vmulq_f32(vtrn1q_s32(v37, v37), v31), v34, vtrn2q_s32(v37, v37)); v20[2] = vmlaq_laneq_f32(vmulq_laneq_f32(v32, v37, 2), v35, v37, 3); *v20 = vmlaq_lane_f32(vmulq_n_f32(v30, v37.n128_f32[0]), v33, (float32x2_t)v37.n128_u64[0], 1); } v38 = a3 & 1; if ( (a3 & 1) != 0 ) { do { v39 = v21->n64_f32[0]; v40 = v21->n64_f32[1]; ++v21; --v38; v20->n128_f32[0] = (float)(v39 * v13.n64_f32[0]) + (float)(v40 * v12.n64_f32[0]); v20->n128_f32[1] = (float)(v39 * v14) + (float)(v40 * v15); v20->n128_f32[2] = (float)(v39 * v8.n64_f32[0]) + (float)(v40 * v16.n64_f32[0]); v20->n128_f32[3] = (float)(v39 * v9) + (float)(v40 * v17); v20[1].n128_f32[0] = (float)(v39 * v10.n64_f32[0]) + (float)(v40 * v18.n64_f32[0]); v20[1].n128_f32[1] = (float)(v39 * v11) + (float)(v40 * v7); v20 = (float32x4_t *)((char *)v20 + 24); } while ( v38 ); } } else { while ( v36 ) { v41 = *(int32x4_t *)v21->n64_u64; v21 += 2; --v36; v42 = vmlaq_f32(vmlaq_f32(v20[1], v31, vtrn1q_s32(v41, v41)), v34, vtrn2q_s32(v41, v41)); v43 = vaddq_f32(vmlaq_laneq_f32(vmulq_laneq_f32(v32, v41, 2), v35, v41, 3), v20[2]); *v20 = vmlaq_lane_f32(vmlaq_n_f32(*v20, v30, v41.n128_f32[0]), v33, (float32x2_t)v41.n128_u64[0], 1); v20[1] = v42; v20[2] = v43; v20 += 3; } v44 = a3 & 1; v12.n64_f32[1] = v15; v13.n64_f32[1] = v14; v16.n64_f32[1] = v17; v8.n64_f32[1] = v9; v18.n64_f32[1] = v7; v10.n64_f32[1] = v11; if ( (a3 & 1) != 0 ) { do { v46.n64_u64[0] = vld1_dup_f32((const float *)v21).n64_u64[0]; v45 = (float *)v21 + 1; --v44; ++v21; v47.n64_u64[0] = vmul_f32(v46, v13).n64_u64[0]; v48.n64_u64[0] = vmul_f32(v46, v8).n64_u64[0]; v49.n64_u64[0] = vmla_n_f32(vmul_f32(v46, v10), v18, *v45).n64_u64[0]; v50.n64_u64[0] = v20[1].n128_u64[0]; v51 = vadd_f32(vmla_n_f32(v48, v16, *v45), *(float32x2_t *)&v20->n128_i8[8]).n64_u64[0]; v20->n128_u64[0] = vadd_f32(vmla_n_f32(v47, v12, *v45), (float32x2_t)v20->n128_u64[0]).n64_u64[0]; v20->n128_u64[1] = v51; v20[1].n128_u64[0] = vadd_f32(v49, v50).n64_u64[0]; v20 = (float32x4_t *)((char *)v20 + 24); } while ( v44 ); } } } else { v22.n64_u64[0] = __PAIR64__(LODWORD(v15), v13.n64_u32[0]); if ( a7 ) { v52 = a4[33]; v53 = *a4; result = (float32x2_t *)memset(s, 0, 24LL * a3); v15 = v52; v13.n64_f32[0] = v53; } for ( i = a3 >> 2; i; --i ) { v24 = vmla_f32((float32x2_t)v20->n128_u64[0], v22, (float32x2_t)v21->n64_u64[0]).n64_u64[0]; v25 = vmla_f32(*(float32x2_t *)&v20[1].n128_i8[8], v22, v21[1]).n64_u64[0]; v26 = vmla_f32((float32x2_t)v20[3].n128_u64[0], v22, v21[2]).n64_u64[0]; v27 = vmla_f32(*(float32x2_t *)&v20[4].n128_i8[8], v22, v21[3]).n64_u64[0]; v21 += 4; v20->n128_u64[0] = v24; v20[1].n128_u64[1] = v25; v20[3].n128_u64[0] = v26; v20[4].n128_u64[1] = v27; v20 += 6; } v28 = 0; v13.n64_f32[1] = v15; while ( (a3 & 3) != (_DWORD)v28 ) { v29.n64_u64[0] = (unsigned __int64)v21[v28++]; v20->n128_u64[0] = vmla_f32((float32x2_t)v20->n128_u64[0], v13, v29).n64_u64[0]; v20 = (float32x4_t *)((char *)v20 + 24); } } return result; }