// // sub_103050 from 0x103050 to 0x103a14 (2500 bytes) // // 3 xrefs: // > sub_103A14 @ 0x103a20 // > sub_103A28 @ 0x103a34 // > sub_103A3C @ 0x103a48 // // 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_103050(__int64 a1, __int64 a2, __int64 a3, const float *a4, float *a5) { bool v5; // w8 long double v6; // q0 long double v7; // q1 long double v8; // q2 long double v9; // q3 long double v10; // q4 __int64 result; // x0 __int64 v12; // x1 int v13; // w2 __int64 v14; // x3 unsigned __int32 *v15; // x4 int v16; // w6 int v17; // w7 __int64 v18; // x8 int v19; // w9 __int64 v20; // x10 __int64 v21; // x11 __int64 v22; // x12 __int64 v23; // x13 __int64 v24; // x14 __int64 v25; // x15 __int64 v26; // x16 __int64 v27; // x17 float32x4_t v28; // q0 float32x4_t v29; // q1 float32x4_t v30; // q2 float32x4_t v31; // q3 float32x4_t v32; // q4 float32x4_t v33; // q5 float32x4_t v34; // q6 float32x4_t v35; // q7 float32x4_t v36; // q16 float32x4_t v37; // q17 __int64 v38; // x5 __int64 v39; // x5 int v40; // w19 __int64 i; // x20 _DWORD *v42; // x21 int v43; // w22 float32x4_t v44; // q24 float32x4_t v45; // q26 float32x4_t v46; // q18 float32x4_t v47; // q21 float32x4_t v48; // q19 float32x4_t v49; // q25 float32x4_t v50; // q20 float32x4_t v51; // q23 __int64 v52; // x20 float32x4_t v53; // q22 float32x4_t v54; // q27 float32x4_t v55; // q28 float32x4_t v56; // q29 float32x4_t v57; // q30 int j; // w21 float32x4_t v59; // q8 float32x4_t v60; // q12 float32x4_t v61; // q14 float32x4_t v62; // q10 float32x4_t v63; // q24 float32x4_t v64; // q31 float32x4_t v65; // q9 float32x4_t v66; // q11 float32x4_t v67; // q21 float32x4_t v68; // q13 float32x4_t v69; // q19 float32x4_t v70; // q20 float32x4_t v71; // q15 float32x4_t v72; // q14 __int64 v73; // x22 float32x4_t v74; // q26 float32x4_t v75; // q10 __int64 k; // x20 _DWORD *v77; // x22 __int64 v78; // x1 int v79; // w2 __int64 v80; // x3 int v81; // w6 int v82; // w7 __int64 v83; // x8 int v84; // w9 __int64 v85; // x10 __int64 v86; // x11 __int64 v87; // x12 __int64 v88; // x13 __int64 v89; // x14 __int64 v90; // x15 __int64 v91; // x16 __int64 v92; // x17 float32x4_t v93; // q0 float32x4_t v94; // q1 float32x4_t v95; // q2 float32x4_t v96; // q3 float32x4_t v97; // q4 __int64 v98; // x4 __int64 v99; // x4 __int64 v100; // x5 __int64 v101; // x5 int v102; // w20 __int64 m; // x21 _DWORD *v104; // x22 int v105; // w23 float32x4_t v106; // q16 float32x4_t v107; // q20 float32x4_t v108; // q7 float32x4_t v109; // q19 float32x4_t v110; // q5 float32x4_t v111; // q18 float32x4_t v112; // q6 float32x4_t v113; // q17 __int64 v114; // x21 __int64 v115; // x21 int n; // w22 float32x4_t v117; // q21 float32x4_t v118; // q16 float32x4_t v119; // q7 float32x4_t v120; // q5 float32x4_t v121; // q6 float32x4_t v122; // q23 float32x4_t v123; // q17 float32x4_t v124; // q23 float32x4_t v125; // q18 float32x4_t v126; // q23 float32x4_t v127; // q22 __int64 v128; // x21 int ii; // w22 float32x4_t v130; // q21 float32x4_t v131; // q16 float32x4_t v132; // q7 float32x4_t v133; // q5 float32x4_t v134; // q6 float32x4_t v135; // q23 float32x4_t v136; // q17 float32x4_t v137; // q23 float32x4_t v138; // q18 float32x4_t v139; // q23 float32x4_t v140; // q22 __int64 v141; // x21 int jj; // w22 float32x4_t v143; // q21 __int64 v144; // x23 float32x4_t v145; // q16 float32x4_t v146; // q7 float32x4_t v147; // q5 float32x4_t v148; // q6 float32x4_t v149; // q23 float32x4_t v150; // q17 float32x4_t v151; // q23 float32x4_t v152; // q18 float32x4_t v153; // q23 float32x4_t v154; // q22 __int64 v155; // x21 int kk; // w22 float32x4_t v157; // q21 float32x4_t v158; // q16 float32x4_t v159; // q7 float32x4_t v160; // q5 float32x4_t v161; // q6 float32x4_t v162; // q23 float32x4_t v163; // q17 float32x4_t v164; // q23 float32x4_t v165; // q18 float32x4_t v166; // q23 float32x4_t v167; // q22 __int64 mm; // x21 _DWORD *v169; // x23 v5 = *a5 != 0.0 || a5[1] != 0.0 || a5[2] != 0.0 || a5[3] != 0.0 || a5[4] != 0.0; *(float32x4_t *)&v6 = vld1q_dup_f32(a4); *(float32x4_t *)&v7 = vld1q_dup_f32(a4 + 2); *(float32x4_t *)&v8 = vld1q_dup_f32(a4 + 3); *(float32x4_t *)&v9 = vld1q_dup_f32(a4 + 1); *(float32x4_t *)&v10 = vld1q_dup_f32(a4 + 4); if ( v5 ) { result = sub_103A50(a1, a2, a3, a4, a5, 323584, v6, v7, v8, v9, v10); v39 = v38 + 2148; while ( v16 >= 1 ) { v33.n128_u32[0] = *v15; v34.n128_u32[0] = v15[1]; v35.n128_u32[0] = v15[2]; v36.n128_u32[0] = v15[3]; v37.n128_u32[0] = v15[4]; v40 = v16 - 4; if ( v16 >= 4 ) v16 = v19; for ( i = 0; i < v16; ++i ) { v42 = *(_DWORD **)(v20 + 8 * i); *(_DWORD *)(v21 + 4 * i) = *v42; *(_DWORD *)(v22 + 4 * i) = v42[1]; *(_DWORD *)(v23 + 4 * i) = v42[2]; *(_DWORD *)(v24 + 4 * i) = v42[3]; *(_DWORD *)(v25 + 4 * i) = v42[4]; *(_DWORD *)(v26 + 4 * i) = v42[5]; v43 = v42[6]; LODWORD(v42) = v42[7]; *(_DWORD *)(v27 + 4 * i) = v43; *(_DWORD *)(v14 + 4 * i) = (_DWORD)v42; } v45 = 0u; v44 = 0u; v46 = 0u; v47 = 0u; v49 = 0u; v48 = 0u; v51 = 0u; v50 = 0u; v52 = 0; v33 = vdupq_lane_s32((int32x2_t)v33.n128_u64[0], 0); v34 = vdupq_lane_s32((int32x2_t)v34.n128_u64[0], 0); v35 = vdupq_lane_s32((int32x2_t)v35.n128_u64[0], 0); v36 = vdupq_lane_s32((int32x2_t)v36.n128_u64[0], 0); v37 = vdupq_lane_s32((int32x2_t)v37.n128_u64[0], 0); v53 = 0u; v54 = 0u; v55 = 0u; v56 = 0u; v57 = 0u; for ( j = v13; j; v45 = vmlaq_f32(v75, v65, v59) ) { v59 = *(float32x4_t *)(result + v52); v60 = vaddq_f32(v57, v28); v61 = vaddq_f32(v53, v32); v62 = vaddq_f32(v56, v31); v63 = vmlaq_f32(v44, v60, v59); v64 = vaddq_f32(v54, v30); v65 = vaddq_f32(v55, v29); v66 = vmulq_f32(v63, v61); if ( v17 >= 1 ) { v67 = vmlaq_f32(v47, v60, v63); v68 = vaddq_f32(vmlaq_f32(vnegq_f32(vmulq_f32(v67, v64)), v62, v63), v46); v46 = vmlaq_f32(vnegq_f32(vmulq_f32(v67, v61)), v65, v63); if ( v17 != 1 ) { v69 = vmlaq_f32(v48, v60, v67); v70 = vmlaq_f32(v50, v60, v69); v71 = vmulq_f32(v69, v61); v72 = vmulq_f32(v70, v61); v50 = vmlsq_f32(vmlaq_f32(v51, v62, v69), v64, v70); v51 = vmlaq_f32(vnegq_f32(v72), v65, v69); v48 = vmlsq_f32(vmlaq_f32(v49, v62, v67), v64, v69); v49 = vmlaq_f32(vnegq_f32(v71), v65, v67); } v47 = v68; } v73 = (unsigned int)(v16 - 1); v74 = vmlaq_f32(v45, v62, v59); v75 = vnegq_f32(v66); if ( (unsigned int)v73 <= 3 ) __asm { BR X23 } v57 = vaddq_f32(v57, v33); v56 = vaddq_f32(v56, v34); v55 = vaddq_f32(v55, v35); v54 = vaddq_f32(v54, v36); v53 = vaddq_f32(v53, v37); --j; v52 += v18; v44 = vmlsq_f32(v74, v64, v63); } for ( k = 0; k < v16; ++k ) { v77 = *(_DWORD **)(v20 + 8 * k); *v77 = *(_DWORD *)(v21 + 4 * k); v77[1] = *(_DWORD *)(v22 + 4 * k); v77[2] = *(_DWORD *)(v23 + 4 * k); v77[3] = *(_DWORD *)(v24 + 4 * k); v77[4] = *(_DWORD *)(v25 + 4 * k); v77[5] = *(_DWORD *)(v26 + 4 * k); v77[6] = *(_DWORD *)(v27 + 4 * k); v77[7] = *(_DWORD *)(v14 + 4 * k); *(_QWORD *)(v20 + 8 * k) = v77 + 32; } v12 += 16; result += 16; v16 = v40; } } else { result = sub_103A50(a1, a2, a3, a4, 323584, 323584, v6, v7, v8, v9, v10); v99 = v98 + 2136; v101 = v100 + 2140; while ( v81 >= 1 ) { v102 = v81 - 4; if ( v81 >= 4 ) v81 = v84; for ( m = 0; m < v81; ++m ) { v104 = *(_DWORD **)(v85 + 8 * m); *(_DWORD *)(v86 + 4 * m) = *v104; *(_DWORD *)(v87 + 4 * m) = v104[1]; *(_DWORD *)(v88 + 4 * m) = v104[2]; *(_DWORD *)(v89 + 4 * m) = v104[3]; *(_DWORD *)(v90 + 4 * m) = v104[4]; *(_DWORD *)(v91 + 4 * m) = v104[5]; v105 = v104[6]; LODWORD(v104) = v104[7]; *(_DWORD *)(v92 + 4 * m) = v105; *(_DWORD *)(v80 + 4 * m) = (_DWORD)v104; } v107 = 0u; v106 = 0u; v109 = 0u; v108 = 0u; v111 = 0u; v110 = 0u; v113 = 0u; v112 = 0u; v114 = (unsigned int)(v81 - 1); if ( v82 == 1 ) { if ( (unsigned int)v114 <= 3 ) __asm { BR X22 } } else { if ( !v82 ) __asm { BR X22 } switch ( v81 ) { case 1: v115 = 0; for ( n = v79; n; v115 += v83 ) { v117 = *(float32x4_t *)(result + v115); --n; v118 = vmlaq_f32(v106, v93, v117); v119 = vmlaq_f32(v108, v93, v118); v120 = vmlaq_f32(v110, v93, v119); v121 = vmlaq_f32(v112, v93, v120); v122 = vmulq_f32(v121, v97); *(_DWORD *)(v78 + v115) = v121.n128_u32[0]; v112 = vmlsq_f32(vmlaq_f32(v113, v96, v120), v95, v121); v123 = vnegq_f32(v122); v124 = vmulq_f32(v120, v97); v113 = vmlaq_f32(v123, v94, v120); v110 = vmlsq_f32(vmlaq_f32(v111, v96, v119), v95, v120); v125 = vnegq_f32(v124); v126 = vmulq_f32(v119, v97); v127 = vmulq_f32(v118, v97); v111 = vmlaq_f32(v125, v94, v119); v108 = vmlsq_f32(vmlaq_f32(v109, v96, v118), v95, v119); v109 = vmlaq_f32(vnegq_f32(v126), v94, v118); v106 = vmlsq_f32(vmlaq_f32(v107, v96, v117), v95, v118); v107 = vmlaq_f32(vnegq_f32(v127), v94, v117); } break; case 2: v128 = 0; for ( ii = v79; ii; v128 += v83 ) { v130 = *(float32x4_t *)(result + v128); --ii; v131 = vmlaq_f32(v106, v93, v130); v132 = vmlaq_f32(v108, v93, v131); v133 = vmlaq_f32(v110, v93, v132); v134 = vmlaq_f32(v112, v93, v133); v135 = vmulq_f32(v134, v97); *(_QWORD *)(v78 + v128) = v134.n128_u64[0]; v112 = vmlsq_f32(vmlaq_f32(v113, v96, v133), v95, v134); v136 = vnegq_f32(v135); v137 = vmulq_f32(v133, v97); v113 = vmlaq_f32(v136, v94, v133); v110 = vmlsq_f32(vmlaq_f32(v111, v96, v132), v95, v133); v138 = vnegq_f32(v137); v139 = vmulq_f32(v132, v97); v140 = vmulq_f32(v131, v97); v111 = vmlaq_f32(v138, v94, v132); v108 = vmlsq_f32(vmlaq_f32(v109, v96, v131), v95, v132); v109 = vmlaq_f32(vnegq_f32(v139), v94, v131); v106 = vmlsq_f32(vmlaq_f32(v107, v96, v130), v95, v131); v107 = vmlaq_f32(vnegq_f32(v140), v94, v130); } break; case 3: v141 = 0; for ( jj = v79; jj; v107 = vmlaq_f32(vnegq_f32(v154), v94, v143) ) { v143 = *(float32x4_t *)(result + v141); v144 = v78 + v141; --jj; v141 += v83; v145 = vmlaq_f32(v106, v93, v143); v146 = vmlaq_f32(v108, v93, v145); v147 = vmlaq_f32(v110, v93, v146); v148 = vmlaq_f32(v112, v93, v147); *(_QWORD *)v144 = v148.n128_u64[0]; v149 = vmulq_f32(v148, v97); *(_DWORD *)(v144 + 8) = v148.n128_u32[2]; v112 = vmlsq_f32(vmlaq_f32(v113, v96, v147), v95, v148); v150 = vnegq_f32(v149); v151 = vmulq_f32(v147, v97); v113 = vmlaq_f32(v150, v94, v147); v110 = vmlsq_f32(vmlaq_f32(v111, v96, v146), v95, v147); v152 = vnegq_f32(v151); v153 = vmulq_f32(v146, v97); v154 = vmulq_f32(v145, v97); v111 = vmlaq_f32(v152, v94, v146); v108 = vmlsq_f32(vmlaq_f32(v109, v96, v145), v95, v146); v109 = vmlaq_f32(vnegq_f32(v153), v94, v145); v106 = vmlsq_f32(vmlaq_f32(v107, v96, v143), v95, v145); } break; case 4: v155 = 0; for ( kk = v79; kk; v155 += v83 ) { v157 = *(float32x4_t *)(result + v155); --kk; v158 = vmlaq_f32(v106, v93, v157); v159 = vmlaq_f32(v108, v93, v158); v160 = vmlaq_f32(v110, v93, v159); v161 = vmlaq_f32(v112, v93, v160); v162 = vmulq_f32(v161, v97); *(float32x4_t *)(v78 + v155) = v161; v112 = vmlsq_f32(vmlaq_f32(v113, v96, v160), v95, v161); v163 = vnegq_f32(v162); v164 = vmulq_f32(v160, v97); v113 = vmlaq_f32(v163, v94, v160); v110 = vmlsq_f32(vmlaq_f32(v111, v96, v159), v95, v160); v165 = vnegq_f32(v164); v166 = vmulq_f32(v159, v97); v167 = vmulq_f32(v158, v97); v111 = vmlaq_f32(v165, v94, v159); v108 = vmlsq_f32(vmlaq_f32(v109, v96, v158), v95, v159); v109 = vmlaq_f32(vnegq_f32(v166), v94, v158); v106 = vmlsq_f32(vmlaq_f32(v107, v96, v157), v95, v158); v107 = vmlaq_f32(vnegq_f32(v167), v94, v157); } break; default: break; } } for ( mm = 0; mm < v81; ++mm ) { v169 = *(_DWORD **)(v85 + 8 * mm); *v169 = *(_DWORD *)(v86 + 4 * mm); v169[1] = *(_DWORD *)(v87 + 4 * mm); v169[2] = *(_DWORD *)(v88 + 4 * mm); v169[3] = *(_DWORD *)(v89 + 4 * mm); v169[4] = *(_DWORD *)(v90 + 4 * mm); v169[5] = *(_DWORD *)(v91 + 4 * mm); v169[6] = *(_DWORD *)(v92 + 4 * mm); v169[7] = *(_DWORD *)(v80 + 4 * mm); *(_QWORD *)(v85 + 8 * mm) = v169 + 32; } v78 += 16; result += 16; v81 = v102; } } return result; }