// // sub_102E24 from 0x102e24 to 0x103050 (556 bytes) // // 1 xrefs: // > sub_87AB0 @ 0x87ae8 // // 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_102E24(__int64 a1) { int v2; // w8 int v3; // w14 float32x4_t *v4; // x11 int v5; // w9 int v6; // w10 int32x4_t *v7; // x12 int32x4_t *v8; // x13 int i; // w14 int32x4_t v10; // q1 int32x4_t v11; // q2 int32x4_t v12; // q3 int32x4_t v13; // q4 float32x4_t v14; // q7 float32x4_t v15; // q1 __int64 v16; // x11 __int64 v17; // x10 int32x2_t v18; // d2 float32x2_t v19; // d1 float32x2_t v20; // d2 float32x2_t v21; // d3 __int64 v22; // x1 __int64 v23; // x8 __int64 v24; // x10 int v25; // w9 __int64 v26; // x8 int v27; // w9 __int64 v28; // x10 float *v29; // x12 __int64 v30; // x11 __int64 result; // x0 int32x2_t v32; // d0 float32x4_t *v33; // x12 __int64 v34; // x13 float32x4_t *v35; // x9 int v36; // w8 float32x4_t *v37; // x10 int32x4_t v38; // q0 __int64 v39; // x11 float32x4_t v40; // q1 float32x4_t v41; // q3 float32x4_t v42; // q1 v2 = 0; while ( v2 < *(_DWORD *)(a1 + 20) ) { v3 = *(_DWORD *)(a1 + 16); v4 = *(float32x4_t **)(a1 + 120); v5 = (v3 + 1) * ((*(_DWORD *)(a1 + 84) + v2 + *(_DWORD *)(a1 + 24)) % *(_DWORD *)(a1 + 32)); v6 = (v3 + 1) * v2; v7 = (int32x4_t *)(*(_QWORD *)(a1 + 112) + 8LL * v6); v8 = (int32x4_t *)(*(_QWORD *)(a1 + 96) + 8LL * v5); for ( i = v3 >> 2; i; v4 += 2 ) { v10 = *v8; v11 = v8[1]; v8 += 2; v12 = *v7; v13 = v7[1]; v7 += 2; --i; v14 = vmlaq_f32( vmulq_f32(v12, vtrn1q_s32(v10, v10)), vrev64q_s32(v12), vmulq_f32(vtrn2q_s32(v10, v10), (float32x4_t)xmmword_2F660)); v15 = vaddq_f32( vmlaq_f32( vmulq_f32(v13, vtrn1q_s32(v11, v11)), vrev64q_s32(v13), vmulq_f32(vtrn2q_s32(v11, v11), (float32x4_t)xmmword_2F660)), v4[1]); *v4 = vaddq_f32(v14, *v4); v4[1] = v15; } v16 = *(int *)(a1 + 16); ++v2; v17 = *(_QWORD *)(a1 + 112) + 8LL * ((int)v16 + v6); v18.n64_u64[0] = *(unsigned __int64 *)(*(_QWORD *)(a1 + 96) + 8LL * ((int)v16 + v5)); v19.n64_u64[0] = vmul_f32(v18, vld1_dup_f32((const float *)v17)).n64_u64[0]; v20.n64_u64[0] = vmul_n_f32(vrev64_s32(v18), *(float *)(v17 + 4)).n64_u64[0]; v21.n64_u32[0] = vsub_f32(v19, v20).n64_u32[0]; v21.n64_u32[1] = vadd_f32(v19, v20).n64_u32[1]; *(float32x2_t *)(*(_QWORD *)(a1 + 120) + 8 * v16) = vadd_f32(v21, *(float32x2_t *)(*(_QWORD *)(a1 + 120) + 8 * v16)); } v22 = *(_QWORD *)(a1 + 120); v23 = *(int *)(a1 + 36); v24 = v22 + 8 * v23; v25 = *(int *)(a1 + 16) >> 2; *(float *)(v24 - 12) = -*(float *)(v22 + 20); v26 = 8 * v23 - 28; v27 = v25 - 1; *(float *)(v24 - 20) = -*(float *)(v22 + 28); v28 = 36; while ( 1 ) { v29 = (float *)(v22 + v28); v30 = v22 + v26; *(float *)(v22 + v26) = -*(float *)(v22 + v28); if ( !v27 ) break; v26 -= 32; v28 += 32; --v27; *(float *)(v30 - 8) = -v29[2]; *(float *)(v30 - 16) = -v29[4]; *(float *)(v30 - 24) = -v29[6]; } result = sub_7259C(*(_QWORD *)(a1 + 72), v22, *(float **)(a1 + 128), 0, 1); if ( !(_DWORD)result ) { v33 = *(float32x4_t **)(a1 + 64); v34 = *(int *)(a1 + 16); v35 = *(float32x4_t **)(a1 + 128); v32.n64_f32[0] = 1.0 / (float)*(int *)(a1 + 36); v36 = 0; v37 = (float32x4_t *)(*(_QWORD *)(a1 + 56) + 4LL * *(int *)(a1 + 92)); v38 = vdupq_lane_s32(v32, 0); v39 = 4 * v34; while ( v36 < (int)v34 ) { v40 = *v35; v41 = *(float32x4_t *)((char *)v35++ + v39); v36 += 4; v42 = vmulq_f32(vaddq_f32(*v33, v40), v38); *v33 = v41; *v37++ = v42; LODWORD(v34) = *(_DWORD *)(a1 + 16); ++v33; } return 0; } return result; }