// // sub_101EF4 from 0x101ef4 to 0x1022d4 (992 bytes) // // 1 xrefs: // > @ 0x11a0f8 // // 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 // float32x4_t *__fastcall sub_101EF4( float32x4_t *result, int a2, __int64 a3, __int64 a4, unsigned __int64 *a5, double a6, double a7, double a8, long double a9, double a10, long double a11) { float v11; // w8 long double v12; // q0 float v13; // w9 float i; // w10 unsigned int v15; // w11 _WORD *v16; // x12 _WORD *v17; // x14 float v18; // s4 int v19; // w1 int v20; // w8 int64x2_t v21; // q4 int64x2_t v22; // q2 float32x4_t v23; // q0 int64x2_t v24; // q5 int64x2_t v25; // q2 int64x2_t v26; // q4 unsigned __int64 v27; // d7 int16x8_t *v28; // x10 __int64 v29; // x9 int16x8_t v30; // q7 int16x8_t v31; // q17 __int128 v32; // q19 unsigned __int64 v33; // d16 int32x4_t v34; // q6 int32x4_t v35; // q20 int8x16_t v36; // q7 int8x16_t v37; // q17 int8x16_t v38; // q21 int8x16_t v39; // q18 float32x4_t v40; // q22 float32x4_t v41; // q21 float32x4_t v42; // q20 int16x8_t *v43; // x9 int16x8_t v44; // q7 int16x8_t v45; // q16 int16x4_t *v46; // x9 int32x4_t v47; // q20 int8x16_t v48; // q7 int8x16_t v49; // q16 int8x16_t v50; // q21 int8x16_t v51; // q18 float32x4_t v52; // q22 float32x4_t v53; // q21 float32x4_t v54; // q20 float32x4_t v55; // q21 float v56; // w9 long double v57; // q0 float v58; // w10 float v59; // w11 unsigned int v60; // w12 _WORD *v61; // x13 _WORD *v62; // x15 float v63; // s4 _QWORD *v64; // x4 int v65; // w8 v11 = 4.6566e-10; *(_QWORD *)&v12 = 0x3800000038000000LL; *((_QWORD *)&v12 + 1) = 0x3800000038000000LL; v13 = 0.000030518; for ( i = -0.000030518; a2; *(_QWORD *)a4 += *a5 ) { if ( ((unsigned __int8)result & 0xF) == 0 ) break; v15 = 6 * *(_DWORD *)(a4 + 4); v16 = (_WORD *)(a3 + 2LL * v15); LOWORD(a11) = *v16; v17 = (_WORD *)(a3 + 2LL * (v15 + 6)); LOWORD(a9) = *v17; WORD1(a11) = v16[1]; WORD2(a11) = *(_WORD *)(a3 + 2LL * (v15 + 2)); WORD1(a9) = v17[1]; WORD2(a9) = *(_WORD *)(a3 + 2LL * (v15 + 8)); WORD3(a11) = *(_WORD *)(a3 + 2LL * (v15 + 3)); v18 = (float)*(__int16 *)(a3 + 2LL * (v15 + 5)) * i; WORD3(a9) = *(_WORD *)(a3 + 2LL * (v15 + 9)); result = (float32x4_t *)sub_102D58( v12, v18 + (float)((float)*(__int16 *)(a3 + 2LL * (v15 + 11)) * v13), (float)(*(_DWORD *)a4 >> 1) * v11, a9, v18, a11, (float)((float)*(__int16 *)(a3 + 2LL * (v15 + 4)) * i) + (float)((float)*(__int16 *)(a3 + 2LL * (v15 + 10)) * v13)); a2 = v19 - 1; } v20 = a2 >> 2; if ( a2 >> 2 ) { v21 = vld1q_dup_f64((const double *)a4); v22.n128_u64[0] = 0; v23.n128_u64[0] = 0x3000000030000000LL; v23.n128_u64[1] = 0x3000000030000000LL; v24.n128_u64[0] = 2 * *a5; v22.n128_u64[1] = *a5; v24.n128_u64[1] = 3 * *a5; a9 = COERCE_LONG_DOUBLE(vdupq_n_s64(4 * *a5)); v25 = vaddq_s64(v21, v22); v26 = vaddq_s64(v24, v21); *(_QWORD *)&a11 = 0x3800000038000000LL; *((_QWORD *)&a11 + 1) = 0x3800000038000000LL; do { v27 = vmul_s32( vzip2_s32((int32x2_t)v25.n128_u64[0], (int32x2_t)vextq_s8(v25, v25, 8u).n128_u64[0]), (int32x2_t)0x600000006LL).n64_u64[0]; v28 = (int16x8_t *)(a3 + 2LL * (unsigned int)v27); v29 = a3 + 2LL * HIDWORD(v27); v30 = *v28; v31 = v28[1]; v32 = *(_OWORD *)(v29 + 16); v33 = vmul_s32( vzip2_s32((int32x2_t)v26.n128_u64[0], (int32x2_t)vextq_s8(v26, v26, 8u).n128_u64[0]), (int32x2_t)0x600000006LL).n64_u64[0]; v34 = vmulq_f32(vcvtq_f32_u32(vshrq_n_u32(vuzp1q_s32(v25, v26), 1u)), v23); LODWORD(v28) = HIDWORD(v33); v35 = vmovl_s16((int16x4_t)v30.n128_u64[0]); v36 = vcvtq_f32_s32(vmovl_high_s16(v30)); v37 = vcvtq_f32_s32(vmovl_s16((int16x4_t)v31.n128_u64[0])); v38 = vcvtq_f32_s32(vmovl_s16(*(int16x4_t *)v29)); v39 = vcvtq_f32_s32(vmovl_high_s16(*(int16x8_t *)v29)); v40 = vextq_s8(v36, v37, 8u); v36.n128_u64[1] = v38.n128_u64[0]; v41 = vextq_s8(v38, v39, 8u); v42 = vcvtq_f32_s32(v35); v43 = (int16x8_t *)(a3 + 2LL * (unsigned int)v33); result[1] = vmulq_f32( vmlaq_f32( v36, vuzp1q_s32( vdupq_lane_s32((int32x2_t)v34.n128_u64[0], 0), vdupq_lane_s32((int32x2_t)v34.n128_u64[0], 1)), vsubq_f32(vextq_s8(v37, vextq_s8(v39, v37, 8u), 8u), v36)), *(float32x4_t *)&a11); result[2] = vmulq_f32( vmlaq_lane_f32( v41, vsubq_f32(vcvtq_f32_s32(vmovl_s16(*(int16x4_t *)&v32)), v41), (float32x2_t)v34.n128_u64[0], 1), *(float32x4_t *)&a11); *result = vmulq_f32(vmlaq_n_f32(v42, vsubq_f32(v40, v42), v34.n128_f32[0]), *(float32x4_t *)&a11); v44 = *v43; v45 = v43[1]; v46 = (int16x4_t *)(a3 + 2LL * (unsigned int)v28); v47 = vmovl_s16((int16x4_t)v44.n128_u64[0]); v48 = vcvtq_f32_s32(vmovl_high_s16(v44)); v49 = vcvtq_f32_s32(vmovl_s16((int16x4_t)v45.n128_u64[0])); v50 = vcvtq_f32_s32(vmovl_s16((int16x4_t)v46->n64_u64[0])); v51 = vcvtq_f32_s32(vmovl_high_s16(*(int16x8_t *)v46->n64_u64)); v52 = vextq_s8(v48, v49, 8u); v48.n128_u64[1] = v50.n128_u64[0]; v53 = vextq_s8(v50, v51, 8u); v54 = vcvtq_f32_s32(v47); v55 = vmlaq_laneq_f32(v53, vsubq_f32(vcvtq_f32_s32(vmovl_s16(v46[2])), v53), v34, 3); --v20; v25 = vaddq_s64(v25, *(int64x2_t *)&a9); v26 = vaddq_s64(v26, *(int64x2_t *)&a9); result[4] = vmulq_f32( vmlaq_f32( v48, vuzp1q_s32(vdupq_laneq_s32(v34, 2), vdupq_laneq_s32(v34, 3)), vsubq_f32(vextq_s8(v49, vextq_s8(v51, v49, 8u), 8u), v48)), *(float32x4_t *)&a11); result[5] = vmulq_f32(v55, *(float32x4_t *)&a11); result[3] = vmulq_f32(vmlaq_laneq_f32(v54, vsubq_f32(v52, v54), v34, 2), *(float32x4_t *)&a11); result += 6; } while ( v20 ); *(_QWORD *)a4 = v25.n128_u64[0]; } v56 = 4.6566e-10; *(_QWORD *)&v57 = 0x3800000038000000LL; *((_QWORD *)&v57 + 1) = 0x3800000038000000LL; v58 = 0.000030518; v59 = -0.000030518; if ( (a2 & 3) != 0 ) { do { v60 = 6 * *(_DWORD *)(a4 + 4); v61 = (_WORD *)(a3 + 2LL * v60); LOWORD(a11) = *v61; v62 = (_WORD *)(a3 + 2LL * (v60 + 6)); LOWORD(a9) = *v62; WORD1(a11) = v61[1]; WORD2(a11) = *(_WORD *)(a3 + 2LL * (v60 + 2)); WORD1(a9) = v62[1]; WORD2(a9) = *(_WORD *)(a3 + 2LL * (v60 + 8)); WORD3(a11) = *(_WORD *)(a3 + 2LL * (v60 + 3)); v63 = (float)*(__int16 *)(a3 + 2LL * (v60 + 5)) * v59; WORD3(a9) = *(_WORD *)(a3 + 2LL * (v60 + 9)); result = (float32x4_t *)sub_102D58( v57, v63 + (float)((float)*(__int16 *)(a3 + 2LL * (v60 + 11)) * v58), (float)(*(_DWORD *)a4 >> 1) * v56, a9, v63, a11, (float)((float)*(__int16 *)(a3 + 2LL * (v60 + 4)) * v59) + (float)((float)*(__int16 *)(a3 + 2LL * (v60 + 10)) * v58)); *(_QWORD *)a4 += *v64; } while ( v65 != 1 ); } return result; }