// // sub_104D04 from 0x104d04 to 0x1055a8 (2212 bytes) // // 1 xrefs: // > sub_FCA14 @ 0xfcb1c // // 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 // int8x16_t *__fastcall sub_104D04( __int64 a1, float *a2, float32x4_t *a3, _OWORD *a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { int k; // w9 int32x4_t v12; // t1 int8x16_t v13; // q0 int8x16_t v14; // q1 __int64 v15; // x10 __int64 m; // x9 unsigned __int32 v17; // w12 int v18; // w9 float32x4_t *v19; // x11 float32x4_t *n; // x10 float32x4_t v21; // t1 float32x4_t v22; // q0 float32x4_t v23; // t1 float32x4_t v24; // q2 float32x4_t v25; // q3 float32x4_t v26; // q4 float32x4_t v27; // q5 int8x16_t v28; // q0 int8x16_t v29; // q1 unsigned __int64 v30; // x15 __int64 ii; // x9 float *v32; // x13 float v33; // s2 int v34; // w14 int32x4_t *v35; // x9 float32x4_t *v36; // x11 float32x4_t *v37; // x12 int32x4_t *v38; // x13 float32x4_t *jj; // x10 int32x4_t v40; // t1 int32x4_t v41; // q0 int32x4_t v42; // t1 float32x4_t v43; // q4 float32x4_t v44; // q5 float32x4_t v45; // q2 float32x4_t v46; // q3 int8x16_t v47; // q0 int8x16_t v48; // q1 float32x4_t v49; // q0 int8x16_t v50; // q5 int8x16_t v51; // q6 __int64 v52; // x15 __int64 v53; // x14 float v54; // s2 float32x4_t *v55; // x12 int v56; // w11 float *v57; // x9 int8x16_t *kk; // x10 float32x4_t v59; // t1 int8x16_t v60; // q0 int8x16_t v61; // q1 __int64 mm; // x11 float v63; // t1 int i; // w11 int32x4_t v65; // t1 int32x4_t v66; // q0 int32x4_t v67; // t1 int8x16_t v68; // q2 int8x16_t v69; // q3 int v70; // w11 unsigned __int32 v71; // t1 unsigned __int32 v72; // t1 unsigned __int64 v73; // x15 __int64 v74; // x12 float32x4_t v75; // q2 float32x4_t v76; // q5 int8x16_t v77; // q0 int8x16_t v78; // q1 int8x16_t v79; // q6 int8x16_t v80; // q7 int v81; // w16 float *v82; // x10 float *v83; // x11 __int64 v84; // x12 __int64 v85; // x13 float *v86; // x14 float *v87; // x15 float v88; // t1 float v89; // s0 float v90; // t1 float v91; // s1 float v92; // t1 float v93; // t1 float v94; // s0 float v95; // t1 float v96; // s2 float v97; // t1 unsigned __int64 v98; // x16 __int64 v99; // x17 float32x4_t v100; // q4 int8x16_t v101; // q3 int8x16_t v102; // q5 int8x16_t v103; // q2 float32x4_t v104; // q3 float32x4_t v105; // q2 float32x4_t v106; // q4 int8x16_t v107; // q5 int8x16_t v108; // q6 int v109; // w17 float *v110; // x9 float *v111; // x10 float *v112; // x11 float *v113; // x12 float *v114; // x13 float *v115; // x14 float v116; // t1 float v117; // s0 float v118; // t1 float v119; // s1 float v120; // t1 float v121; // t1 float v122; // s0 float v123; // t1 float v124; // s2 float v125; // t1 __int64 v126; // x11 int j; // w12 int8x16_t v128; // q2 int8x16_t v129; // q3 __int64 v130; // x12 int v131; // w8 float *v132; // x9 float *v133; // x10 float v134; // s0 float *v135; // x11 __int64 v136; // x15 __int64 v137; // x20 __int64 v138; // x8 __int64 v139; // x11 int8x16_t *result; // x0 float32x4_t *v141; // x1 float32x4_t *v142; // x2 int32x4_t *v143; // x3 float32x4_t *v144; // x4 __int64 v145; // x4 __int64 v146; // x6 float32x4_t *v147; // x1 _OWORD *v148; // x2 __int64 v149; // x3 __int64 v150; // x5 int v151; // w5 int v152; // w21 int v153; // w13 float *v154; // x23 __int64 v155; // x22 __int64 v156; // x25 float *v157; // x26 __int64 v158; // x19 float *nn; // x27 unsigned int v160; // w16 __int64 v161; // x29 int v162; // w28 int v163; // w30 int8x16_t v164; // q1 int8x16_t v165; // q3 int32x4_t v166; // q4 int32x4_t v167; // q2 __int64 v168; // x28 __int64 v169; // x16 int v170; // w29 __int128 v171; // q0 float *v172; // x0 int v173; // w17 float *v174; // x30 float *v175; // x12 int v176; // w10 __int64 v177; // x0 __int64 v178; // x16 int i1; // w21 int v180; // w12 int v181; // w21 __int64 v182; // x4 float *v183; // x20 __int64 v184; // x10 float *v185; // x22 float *i2; // x23 float32x4_t v187; // t1 float32x4_t v188; // q0 float32x4_t v189; // q1 unsigned int v190; // w26 unsigned int v191; // w27 __int64 v192; // x29 __int64 v193; // x30 __int64 v194; // x16 int v195; // w28 int8x16_t v196; // q2 int8x16_t v197; // q3 int8x16_t v198; // q4 int8x16_t v199; // q5 int8x16_t v200; // q2 int8x16_t v201; // q3 int8x16_t v202; // q4 int8x16_t v203; // q5 int32x4_t v204; // q6 int32x4_t v205; // q7 __int64 v206; // x16 __int64 v207; // x27 float32x4_t *v208; // x26 int v209; // w28 int8x16_t v210; // q2 float32x4_t v211; // q2 int v212; // w9 float v213; // t1 float v214; // s0 float v215; // s1 __int64 v216; // x16 __int64 v217; // x19 int i3; // w20 float v219; // s3 int v220; // w9 float *v221; // x20 float *v222; // x19 float *i4; // x21 int32x4_t v224; // t1 float32x4_t v225; // q0 unsigned int v226; // w23 unsigned int v227; // w24 int8x16_t v228; // q1 __int64 v229; // x26 __int64 v230; // x27 __int64 v231; // x28 int v232; // w25 int8x16_t v233; // q1 int8x16_t v234; // q6 int8x16_t v235; // q7 int8x16_t v236; // q16 int8x16_t v237; // q17 int8x16_t v238; // q6 int8x16_t v239; // q7 int8x16_t v240; // q16 int8x16_t v241; // q17 int32x4_t v242; // q2 int32x4_t v243; // q3 __int64 v244; // x16 __int64 v245; // x24 float32x4_t *v246; // x23 int v247; // w25 int8x16_t v248; // q2 float32x4_t v249; // q2 int v250; // w9 float v251; // t1 float v252; // s0 float v253; // s1 __int64 v254; // x16 __int64 v255; // x5 int i5; // w7 float v257; // s2 int v258; // w17 int v259; // w8 float *v260; // x9 float *i6; // x16 unsigned int v262; // w3 __int64 v263; // x7 int v264; // w5 int v265; // w19 int8x16_t v266; // q1 int8x16_t v267; // q2 int8x16_t v268; // q0 int8x16_t v269; // q3 int32x4_t v270; // q4 int32x4_t v271; // q2 __int64 v272; // x5 float32x4_t *v273; // x3 int v274; // w7 float *v275; // x12 int v276; // w21 float *v277; // x19 float *v278; // x20 float32x4_t v279; // q0 int v280; // w8 __int64 v281; // x9 int i7; // w10 float v283; // s0 __int64 v284; // [xsp+0h] [xbp-80h] float32x2x2_t v285; // 0:kr00_16.16 float32x2x2_t v286; // 0:kr10_16.16 float32x2x2_t v287; // 0:kr20_16.16 float32x2x2_t v288; // 0:kr30_16.16 float32x2x2_t v289; // 0:kr40_16.16 float32x2x2_t v290; // 0:kr50_16.16 float32x2x2_t v291; // 0:d0.8,8:d1.8 float32x2x2_t v292; // 0:d0.8,8:d1.8 v137 = *(_QWORD *)(a1 + 8); v136 = *(_QWORD *)(a1 + 16); v138 = v136 + 4LL * a5; v139 = v137 + 4LL * a6; if ( a7 == 2 ) { v145 = v138 + 2048; v146 = v139 + 4096; result = (int8x16_t *)a2; v147 = a3; v148 = a4; v149 = v138; v150 = v137 + 4LL * a6; for ( i = a8 >> 2; i; result += 2 ) { v65 = *(int32x4_t *)(v149 - 16); v149 -= 16; v66 = v65; v67 = *(int32x4_t *)(v145 - 16); v145 -= 16; --i; v68 = vrev64q_s32(v66); v69 = vrev64q_s32(v67); v285.val[0].n64_u64[0] = vextq_s8(v68, v68, 8u).n128_u64[0]; v285.val[1].n64_u64[0] = vextq_s8(v69, v69, 8u).n128_u64[0]; vst2_f32((float *)result, v285); v286.val[0].n64_u64[0] = v68.n128_u64[0]; v286.val[1].n64_u64[0] = v69.n128_u64[0]; vst2_f32((float *)&result[1], v286); } v70 = a8 & 3; if ( (a8 & 3) != 0 ) { do { v71 = *(_DWORD *)(v149 - 4); v149 -= 4; --v70; result->n128_u32[0] = v71; v72 = *(_DWORD *)(v145 - 4); v145 -= 4; result->n128_u32[1] = v72; result = (int8x16_t *)((char *)result + 8); } while ( v70 ); } v73 = 0; v74 = -1; while ( (a9 >> 2) + (_DWORD)v74 != -1 ) { v75 = v147[v74]; v76 = (float32x4_t)v148[v73 / 0x10]; v77 = vrev64q_s32(vmulq_f32(v75, *(float32x4_t *)(v149 + 16 * v74))); v78 = vrev64q_s32(vmulq_f32(v75, *(float32x4_t *)(v145 + 16 * v74))); v79 = vmlaq_f32(vextq_s8(v77, v77, 8u), *(float32x4_t *)(v150 + v73), v76); v80 = vmlaq_f32(vextq_s8(v78, v78, 8u), *(float32x4_t *)(v146 + v73), v76); v287.val[0].n64_u64[0] = v79.n128_u64[0]; v287.val[1].n64_u64[0] = v80.n128_u64[0]; vst2_f32((float *)result, v287); --v74; v288.val[0].n64_u64[0] = vextq_s8(v79, v79, 8u).n128_u64[0]; v288.val[1].n64_u64[0] = vextq_s8(v80, v80, 8u).n128_u64[0]; vst2_f32((float *)&result[1], v288); v73 += 16LL; result += 2; } v81 = a9 & 3; v82 = (float *)(v146 + v73); v83 = (float *)(v150 + v73); v84 = v145 - v73; v85 = v149 - v73; v86 = (float *)&v148[v73 / 0x10]; v87 = (float *)&v147[v73 / 0xFFFFFFFFFFFFFFF0LL]; if ( (a9 & 3) != 0 ) { do { v88 = *(float *)(v85 - 4); v85 -= 4; v89 = v88; v90 = *--v87; v91 = v90; v92 = *v83++; --v81; result->n128_f32[0] = (float)(v89 * v91) + (float)(*v86 * v92); v93 = *(float *)(v84 - 4); v84 -= 4; v94 = v93; v95 = *v82++; v96 = v95; v97 = *v86++; result->n128_f32[1] = (float)(v94 * *v87) + (float)(v97 * v96); result = (int8x16_t *)((char *)result + 8); } while ( v81 ); } v98 = 0; v99 = 0; while ( a10 >> 2 != (_DWORD)v99 ) { v100 = *(float32x4_t *)&v86[4 * v99]; v101 = vrev64q_s32(*(int32x4_t *)&v83[v98 / 4 - 4]); v102 = vrev64q_s32(*(int32x4_t *)&v82[v98 / 4 - 4]); v103 = vrev64q_s32(*(int32x4_t *)&v87[v98 / 4 - 4]); v104 = vmulq_f32(vextq_s8(v101, v101, 8u), v100); v105 = vextq_s8(v103, v103, 8u); v106 = vmulq_f32(vextq_s8(v102, v102, 8u), v100); v107 = vmlaq_f32(vnegq_f32(v104), *(float32x4_t *)(v85 + 16 * v99), v105); v108 = vmlaq_f32(vnegq_f32(v106), *(float32x4_t *)(v84 + 16 * v99), v105); v291.val[0].n64_u64[0] = vextq_s8(v107, v107, 8u).n128_u64[0]; v289.val[0].n64_u64[0] = v107.n128_u64[0]; v289.val[1].n64_u64[0] = v108.n128_u64[0]; vst2_f32((float *)result, v289); v291.val[1].n64_u64[0] = vextq_s8(v108, v108, 8u).n128_u64[0]; ++v99; vst2_f32((float *)&result[1], v291); v98 -= 16LL; result += 2; } v109 = a10 & 3; v110 = &v82[v98 / 4]; v111 = &v83[v98 / 4]; v112 = (float *)(v84 - v98); v113 = (float *)(v85 - v98); v114 = &v86[v98 / 0xFFFFFFFFFFFFFFFCLL]; v115 = &v87[v98 / 4]; if ( (a10 & 3) != 0 ) { do { v116 = *--v115; v117 = v116; v118 = *--v111; v119 = v118; v120 = *v113++; --v109; result->n128_f32[0] = -(float)((float)(*v114 * v119) - (float)(v120 * v117)); v121 = *--v110; v122 = v121; v123 = *v112++; v124 = v123; v125 = *v114++; result->n128_f32[1] = -(float)((float)(v125 * v122) - (float)(v124 * *v115)); result = (int8x16_t *)((char *)result + 8); } while ( v109 ); } v126 = 0; for ( j = a11 >> 2; j; result += 2 ) { v128 = vrev64q_s32(vnegq_f32(*(float32x4_t *)&v111[v126 - 4])); v129 = vrev64q_s32(vnegq_f32(*(float32x4_t *)&v110[v126 - 4])); v292.val[0].n64_u64[0] = vextq_s8(v128, v128, 8u).n128_u64[0]; v292.val[1].n64_u64[0] = vextq_s8(v129, v129, 8u).n128_u64[0]; vst2_f32((float *)result, v292); --j; v290.val[0].n64_u64[0] = v128.n128_u64[0]; v290.val[1].n64_u64[0] = v129.n128_u64[0]; vst2_f32((float *)&result[1], v290); v126 -= 4; } v130 = 0; v131 = a11 & 3; v132 = &v110[v126]; v133 = &v111[v126]; if ( (a11 & 3) != 0 ) { do { v134 = v133[v130 - 1]; v135 = &v132[v130]; --v131; --v130; result->n128_f32[0] = -v134; result->n128_f32[1] = -*(v135 - 1); result = (int8x16_t *)((char *)result + 8); } while ( v131 ); } } else if ( a7 == 1 ) { result = (int8x16_t *)a2; v141 = a3; v142 = (float32x4_t *)a4; v143 = (int32x4_t *)(v136 + 4LL * a5); v144 = (float32x4_t *)(v137 + 4LL * a6); for ( k = a8 >> 3; k; result += 2 ) { v12 = v143[-2]; v143 -= 2; --k; v13 = vrev64q_s32(v12); v14 = vrev64q_s32(v143[1]); *result = vextq_s8(v14, v14, 8u); result[1] = vextq_s8(v13, v13, 8u); } v15 = 0; for ( m = 0; (a8 & 7) != (_DWORD)m; ++m ) { v17 = v143->n128_u32[--v15]; result->n128_u32[m] = v17; } v18 = a9 >> 3; v19 = (int32x4_t *)((char *)v143 + v15 * 4); for ( n = (int8x16_t *)((char *)result - v15 * 4); v18; --v18 ) { v21 = v141[-2]; v141 -= 2; v22 = v21; v23 = v19[-2]; v19 -= 2; v24 = *v144; v25 = v144[1]; v144 += 2; v26 = *v142; v27 = v142[1]; v142 += 2; v28 = vrev64q_s32(vmulq_f32(v22, v23)); v29 = vrev64q_s32(vmulq_f32(v141[1], v19[1])); *n = vmlaq_f32(vextq_s8(v29, v29, 8u), v24, v26); n[1] = vmlaq_f32(vextq_s8(v28, v28, 8u), v25, v27); n += 2; } v30 = 0; for ( ii = 0; -(a9 & 7) != (_DWORD)ii; --ii ) { v32 = (float *)v141 + ii; v33 = v19->n128_f32[ii - 1]; n->n128_f32[v30 / 4] = (float)(v33 * *(v32 - 1)) + (float)(v142->n128_f32[v30 / 4] * v144->n128_f32[v30 / 4]); v30 += 4LL; } v34 = a10 >> 3; v35 = (float32x4_t *)((char *)v144 + v30); v36 = (float32x4_t *)((char *)v19 - v30); v37 = (float32x4_t *)((char *)v142 + v30); v38 = (float32x4_t *)((char *)v141 - v30); for ( jj = (float32x4_t *)((char *)n + v30); v34; --v34 ) { v40 = v35[-2]; v35 -= 2; v41 = v40; v42 = v38[-2]; v38 -= 2; v43 = *v37; v44 = v37[1]; v37 += 2; v45 = *v36; v46 = v36[1]; v36 += 2; v47 = vrev64q_s32(v41); v48 = vrev64q_s32(v42); v49 = vnegq_f32(vmulq_f32(v44, vextq_s8(v47, v47, 8u))); v50 = vrev64q_s32(v38[1]); v51 = vrev64q_s32(v35[1]); *jj = vmlaq_f32(vnegq_f32(vmulq_f32(vextq_s8(v51, v51, 8u), v43)), v45, vextq_s8(v50, v50, 8u)); jj[1] = vmlaq_f32(v49, v46, vextq_s8(v48, v48, 8u)); jj += 2; } v52 = 0; v53 = 0; while ( -(a10 & 7) != (_DWORD)v52 ) { result = (int32x4_t *)((char *)v38 + 4 * v52); v54 = v35->n128_f32[--v52]; jj->n128_f32[v53] = -(float)((float)(v37->n128_f32[v53] * v54) - (float)(v36->n128_f32[v53] * result[-1].n128_f32[3])); ++v53; } v55 = (int32x4_t *)((char *)v35 - v53 * 4); v56 = a11 >> 3; v57 = (float *)((char *)v35 - v53 * 4 - 4); for ( kk = (float32x4_t *)((char *)jj + v53 * 4); v56; kk += 2 ) { v59 = v55[-2]; v55 -= 2; --v56; v57 -= 8; v60 = vrev64q_s32(vnegq_f32(v59)); v61 = vrev64q_s32(vnegq_f32(v55[1])); *kk = vextq_s8(v61, v61, 8u); kk[1] = vextq_s8(v60, v60, 8u); } for ( mm = 0; (a11 & 7) != (_DWORD)mm; ++mm ) { v63 = *v57--; kk->n128_f32[mm] = -v63; } } else { v284 = a6; v151 = 2 * a7; v152 = a8 >> 2; v153 = a7 >> 2; v154 = &a2[a7]; v155 = 4 * a7; v156 = 4 * v155; v157 = &a2[2 * a7]; v158 = v136 + 4LL * a5 - 16; for ( nn = &a2[3 * a7]; v152; v154 = (float *)((char *)v154 + v156) ) { v160 = 0; v161 = 0; v162 = 0; v138 -= 16; v163 = 1536; while ( v153 != (_DWORD)v161 ) { v164 = *(int8x16_t *)(v138 + 4LL * (unsigned int)(v163 - 1536)); v165 = *(int8x16_t *)(v138 + 4LL * (v163 - 512)); v166 = vextq_s8(v164, vextq_s8(*(int8x16_t *)(v138 + 4LL * (v163 - 1024)), v164, 8u), 8u); v164.n128_u64[1] = *(_QWORD *)(v138 + 4LL * (v163 - 1024)); v167 = vextq_s8(v165, vextq_s8(*(int8x16_t *)(v138 + 4LL * v163), v165, 8u), 8u); v165.n128_u64[1] = *(_QWORD *)(v138 + 4LL * v163); v162 += 4; v163 += 2048; *(int32x4_t *)&a2[4 * v161] = vuzp2q_s32(v166, v167); *(int32x4_t *)&v154[4 * v161] = vuzp1q_s32(v166, v167); *(int32x4_t *)&v157[4 * v161] = vuzp2q_s32(v164, v165); *(int32x4_t *)&nn[4 * v161++] = vuzp1q_s32(v164, v165); v160 += 2048; } v168 = v162 & 0xFFFFFFFC; v169 = 4LL * v160; v170 = a7 & 3; if ( (a7 & 3) != 0 ) { do { v171 = *(_OWORD *)(v158 + v169); v172 = &a2[v168]; v173 = 3 * a7 + v168; v174 = &a2[a7 + (int)v168]; v175 = &a2[v151 + (int)v168]; --v170; ++v168; *v172 = *((float *)&v171 + 3); *v174 = *((float *)&v171 + 2); *v175 = *((float *)&v171 + 1); LODWORD(a2[v173]) = v171; v169 += 2048; } while ( v170 ); } a2 = (float *)((char *)a2 + v156); --v152; v158 -= 16; nn = (float *)((char *)nn + v156); v157 = (float *)((char *)v157 + v156); } v176 = a8 & 3; v177 = v151; if ( (a8 & 3) != 0 ) { do { v178 = 0; v138 -= 4; for ( i1 = a7; i1; ++a2 ) { v180 = *(_DWORD *)(v138 + 4LL * ((unsigned int)v178 & 0xFFFFFE00)); --i1; v178 += 512; *(_DWORD *)a2 = v180; } --v176; v158 -= 4; } while ( v176 ); } v181 = a9 >> 2; v182 = v137 + 4 * v284 - 16; v183 = &a2[3 * a7]; v184 = 4 * v155; v185 = &a2[v151]; for ( i2 = &a2[a7]; v181; v158 -= 16 ) { v187 = a3[-1]; --a3; v188 = v187; v189 = *(float32x4_t *)a4; v190 = 0; v191 = 0; v192 = 0; v193 = 0; v194 = 0; v195 = 0; v138 -= 16; while ( v153 != (_DWORD)v192 ) { v196 = vrev64q_s32(vmulq_f32(*(float32x4_t *)(v138 + 4LL * ((unsigned int)v193 & 0xFFFFF800)), v188)); v197 = vrev64q_s32(vmulq_f32(*(float32x4_t *)(v138 + 4LL * (unsigned int)(v193 + 512)), v188)); v198 = vrev64q_s32(vmulq_f32(*(float32x4_t *)(v138 + 4LL * (unsigned int)(v193 + 1024)), v188)); v199 = vrev64q_s32(vmulq_f32(*(float32x4_t *)(v138 + 4LL * (unsigned int)(v193 + 1536)), v188)); v200 = vmlaq_f32( vextq_s8(v196, v196, 8u), v189, *(float32x4_t *)(v139 + 4LL * ((unsigned int)v194 & 0xFFFFF000))); v201 = vmlaq_f32(vextq_s8(v197, v197, 8u), v189, *(float32x4_t *)(v139 + 4LL * (unsigned int)(v194 + 1024))); v202 = vmlaq_f32(vextq_s8(v198, v198, 8u), v189, *(float32x4_t *)(v139 + 4LL * (unsigned int)(v194 + 2048))); v203 = vmlaq_f32(vextq_s8(v199, v199, 8u), v189, *(float32x4_t *)(v139 + 4LL * (unsigned int)(v194 + 3072))); v204 = vextq_s8(v200, vextq_s8(v201, v200, 8u), 8u); v205 = vextq_s8(v202, vextq_s8(v203, v202, 8u), 8u); v200.n128_u64[1] = v201.n128_u64[0]; v202.n128_u64[1] = v203.n128_u64[0]; v195 += 4; v194 += 4096; v193 += 2048; v191 += 4096; *(int32x4_t *)&a2[4 * v192] = vuzp1q_s32(v200, v202); *(int32x4_t *)&i2[4 * v192] = vuzp2q_s32(v200, v202); *(int32x4_t *)&v185[4 * v192] = vuzp1q_s32(v204, v205); *(int32x4_t *)&v183[4 * v192++] = vuzp2q_s32(v204, v205); v190 += 2048; } v206 = v195 & 0xFFFFFFFC; v207 = 4LL * v191; v208 = (float32x4_t *)(v158 + 4LL * v190); v209 = a7 & 3; if ( (a7 & 3) != 0 ) { do { v210 = vrev64q_s32(vmulq_f32(*v208, v188)); v211 = vmlaq_f32(vextq_s8(v210, v210, 8u), v189, *(float32x4_t *)(v139 + v207)); a2[v206] = v211.n128_f32[0]; a2[a7 + (int)v206] = v211.n128_f32[1]; a2[2 * a7 + (int)v206] = v211.n128_f32[2]; --v209; v207 += 4096; a2[3 * a7 + (int)v206++] = v211.n128_f32[3]; v208 += 128; } while ( v209 ); } a2 = (float *)((char *)a2 + v184); v139 += 16; ++a4; --v181; v182 += 16; v183 = (float *)((char *)v183 + v184); v185 = (float *)((char *)v185 + v184); i2 = (float *)((char *)i2 + v184); } v212 = a9 & 3; if ( (a9 & 3) != 0 ) { do { v213 = a3[-1].n128_f32[3]; a3 = (float32x4_t *)((char *)a3 - 4); v214 = v213; v215 = *(float *)a4; v216 = 0; v217 = 0; v138 -= 4; for ( i3 = a7; i3; v216 += 512 ) { v219 = *(float *)(v139 + 4LL * ((unsigned int)v217 & 0xFFFFFC00)); --i3; v217 += 1024; *a2++ = (float)(*(float *)(v138 + 4LL * ((unsigned int)v216 & 0xFFFFFE00)) * v214) + (float)(v219 * v215); } v139 += 4; a4 = (_OWORD *)((char *)a4 + 4); --v212; v182 += 4; } while ( v212 ); } v220 = a10 >> 2; v221 = &a2[v151]; v222 = &a2[3 * a7]; for ( i4 = &a2[a7]; v220; i4 = (float *)((char *)i4 + v184) ) { v224 = a3[-1]; --a3; v225 = *(float32x4_t *)a4; v226 = 0; v227 = 0; v228 = vrev64q_s32(v224); v229 = 0; v230 = 0; v231 = 0; v232 = 0; v139 -= 16; v233 = vextq_s8(v228, v228, 8u); while ( v153 != (_DWORD)v229 ) { v234 = vrev64q_s32(*(int32x4_t *)(v139 + 4LL * ((unsigned int)v231 & 0xFFFFF000))); v235 = vrev64q_s32(*(int32x4_t *)(v139 + 4LL * (unsigned int)(v231 + 1024))); v236 = vrev64q_s32(*(int32x4_t *)(v139 + 4LL * (unsigned int)(v231 + 2048))); v237 = vrev64q_s32(*(int32x4_t *)(v139 + 4LL * (unsigned int)(v231 + 3072))); v238 = vmlaq_f32( vnegq_f32(vmulq_f32(vextq_s8(v234, v234, 8u), v225)), v233, *(float32x4_t *)(v138 + 4LL * ((unsigned int)v230 & 0xFFFFF800))); v239 = vmlaq_f32( vnegq_f32(vmulq_f32(vextq_s8(v235, v235, 8u), v225)), v233, *(float32x4_t *)(v138 + 4LL * (unsigned int)(v230 + 512))); v240 = vmlaq_f32( vnegq_f32(vmulq_f32(vextq_s8(v236, v236, 8u), v225)), v233, *(float32x4_t *)(v138 + 4LL * (unsigned int)(v230 + 1024))); v241 = vmlaq_f32( vnegq_f32(vmulq_f32(vextq_s8(v237, v237, 8u), v225)), v233, *(float32x4_t *)(v138 + 4LL * (unsigned int)(v230 + 1536))); v242 = vextq_s8(v238, vextq_s8(v239, v238, 8u), 8u); v243 = vextq_s8(v240, vextq_s8(v241, v240, 8u), 8u); v238.n128_u64[1] = v239.n128_u64[0]; v240.n128_u64[1] = v241.n128_u64[0]; v232 += 4; v231 += 4096; v230 += 2048; v227 += 4096; *(int32x4_t *)&a2[4 * v229] = vuzp1q_s32(v238, v240); *(int32x4_t *)&i4[4 * v229] = vuzp2q_s32(v238, v240); *(int32x4_t *)&v221[4 * v229] = vuzp1q_s32(v242, v243); *(int32x4_t *)&v222[4 * v229++] = vuzp2q_s32(v242, v243); v226 += 2048; } v244 = v232 & 0xFFFFFFFC; v245 = 4LL * v227; v246 = (float32x4_t *)(v138 + 4LL * v226); v247 = a7 & 3; if ( (a7 & 3) != 0 ) { do { v248 = vrev64q_s32(*(int32x4_t *)(v182 + v245)); v249 = vmlaq_f32(vnegq_f32(vmulq_f32(vextq_s8(v248, v248, 8u), v225)), v233, *v246); a2[v244] = v249.n128_f32[0]; a2[a7 + (int)v244] = v249.n128_f32[1]; a2[v151 + (int)v244] = v249.n128_f32[2]; --v247; v245 += 4096; a2[3 * a7 + (int)v244++] = v249.n128_f32[3]; v246 += 128; } while ( v247 ); } a2 = (float *)((char *)a2 + v184); v138 += 16; ++a4; --v220; v182 -= 16; v222 = (float *)((char *)v222 + v184); v221 = (float *)((char *)v221 + v184); } v250 = a10 & 3; if ( (a10 & 3) != 0 ) { do { v251 = a3[-1].n128_f32[3]; a3 = (float32x4_t *)((char *)a3 - 4); v252 = v251; v253 = *(float *)a4; v254 = 0; v255 = 0; v139 -= 4; for ( i5 = a7; i5; v254 += 512 ) { v257 = *(float *)(v139 + 4LL * ((unsigned int)v255 & 0xFFFFFC00)); --i5; v255 += 1024; *a2++ = -(float)((float)(v257 * v253) - (float)(*(float *)(v138 + 4LL * ((unsigned int)v254 & 0xFFFFFE00)) * v252)); } v138 += 4; a4 = (_OWORD *)((char *)a4 + 4); --v250; v182 -= 4; } while ( v250 ); } v258 = v177; v259 = a11 >> 2; result = (int8x16_t *)&a2[v177]; v260 = &a2[3 * a7]; for ( i6 = &a2[a7]; v259; v182 -= 16 ) { v262 = 0; v263 = 0; v264 = 0; v139 -= 16; v265 = 3072; while ( v153 != (_DWORD)v263 ) { v266 = vnegq_f32(*(float32x4_t *)(v139 + 4LL * (unsigned int)(v265 - 3072))); v267 = vnegq_f32(*(float32x4_t *)(v139 + 4LL * (v265 - 2048))); v268 = vnegq_f32(*(float32x4_t *)(v139 + 4LL * v265)); v269 = vnegq_f32(*(float32x4_t *)(v139 + 4LL * (v265 - 1024))); v270 = vextq_s8(v266, vextq_s8(v267, v266, 8u), 8u); v266.n128_u64[1] = v267.n128_u64[0]; v271 = vextq_s8(v269, vextq_s8(v268, v269, 8u), 8u); v269.n128_u64[1] = v268.n128_u64[0]; v264 += 4; v265 += 4096; *(int32x4_t *)&a2[4 * v263] = vuzp2q_s32(v270, v271); *(int32x4_t *)&i6[4 * v263] = vuzp1q_s32(v270, v271); result[v263] = vuzp2q_s32(v266, v269); *(int32x4_t *)&v260[4 * v263++] = vuzp1q_s32(v266, v269); v262 += 4096; } v272 = v264 & 0xFFFFFFFC; v273 = (float32x4_t *)(v182 + 4LL * v262); v274 = a7 & 3; if ( (a7 & 3) != 0 ) { do { v275 = &a2[v272]; v276 = 3 * a7 + v272; v277 = &a2[a7 + (int)v272]; v278 = &a2[v258 + (int)v272]; v279 = vnegq_f32(*v273); --v274; ++v272; *v275 = v279.n128_f32[3]; *v277 = v279.n128_f32[2]; *v278 = v279.n128_f32[1]; a2[v276] = v279.n128_f32[0]; v273 += 256; } while ( v274 ); } a2 = (float *)((char *)a2 + v184); --v259; v260 = (float *)((char *)v260 + v184); result = (int8x16_t *)((char *)result + v184); i6 = (float *)((char *)i6 + v184); } v280 = a11 & 3; if ( (a11 & 3) != 0 ) { do { v281 = 0; v139 -= 4; for ( i7 = a7; i7; ++a2 ) { v283 = *(float *)(v139 + 4LL * ((unsigned int)v281 & 0xFFFFFC00)); --i7; v281 += 1024; *a2 = -v283; } --v280; } while ( v280 ); } } return result; }