// // __crtLCMapStringA from 0x180060190 to 0x180060ae0 (2384 bytes) // // 3 xrefs: // > sub_18005B1E0 @ 0x18005b25e // > @ 0x1801ac4f0 // > @ 0x1801f9138 // // 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 // void __fastcall _crtLCMapStringA(__m128 *Src, __m128 *a2, unsigned int a3, float *a4, int a5, int a6, int a7) { __m128 *v9; // rbx __m128 *v10; // rdi char v11; // r8 float v12; // xmm3_4 __m128 v13; // xmm4 unsigned int v14; // eax __m128 v15; // xmm2 __m128 v16; // xmm2 signed __int64 v17; // rcx __m128 v18; // xmm0 __m128 v19; // xmm1 int v20; // esi signed __int64 v21; // rdi float v22; // xmm1_4 signed __int64 v23; // rcx __m128 v24; // xmm0 __m128 v25; // xmm1 int i; // esi float v27; // xmm0_4 float v28; // xmm1_4 float v29; // xmm1_4 __m128 v30; // xmm3 __m128 v31; // xmm4 signed __int64 v32; // rbx __m128 v33; // xmm1 __m128 *v34; // rax signed __int64 v35; // rdi __m128 v36; // xmm1 __int64 v37; // rax int v38; // r11d float *v39; // rdx unsigned int v40; // eax unsigned __int64 *v41; // rcx __int64 v42; // r9 float v43; // xmm0_4 float v44; // xmm0_4 float v45; // xmm0_4 float v46; // xmm0_4 __int32 *v47; // rdx float *v48; // rcx __int64 v49; // r9 float v50; // xmm0_4 bool v51; // zf size_t v52; // r8 int v53; // r11d __int64 v54; // r14 __m128 *v55; // rdx __m128 *v56; // r8 __m128 *v57; // r9 __int64 v58; // kr00_8 __int64 v59; // r9 __m128 *v60; // rdx __m128 *v61; // r8 __int64 v62; // kr08_8 float v63; // xmm0_4 float v64; // xmm0_4 __int64 v65; // r9 __m128 *v66; // rdx __m128 *v67; // r8 __int64 v68; // kr10_8 __m128 v69; // xmm0 __m128 v70; // xmm0 __m128 v71; // xmm0 __m128 v72; // xmm0 __m128 v73; // xmm0 __m128 v74; // xmm0 __m128 v75; // xmm0 float v76; // xmm0_4 float v77; // xmm0_4 float v78; // xmm0_4 float v79; // xmm0_4 __int64 v80; // r11 __m128 *v81; // rdx __m128 *v82; // r8 __m128 *v83; // r9 __int64 v84; // kr18_8 __m128 v85; // xmm0 __m128 v86; // xmm0 __m128 v87; // xmm0 __m128 v88; // xmm0 __m128 v89; // xmm0 __m128 v90; // xmm0 __m128 v91; // [rsp+0h] [rbp-90h] BYREF _BYTE v92[64]; // [rsp+10h] [rbp-80h] BYREF __int64 v93; // [rsp+70h] [rbp-20h] v9 = a2; v10 = Src; v11 = 1; switch ( a6 ) { case 2: v12 = *a4; v13 = (__m128)*((unsigned int *)a4 + 33); v14 = a3 >> 2; v15 = _mm_unpacklo_ps((__m128)*(unsigned int *)a4, v13); v16 = _mm_movelh_ps(v15, v15); if ( a7 ) { if ( v14 ) { v17 = (char *)Src - (char *)a2; do { v18 = _mm_mul_ps(v16, *v10); v10 += 2; v19 = _mm_mul_ps(v16, *(__m128 *)((char *)v9 + v17 + 16)); *v9 = v18; v9[1] = v19; v9 += 2; --v14; } while ( v14 ); } v20 = a3 & 3; if ( v20 ) { v21 = (char *)v10 - (char *)v9; do { v9 = (__m128 *)((char *)v9 + 8); v22 = v13.m128_f32[0] * *(float *)((char *)&v9->m128_f32[-1] + v21); v9[-1].m128_f32[2] = v12 * *(float *)((char *)&v9->m128_f32[-2] + v21); v9[-1].m128_f32[3] = v22; --v20; } while ( v20 ); } } else { if ( v14 ) { v23 = (char *)Src - (char *)a2; do { v24 = _mm_mul_ps(v16, *v10); v10 += 2; v25 = _mm_add_ps(_mm_mul_ps(v16, *(__m128 *)((char *)v9 + v23 + 16)), v9[1]); *v9 = _mm_add_ps(v24, *v9); v9[1] = v25; v9 += 2; --v14; } while ( v14 ); } for ( i = a3 & 3; i; --i ) { v27 = v12 * v10->m128_f32[0]; v28 = v13.m128_f32[0] * v10->m128_f32[1]; v10 = (__m128 *)((char *)v10 + 8); v29 = v28 + v9->m128_f32[1]; v9->m128_f32[0] = v27 + v9->m128_f32[0]; v9->m128_f32[1] = v29; v9 = (__m128 *)((char *)v9 + 8); } } return; case 6: LODWORD(v93) = a5; sub_18005FE80(Src, a2, a3, (__int64)a4, v93, 6, a7); return; case 8: v30 = _mm_movelh_ps( _mm_unpacklo_ps((__m128)*(unsigned int *)a4, (__m128)*((unsigned int *)a4 + 33)), _mm_unpacklo_ps((__m128)*((unsigned int *)a4 + 66), (__m128)*((unsigned int *)a4 + 99))); v31 = _mm_movelh_ps( _mm_unpacklo_ps((__m128)*((unsigned int *)a4 + 132), (__m128)*((unsigned int *)a4 + 165)), _mm_unpacklo_ps((__m128)*((unsigned int *)a4 + 198), (__m128)*((unsigned int *)a4 + 231))); if ( a3 ) { if ( a7 ) { v32 = (char *)a2 - (char *)Src; do { v10 += 2; v33 = _mm_mul_ps(v31, v10[-1]); *(__m128 *)((char *)v10 + v32 - 32) = _mm_mul_ps(v30, v10[-2]); *(__m128 *)((char *)v10 + v32 - 16) = v33; --a3; } while ( a3 ); } else { v34 = a2 + 1; v35 = (char *)Src - (char *)a2; do { v36 = _mm_add_ps(_mm_mul_ps(v31, *(__m128 *)((char *)v34 + v35)), *v34); v34[-1] = _mm_add_ps(_mm_mul_ps(v30, *(__m128 *)((char *)v34 + v35 - 16)), v34[-1]); *v34 = v36; v34 += 2; --a3; } while ( a3 ); } } return; } v37 = v91.m128_u32[0]; v38 = 0; if ( a6 < 4 ) { if ( a6 <= 0 ) goto LABEL_46; v37 = 0; goto LABEL_42; } v39 = a4 + 66; v40 = ((unsigned int)(a6 - 4) >> 2) + 1; v41 = &v91.m128_u64[1]; v42 = v40; v38 = 4 * v40; v37 = 4LL * v40; do { v43 = *(v39 - 66); *((float *)v41 - 2) = v43; if ( v43 != 1.0 ) v11 = 0; v44 = *(v39 - 33); *((float *)v41 - 1) = v44; if ( v44 != 1.0 ) v11 = 0; v45 = *v39; *(float *)v41 = *v39; if ( v45 != 1.0 ) v11 = 0; v46 = v39[33]; *((float *)v41 + 1) = v46; if ( v46 != 1.0 ) v11 = 0; v39 += 132; v41 += 2; --v42; } while ( v42 ); if ( v38 < a6 ) { LABEL_42: v47 = &v91.m128_i32[v37]; v48 = &a4[33 * v37]; v49 = (unsigned int)(a6 - v38); do { v50 = *v48; *v47 = *(_DWORD *)v48; if ( v50 != 1.0 ) v11 = 0; v48 += 33; ++v47; --v49; } while ( v49 ); } LABEL_46: if ( a7 ) { v51 = v11 == 0; v52 = 4LL * a6 * a3; if ( !v51 ) { memmove(v9, v10, v52); return; } v37 = (__int64)memset(v9, 0, v52); v53 = a6 & 3; goto LABEL_50; } v53 = a6 & 3; if ( v11 ) { if ( (a6 & 3) == 0 ) { if ( a3 ) { v65 = 4LL * a6; do { v66 = v9; v67 = v10; v68 = v37; v37 = (a6 >> 2) - 1; switch ( a6 >> 2 ) { case 1: goto LABEL_85; case 2: goto LABEL_84; case 3: goto LABEL_83; case 4: goto LABEL_82; case 5: goto LABEL_81; case 6: goto LABEL_80; case 7: goto LABEL_79; case 8: v66 = v9 + 1; v67 = v10 + 1; *v9 = _mm_add_ps(*v10, *v9); LABEL_79: *v66 = _mm_add_ps(*v66, *v67); ++v66; ++v67; LABEL_80: *v66 = _mm_add_ps(*v66, *v67); ++v66; ++v67; LABEL_81: *v66 = _mm_add_ps(*v66, *v67); ++v66; ++v67; LABEL_82: *v66 = _mm_add_ps(*v66, *v67); ++v66; ++v67; LABEL_83: *v66 = _mm_add_ps(*v66, *v67); ++v66; ++v67; LABEL_84: *v66 = _mm_add_ps(*v66, *v67); ++v66; ++v67; LABEL_85: *v66 = _mm_add_ps(*v66, *v67); break; default: v37 = v68; break; } v10 = (__m128 *)((char *)v10 + v65); v9 = (__m128 *)((char *)v9 + v65); --a3; } while ( a3 ); } return; } if ( !a3 ) return; v59 = 4LL * a6; while ( 1 ) { v60 = v9; v61 = v10; v62 = v37; v37 = (a6 >> 2) - 1; switch ( a6 >> 2 ) { case 1: goto LABEL_66; case 2: goto LABEL_65; case 3: goto LABEL_64; case 4: goto LABEL_63; case 5: goto LABEL_62; case 6: goto LABEL_61; case 7: goto LABEL_60; case 8: v60 = v9 + 1; v61 = v10 + 1; *v9 = _mm_add_ps(*v10, *v9); LABEL_60: *v60 = _mm_add_ps(*v61, *v60); ++v60; ++v61; LABEL_61: *v60 = _mm_add_ps(*v61, *v60); ++v60; ++v61; LABEL_62: *v60 = _mm_add_ps(*v61, *v60); ++v60; ++v61; LABEL_63: *v60 = _mm_add_ps(*v61, *v60); ++v60; ++v61; LABEL_64: *v60 = _mm_add_ps(*v61, *v60); ++v60; ++v61; LABEL_65: *v60 = _mm_add_ps(*v61, *v60); ++v60; ++v61; LABEL_66: *v60 = _mm_add_ps(*v61, *v60); ++v60; ++v61; break; default: v37 = v62; break; } if ( v53 == 1 ) goto LABEL_72; if ( v53 == 2 ) goto LABEL_71; if ( v53 == 3 ) break; LABEL_73: v10 = (__m128 *)((char *)v10 + v59); v9 = (__m128 *)((char *)v9 + v59); if ( !--a3 ) return; } v63 = v61->m128_f32[0]; v61 = (__m128 *)((char *)v61 + 4); v60->m128_f32[0] = v63 + v60->m128_f32[0]; v60 = (__m128 *)((char *)v60 + 4); LABEL_71: v64 = v61->m128_f32[0]; v61 = (__m128 *)((char *)v61 + 4); v60->m128_f32[0] = v64 + v60->m128_f32[0]; v60 = (__m128 *)((char *)v60 + 4); LABEL_72: v60->m128_f32[0] = v61->m128_f32[0] + v60->m128_f32[0]; goto LABEL_73; } LABEL_50: if ( v53 ) { if ( !a3 ) return; v54 = 4LL * a6; while ( 1 ) { v55 = v9; v56 = v10; v57 = &v91; v58 = v37; v37 = (a6 >> 2) - 1; switch ( a6 >> 2 ) { case 1: goto LABEL_95; case 2: goto LABEL_94; case 3: goto LABEL_93; case 4: goto LABEL_92; case 5: goto LABEL_91; case 6: goto LABEL_90; case 7: goto LABEL_89; case 8: v55 = v9 + 1; v56 = v10 + 1; v57 = (__m128 *)v92; *v9 = _mm_add_ps(_mm_mul_ps(*v10, v91), *v9); LABEL_89: v69 = *v56++; *v55 = _mm_add_ps(_mm_mul_ps(*v57, v69), *v55); ++v55; ++v57; LABEL_90: v70 = *v56++; *v55 = _mm_add_ps(_mm_mul_ps(*v57, v70), *v55); ++v55; ++v57; LABEL_91: v71 = *v56++; *v55 = _mm_add_ps(_mm_mul_ps(*v57, v71), *v55); ++v55; ++v57; LABEL_92: v72 = *v56++; *v55 = _mm_add_ps(_mm_mul_ps(*v57, v72), *v55); ++v55; ++v57; LABEL_93: v73 = *v56++; *v55 = _mm_add_ps(_mm_mul_ps(*v57, v73), *v55); ++v55; ++v57; LABEL_94: v74 = *v56++; *v55 = _mm_add_ps(_mm_mul_ps(*v57, v74), *v55); ++v55; ++v57; LABEL_95: v75 = *v56++; *v55 = _mm_add_ps(_mm_mul_ps(*v57, v75), *v55); ++v55; ++v57; break; default: v37 = v58; break; } if ( v53 == 1 ) goto LABEL_101; if ( v53 == 2 ) goto LABEL_100; if ( v53 == 3 ) break; LABEL_102: v10 = (__m128 *)((char *)v10 + v54); v9 = (__m128 *)((char *)v9 + v54); if ( !--a3 ) return; } v76 = v57->m128_f32[0]; v57 = (__m128 *)((char *)v57 + 4); v77 = v76 * v56->m128_f32[0]; v56 = (__m128 *)((char *)v56 + 4); v55->m128_f32[0] = v77 + v55->m128_f32[0]; v55 = (__m128 *)((char *)v55 + 4); LABEL_100: v78 = v57->m128_f32[0]; v57 = (__m128 *)((char *)v57 + 4); v79 = v78 * v56->m128_f32[0]; v56 = (__m128 *)((char *)v56 + 4); v55->m128_f32[0] = v79 + v55->m128_f32[0]; v55 = (__m128 *)((char *)v55 + 4); LABEL_101: v55->m128_f32[0] = (float)(v57->m128_f32[0] * v56->m128_f32[0]) + v55->m128_f32[0]; goto LABEL_102; } if ( a3 ) { v80 = 4LL * a6; do { v81 = v9; v82 = v10; v83 = &v91; v84 = v37; v37 = (a6 >> 2) - 1; switch ( a6 >> 2 ) { case 1: goto LABEL_114; case 2: goto LABEL_113; case 3: goto LABEL_112; case 4: goto LABEL_111; case 5: goto LABEL_110; case 6: goto LABEL_109; case 7: goto LABEL_108; case 8: v81 = v9 + 1; v82 = v10 + 1; v83 = (__m128 *)v92; *v9 = _mm_add_ps(_mm_mul_ps(*v10, v91), *v9); LABEL_108: v85 = _mm_mul_ps(*v83, *v82++); *v81 = _mm_add_ps(v85, *v81); ++v81; ++v83; LABEL_109: v86 = _mm_mul_ps(*v83, *v82++); *v81 = _mm_add_ps(v86, *v81); ++v81; ++v83; LABEL_110: v87 = _mm_mul_ps(*v83, *v82++); *v81 = _mm_add_ps(v87, *v81); ++v81; ++v83; LABEL_111: v88 = _mm_mul_ps(*v83, *v82++); *v81 = _mm_add_ps(v88, *v81); ++v81; ++v83; LABEL_112: v89 = _mm_mul_ps(*v83, *v82++); *v81 = _mm_add_ps(v89, *v81); ++v81; ++v83; LABEL_113: v90 = _mm_mul_ps(*v83, *v82++); *v81 = _mm_add_ps(v90, *v81); ++v81; ++v83; LABEL_114: *v81 = _mm_add_ps(_mm_mul_ps(*v83, *v82), *v81); break; default: v37 = v84; break; } v10 = (__m128 *)((char *)v10 + v80); v9 = (__m128 *)((char *)v9 + v80); --a3; } while ( a3 ); } }