// // sub_103E84 from 0x103e84 to 0x10430c (1160 bytes) // // 1 xrefs: // > @ 0x11f738 // // 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_103E84(__int64 a1, __int64 a2, __int64 a3, int a4) { int v4; // w8 unsigned __int64 v5; // x22 __int64 v7; // x20 unsigned int v9; // w23 int v10; // w23 long double v11; // q0 float32x4_t v12; // q0 __int64 v13; // x0 __int64 v14; // x1 int32x4_t v15; // q0 int32x4_t v16; // q1 int32x4_t v17; // q16 uint32x4_t v18; // q3 uint32x4_t v19; // q1 int32x4_t v20; // q2 uint32x4_t v21; // q16 float32x4_t v22; // q4 float32x4_t v23; // q5 float32x4_t v24; // q7 __int64 v25; // x23 __int64 v26; // x22 __int64 v27; // x0 __int64 v28; // x1 long double v29; // q0 __int128 v30; // q1 long double v31; // q0 __int128 v32; // q1 __int64 v33; // x8 int v34; // w23 int8x16_t v35; // q0 int32x4_t v36; // q2 int32x4_t v37; // q0 __int64 v38; // x23 __int64 v39; // x22 int8x16_t v40; // q0 float32x4_t v41; // q2 int v42; // w22 __int64 j; // x0 int32x4_t v44; // q0 int32x4_t v45; // q1 int32x4_t v46; // q19 uint32x4_t v47; // q3 uint32x4_t v48; // q1 int8x16_t v49; // q5 int8x16_t v50; // q4 int32x4_t v51; // q19 int8x16_t v52; // q7 int8x16_t v53; // q6 int32x4_t v54; // q5 uint32x4_t v55; // q7 uint32x4_t v56; // q5 int32x4_t v57; // q2 uint32x4_t v58; // q19 uint32x4_t v59; // q0 uint32x4_t v60; // q2 uint32x4_t v61; // q4 float32x4_t v62; // q20 float32x4_t v63; // q18 float32x4_t v64; // q6 float32x4_t v65; // q3 float32x4_t v66; // q7 float32x4_t v67; // q16 float32x4_t v68; // q17 float32x4_t v69; // q1 float32x4_t v70; // q5 float32x4_t v71; // q2 float32x4_t v72; // q19 float32x4_t v73; // q4 float32x4_t v74; // q0 float32x4_t v75; // q2 float32x4_t v76; // q3 float32x4_t v77; // q6 float32x4_t v78; // q7 int k; // w22 float32x4_t v80; // q0 int16x8_t i; // [xsp+40h] [xbp-B0h] float32x4_t v83; // [xsp+50h] [xbp-A0h] long double v84; // [xsp+50h] [xbp-A0h] int8x16_t v85; // [xsp+50h] [xbp-A0h] float32x4_t v86; // [xsp+60h] [xbp-90h] float32x4_t v87; // [xsp+60h] [xbp-90h] float32x4_t v88; // [xsp+60h] [xbp-90h] float32x4_t v89; // [xsp+70h] [xbp-80h] float32x4_t v90; // [xsp+80h] [xbp-70h] long double v91; // [xsp+90h] [xbp-60h] int8x16_t v92; // [xsp+A0h] [xbp-50h] int8x16_t v93; // [xsp+B0h] [xbp-40h] v4 = *(unsigned __int8 *)(a1 + 102); v91 = *(long double *)a1; v5 = (unsigned int)a4; v7 = a1; v90 = *(float32x4_t *)(a1 + 16); v9 = a4 >> 2; v89 = *(float32x4_t *)(a1 + 32); switch ( *(_BYTE *)(a1 + 100) ) { case 0: case 1: while ( v9 ) { v31 = sub_104768(a1); --v9; a1 = sub_10479C(v31, *(long double *)a2, v91); *(_OWORD *)a2 = v32; a2 = v33; } break; case 2: case 3: v34 = a4 >> 3; for ( i = vdupq_n_s16(-v4); v34; a2 += 32 ) { v84 = *(long double *)a2; v87 = *(float32x4_t *)(a2 + 16); v35.n128_u64[0] = sub_103C94(v7, a3); --v34; v36 = vmlaq_f32(v90, vcvtq_f32_u32(vandq_s8(v35, *(int8x16_t *)&v91)), v89); v37 = vmlaq_f32(v90, vcvtq_f32_u32(vandq_s8(*(int8x16_t *)&v91, vshlq_s16(v35, i))), v89); *(float32x4_t *)a2 = vaddq_f32(vzip1q_s32(v36, v37), *(float32x4_t *)&v84); *(float32x4_t *)(a2 + 16) = vaddq_f32(vzip2q_s32(v36, v37), v87); } v38 = 0; v39 = (v5 >> 2) & 1; while ( (_DWORD)v39 != (_DWORD)v38 ) { v88 = COERCE_FLOAT32X4_T(sub_104774(*(long double *)(a2 + 16 * v38))); v85 = COERCE_INT8X16_T(((long double (*)(void))sub_10430C)()); *(long double *)&v40 = sub_10430C(v7, a3); v41.n128_u64[0] = vmlaq_f32(v90, vcvtq_f32_u32(vandq_s8(v85, *(int8x16_t *)&v91)), v89).n128_u64[0]; v41.n128_u64[1] = vmlaq_f32(v90, vcvtq_f32_u32(vandq_s8(v40, *(int8x16_t *)&v91)), v89).n128_u64[0]; *(float32x4_t *)(a2 + 16 * v38++) = vaddq_f32(v41, v88); } break; case 4: case 5: case 6: case 7: sub_104780(); v10 = (int)v5 >> 4; sub_1047CC(v11); if ( (int)v5 >> 4 ) { do { sub_104774(*(long double *)a2); v83 = *(float32x4_t *)(a2 + 32); v86 = *(float32x4_t *)(a2 + 48); sub_103C94(v13, v14); *(long double *)&v15 = sub_1047F0(); v18 = vuzp1q_s32(v17, v16); v19 = vuzp2q_s32(v17, v16); v21 = vuzp1q_s32(v15, v20); v12 = vcvtq_f32_u32(vuzp2q_s32(v15, v20)); *(float32x4_t *)(a2 + 32) = vmlaq_f32(vaddq_f32(v83, v24), vcvtq_f32_u32(v18), v89); *(float32x4_t *)(a2 + 48) = vmlaq_f32(vaddq_f32(v86, v24), vcvtq_f32_u32(v19), v89); *(float32x4_t *)a2 = vmlaq_f32(vaddq_f32(v22, v24), vcvtq_f32_u32(v21), v89); *(float32x4_t *)(a2 + 16) = vmlaq_f32(vaddq_f32(v23, v24), v12, v89); a2 += 64; --v10; } while ( v10 ); } v25 = 0; v26 = (v5 >> 2) & 3; while ( (_DWORD)v26 != (_DWORD)v25 ) { sub_104774(*(long double *)&v12); v29 = sub_10430C(v27, v28); sub_10479C(v29, *(long double *)(a2 + 16 * v25), v91); *(_OWORD *)(a2 + 16 * v25++) = v30; } break; case 8: v42 = a4 >> 5; for ( j = sub_1047CC(COERCE_LONG_DOUBLE(vdupq_n_s16(-6 * v4))); v42; a2 += 128 ) { sub_104768(j); *(long double *)&v44 = sub_1047F0(); v47 = vuzp1q_s32(v46, v45); v48 = vuzp2q_s32(v46, v45); v51 = vextq_s8(v50, vextq_s8(v49, v50, 8u), 8u); v50.n128_u64[1] = v49.n128_u64[0]; v54 = vextq_s8(v53, vextq_s8(v52, v53, 8u), 8u); v53.n128_u64[1] = v52.n128_u64[0]; v55 = vuzp1q_s32(v51, v54); v56 = vuzp2q_s32(v51, v54); v58 = vuzp1q_s32(v44, v57); v59 = vuzp2q_s32(v44, v57); v60 = vuzp1q_s32(v50, v53); v61 = vuzp2q_s32(v50, v53); v63 = vmlaq_f32(v62, vcvtq_f32_u32(v47), v89); v64 = vmlaq_f32(v62, vcvtq_f32_u32(v55), v89); v65 = vmlaq_f32(v62, vcvtq_f32_u32(v48), v89); v66 = vmlaq_f32(v62, vcvtq_f32_u32(v56), v89); v67 = vmlaq_f32(v62, vcvtq_f32_u32(v59), v89); v68 = vmlaq_f32(v62, vcvtq_f32_u32(v61), v89); v69 = vmlaq_f32(vaddq_f32(*(float32x4_t *)a2, v62), vcvtq_f32_u32(v58), v89); v70 = vmlaq_f32(vaddq_f32(*(float32x4_t *)(a2 + 16), v62), vcvtq_f32_u32(v60), v89); v71 = *(float32x4_t *)(a2 + 96); v72 = *(float32x4_t *)(a2 + 112); v73 = vaddq_f32(v64, *(float32x4_t *)(a2 + 80)); v74 = vaddq_f32(v63, *(float32x4_t *)(a2 + 64)); *(float32x4_t *)a2 = v69; *(float32x4_t *)(a2 + 16) = v70; v75 = vaddq_f32(v65, v71); v76 = vaddq_f32(v66, v72); v77 = *(float32x4_t *)(a2 + 32); v78 = *(float32x4_t *)(a2 + 48); *(float32x4_t *)(a2 + 64) = v74; *(float32x4_t *)(a2 + 80) = v73; *(float32x4_t *)(a2 + 96) = v75; *(float32x4_t *)(a2 + 112) = v76; --v42; *(float32x4_t *)(a2 + 32) = vaddq_f32(v67, v77); *(float32x4_t *)(a2 + 48) = vaddq_f32(v68, v78); } for ( k = (v9 >> 1) & 3; k; a2 += 32 ) { j = sub_1047B8(j); --k; v92 = vandq_s8(v92, *(int8x16_t *)&v91); v93 = vandq_s8(v93, *(int8x16_t *)&v91); v80 = vaddq_f32(vmlaq_f32(v90, vcvtq_f32_u32(v92), v89), *(float32x4_t *)(a2 + 16)); *(float32x4_t *)a2 = vaddq_f32(vmlaq_f32(v90, vcvtq_f32_u32(v93), v89), *(float32x4_t *)a2); *(float32x4_t *)(a2 + 16) = v80; } break; default: return 0; } return 0; }