// // sub_102864 from 0x102864 to 0x102adc (632 bytes) // // 1 xrefs: // > @ 0x11a120 // // 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_102864(__int64 result, int a2, __int64 a3, __int64 a4, unsigned __int64 *a5) { float i; // w8 __int64 v6; // x9 int v7; // w8 int64x2_t v8; // q3 int64x2_t v9; // q1 float32x4_t v10; // q0 int64x2_t v11; // q4 int64x2_t v12; // q2 int64x2_t v13; // q1 int64x2_t v14; // q3 unsigned __int64 v15; // d6 int8x16_t *v16; // x10 int8x16_t *v17; // x9 float32x4_t v18; // q6 int8x16_t v19; // q16 int8x16_t v20; // q17 int8x16_t v21; // q19 unsigned __int64 v22; // d7 int32x4_t v23; // q5 float32x4_t v24; // q20 float32x4_t v25; // q21 float32x4_t v26; // q18 int8x16_t *v27; // x9 float32x4_t v28; // q6 int8x16_t v29; // q7 int8x16_t v30; // q16 int8x16_t *v31; // x9 int8x16_t v32; // q19 float32x4_t v33; // q21 float32x4_t v34; // q18 float32x4_t v35; // q18 float v36; // w9 __int64 v37; // x10 __int64 v38; // x0 __int64 v39; // x1 int v40; // w8 for ( i = 4.6566e-10; a2; *(_QWORD *)a4 += *a5 ) { if ( (result & 0xF) == 0 ) break; v6 = (unsigned int)(6 * *(_DWORD *)(a4 + 4)); result = sub_102D8C( (float)(*(_DWORD *)a4 >> 1) * i, *(double *)(a3 + 4 * v6), *(float *)(a3 + 4LL * (unsigned int)(v6 + 4)), *(float *)(a3 + 4LL * (unsigned int)(v6 + 5)), *(float *)(a3 + 4LL * (unsigned int)(v6 + 10)), *(float *)(a3 + 4LL * (unsigned int)(v6 + 11)), *(double *)(a3 + 4LL * (unsigned int)(v6 + 6)), *(double *)(a3 + 4LL * (unsigned int)(v6 + 8))); } v7 = a2 >> 2; if ( a2 >> 2 ) { v8 = vld1q_dup_f64((const double *)a4); v9.n128_u64[0] = 0; v10.n128_u64[0] = 0x3000000030000000LL; v10.n128_u64[1] = 0x3000000030000000LL; v11.n128_u64[0] = 2 * *a5; v9.n128_u64[1] = *a5; v11.n128_u64[1] = 3 * *a5; v12 = vdupq_n_s64(4 * *a5); v13 = vaddq_s64(v8, v9); v14 = vaddq_s64(v11, v8); do { v15 = vmul_s32( vzip2_s32((int32x2_t)v13.n128_u64[0], (int32x2_t)vextq_s8(v13, v13, 8u).n128_u64[0]), (int32x2_t)0x600000006LL).n64_u64[0]; v16 = (int8x16_t *)(a3 + 4LL * (unsigned int)v15); v17 = (int8x16_t *)(a3 + 4LL * HIDWORD(v15)); v18 = *v16; v19 = v16[1]; v20 = v16[2]; v21 = v17[1]; v22 = vmul_s32( vzip2_s32((int32x2_t)v14.n128_u64[0], (int32x2_t)vextq_s8(v14, v14, 8u).n128_u64[0]), (int32x2_t)0x600000006LL).n64_u64[0]; v23 = vmulq_f32(vcvtq_f32_u32(vshrq_n_u32(vuzp1q_s32(v13, v14), 1u)), v10); v24 = v17[2]; LODWORD(v16) = HIDWORD(v22); v25 = vextq_s8(v19, v20, 8u); v19.n128_u64[1] = v17->n128_u64[0]; v26 = vextq_s8(*v17, v21, 8u); v27 = (int8x16_t *)(a3 + 4LL * (unsigned int)v22); *(float32x4_t *)(result + 16) = vmlaq_f32( v19, vuzp1q_s32( vdupq_lane_s32((int32x2_t)v23.n128_u64[0], 0), vdupq_lane_s32((int32x2_t)v23.n128_u64[0], 1)), vsubq_f32(vextq_s8(v20, vextq_s8(v21, v20, 8u), 8u), v19)); *(float32x4_t *)(result + 32) = vmlaq_lane_f32(v26, vsubq_f32(v24, v26), (float32x2_t)v23.n128_u64[0], 1); *(float32x4_t *)result = vmlaq_n_f32(v18, vsubq_f32(v25, v18), v23.n128_f32[0]); v28 = *v27; v29 = v27[1]; v30 = v27[2]; v31 = (int8x16_t *)(a3 + 4LL * (unsigned int)v16); v32 = v31[1]; v33 = vextq_s8(v29, v30, 8u); --v7; v29.n128_u64[1] = v31->n128_u64[0]; v34 = vextq_s8(*v31, v32, 8u); v35 = vmlaq_laneq_f32(v34, vsubq_f32(v31[2], v34), v23, 3); v13 = vaddq_s64(v13, v12); v14 = vaddq_s64(v14, v12); *(float32x4_t *)(result + 64) = vmlaq_f32( v29, vuzp1q_s32(vdupq_laneq_s32(v23, 2), vdupq_laneq_s32(v23, 3)), vsubq_f32(vextq_s8(v30, vextq_s8(v32, v30, 8u), 8u), v29)); *(float32x4_t *)(result + 80) = v35; *(float32x4_t *)(result + 48) = vmlaq_laneq_f32(v28, vsubq_f32(v33, v28), v23, 2); result += 96; } while ( v7 ); *(_QWORD *)a4 = v13.n128_u64[0]; } v36 = 4.6566e-10; if ( (a2 & 3) != 0 ) { do { v37 = (unsigned int)(6 * *(_DWORD *)(a4 + 4)); v38 = sub_102D8C( (float)(*(_DWORD *)a4 >> 1) * v36, *(double *)(a3 + 4 * v37), *(float *)(a3 + 4LL * (unsigned int)(v37 + 4)), *(float *)(a3 + 4LL * (unsigned int)(v37 + 5)), *(float *)(a3 + 4LL * (unsigned int)(v37 + 10)), *(float *)(a3 + 4LL * (unsigned int)(v37 + 11)), *(double *)(a3 + 4LL * (unsigned int)(v37 + 6)), *(double *)(a3 + 4LL * (unsigned int)(v37 + 8))); result = sub_102E10(v38, v39); } while ( v40 ); } return result; }