// // _sse2_cosf4 from 0x180121eb0 to 0x18012281a (2410 bytes) // // 2 xrefs: // > __vdecl_cosf4 @ 0x1801202cd // > @ 0x1802025c4 // // 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 // // local variable allocation has failed, the output may be wrong! __m128 __fastcall _sse2_cosf4(double a1, __int64 a2, __int64 a3) { void *v3; // r9 int v4; // r10d _OWORD *v5; // r13 __m128 v6; // xmm3 __m128 v7; // xmm4 __m128 v8; // xmm2 __m128 v9; // xmm1 __m128 v10; // xmm10 __m128 v11; // xmm8 __m128 v12; // xmm13 __m128 v13; // xmm11 __m128 v14; // xmm13 __m128 v15; // xmm10 __int64 v17; // rbx int v18; // esi __m128i v19; // xmm11 __m128i v20; // xmm14 unsigned int v21; // edx unsigned int v22; // eax unsigned int v23; // r8d unsigned int v24; // ecx __m128i v25; // xmm9 __m128i v26; // xmm8 __m128i v27; // xmm4 __m128i v28; // xmm7 __m128i v29; // xmm12 __m128i v30; // xmm8 __m128i v31; // xmm12 __m128i v32; // xmm14 __m128i v33; // xmm15 __m128i v34; // xmm10 __m128i v35; // xmm13 __m128i v36; // xmm0 __m128i v37; // xmm8 __m128i v38; // xmm9 __m128i v39; // xmm5 __m128i v40; // xmm12 __m128i v41; // xmm2 __m128i v42; // xmm4 __m128i v43; // xmm1 __m128i v44; // xmm11 __m128i v45; // xmm2 __m128i v46; // xmm3 __m128i v47; // xmm6 __m128i v48; // xmm0 __m128i v49; // xmm13 __m128i v50; // xmm3 __m128i v51; // xmm5 __m128i v52; // xmm1 __m128i v53; // xmm4 __m128i v54; // xmm13 __m128i v55; // xmm5 __m128 v56; // xmm2 __m128 v57; // xmm15 __m128 v58; // xmm10 __m128 v59; // xmm5 __m128 v60; // xmm3 __m128 v61; // xmm1 __m128 v62; // xmm12 __m128 v63; // xmm2 __m128 v64; // xmm15 __m128 v65; // xmm8 __m128 v66; // xmm2 __m128 v67; // xmm15 __m128 v68; // xmm6 __m128 v69; // xmm9 __m128 v70; // xmm10 __m128 v71; // xmm6 __m128 v72; // xmm8 __m128 v73; // xmm11 __m128 v74; // xmm7 __m128 v75; // xmm12 __m128 v76; // xmm8 __m128i v77; // xmm3 unsigned int v78; // edx __m128 v79; // xmm12 unsigned int v80; // ecx unsigned int v81; // eax __m128 v82; // xmm11 __m128 v83; // xmm10 __m128 v84; // xmm13 __m128 v85; // xmm5 __m128 v86; // xmm3 __m128 v87; // xmm7 __m128 v88; // xmm2 __m128 v89; // xmm10 __m128 v90; // xmm15 __m128 v91; // [rsp+20h] [rbp-1D8h] __m128 v92; // [rsp+30h] [rbp-1C8h] __m128 v93; // [rsp+40h] [rbp-1B8h] __m128i v94; // [rsp+50h] [rbp-1A8h] BYREF __m128i v95; // [rsp+60h] [rbp-198h] __m128i v96[2]; // [rsp+70h] [rbp-188h] BYREF __m128i v97; // [rsp+90h] [rbp-168h] BYREF __m128i v98[4]; // [rsp+A0h] [rbp-158h] BYREF _BYTE v99[81]; // [rsp+EFh] [rbp-109h] BYREF unsigned __int64 v100; // [rsp+1E8h] [rbp-10h] v3 = &unk_180206700; v4 = 0; v5 = (_OWORD *)((unsigned __int64)v99 & 0xFFFFFFFFFFFFFFC0uLL); v6 = _mm_and_ps((__m128)xmmword_180208300, *(__m128 *)&a1); v7 = _mm_add_ps(v6, (__m128)xmmword_1802088C0); v8 = _mm_cmpnle_ps(v6, (__m128)xmmword_180208340); v9 = _mm_cmpeq_ps((__m128)xmmword_1802088C0, v7); v10 = _mm_add_ps(_mm_mul_ps((__m128)xmmword_180208840, v7), (__m128)xmmword_180208880); v11 = _mm_sub_ps(_mm_sub_ps(v10, (__m128)xmmword_180208880), (__m128)xmmword_180208900); v100 = (unsigned __int64)v99 & 0xFFFFFFFFFFFFFFC0uLL; v12 = _mm_sub_ps( _mm_sub_ps( _mm_sub_ps( _mm_sub_ps(v6, _mm_mul_ps((__m128)xmmword_1802084C0, v11)), _mm_mul_ps((__m128)xmmword_180208500, v11)), _mm_mul_ps((__m128)xmmword_180208540, v11)), _mm_mul_ps((__m128)xmmword_180208580, v11)); v13 = _mm_mul_ps(v12, v12); v14 = (__m128)_mm_xor_si128((__m128i)v12, _mm_slli_epi32((__m128i)v10, 0x1Fu)); v15 = _mm_or_ps( _mm_andnot_ps( v9, _mm_add_ps( v14, _mm_mul_ps( _mm_add_ps( _mm_mul_ps( _mm_add_ps( _mm_mul_ps(_mm_add_ps(_mm_mul_ps((__m128)xmmword_180208740, v13), (__m128)xmmword_180208700), v13), (__m128)xmmword_1802086C0), v13), (__m128)xmmword_180208680), _mm_mul_ps(v13, v14)))), _mm_and_ps((__m128)xmmword_180208940, v9)); if ( _mm_movemask_ps(v8) ) { v19 = _mm_srli_epi32(_mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x7F800000u), 0), *(__m128i *)&a1), 0x17u); v20 = _mm_slli_epi32(_mm_add_epi32(_mm_slli_epi32(v19, 1u), v19), 2u); v4 = _mm_movemask_ps(_mm_cmpeq_ps(_mm_and_ps(v6, (__m128)xmmword_180208380), (__m128)xmmword_180208380)); v93 = v15; v21 = _mm_cvtsi128_si32(_mm_shuffle_epi32(v20, 2)); v22 = _mm_cvtsi128_si32(_mm_shuffle_epi32(v20, 3)); v23 = _mm_cvtsi128_si32(v20); v24 = _mm_cvtsi128_si32(_mm_shuffle_epi32(v20, 1)); v92 = v8; v25 = _mm_unpacklo_epi64( _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v23 + 4)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v24 + 4))), _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v21 + 4)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v22 + 4)))); v3 = &unk_180207300; v91 = *(__m128 *)&a1; v26 = _mm_unpacklo_epi64( _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v23)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v24))), _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v21)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v22)))); v27 = _mm_unpacklo_epi64( _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v23 + 8)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v24 + 8))), _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v21 + 8)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v22 + 8)))); v28 = _mm_shuffle_epi32(_mm_cvtsi32_si128(0xFFFFu), 0); v29 = _mm_srli_epi32(v26, 0x10u); v30 = _mm_and_si128(v26, v28); v94 = v29; v31 = _mm_add_epi32( _mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x7FFFFFu), 0), *(__m128i *)&a1), _mm_shuffle_epi32(_mm_cvtsi32_si128(0x800000u), 0)); v32 = _mm_and_si128(v31, v28); v33 = _mm_srli_epi64(v30, 0x20u); v34 = _mm_srli_epi64(v32, 0x20u); v35 = _mm_mul_epu32(v32, v30); v36 = _mm_srli_epi32(v25, 0x10u); v95 = v30; v37 = _mm_loadu_si128((const __m128i *)&xmmword_180204100); v38 = _mm_and_si128(v25, v28); v98[0] = _mm_or_si128(_mm_and_si128(v35, v37), _mm_slli_epi64(_mm_mul_epu32(v34, v33), 0x20u)); v96[0] = v36; v39 = _mm_srli_epi64(v38, 0x20u); v97 = _mm_srli_epi64(v36, 0x20u); v40 = _mm_srli_epi32(v31, 0x10u); v41 = v27; v42 = _mm_and_si128(v27, v28); v43 = _mm_or_si128(_mm_and_si128(_mm_mul_epu32(v32, v38), v37), _mm_slli_epi64(_mm_mul_epu32(v34, v39), 0x20u)); v44 = _mm_srli_epi64(v40, 0x20u); v45 = _mm_srli_epi32(v41, 0x10u); v96[1] = v33; v46 = _mm_srli_epi64(v45, 0x20u); v47 = _mm_or_si128(_mm_and_si128(_mm_mul_epu32(v32, v36), v37), _mm_slli_epi64(_mm_mul_epu32(v34, v97), 0x20u)); v48 = _mm_add_epi32( _mm_srli_epi32( _mm_or_si128( _mm_and_si128(_mm_mul_epu32(v40, v42), v37), _mm_slli_epi64(_mm_mul_epu32(_mm_srli_epi64(v42, 0x20u), v44), 0x20u)), 0x10u), _mm_add_epi32( _mm_and_si128(v43, v28), _mm_add_epi32( _mm_or_si128( _mm_and_si128(_mm_mul_epu32(v40, v45), v37), _mm_slli_epi64(_mm_mul_epu32(v44, v46), 0x20u)), _mm_srli_epi32( _mm_or_si128( _mm_and_si128(_mm_mul_epu32(v45, v32), v37), _mm_slli_epi64(_mm_mul_epu32(v46, v34), 0x20u)), 0x10u)))); v49 = _mm_add_epi32( _mm_srli_epi32(v48, 0x10u), _mm_add_epi32( _mm_and_si128(v47, v28), _mm_add_epi32( _mm_or_si128( _mm_and_si128(_mm_mul_epu32(v38, v40), v37), _mm_slli_epi64(_mm_mul_epu32(v39, v44), 0x20u)), _mm_srli_epi32(v43, 0x10u)))); v50 = _mm_loadu_si128(&v94); v51 = _mm_loadu_si128(v98); v52 = _mm_add_epi32( _mm_srli_epi32(v49, 0x10u), _mm_add_epi32( _mm_and_si128(v51, v28), _mm_add_epi32( _mm_or_si128( _mm_and_si128(_mm_mul_epu32(_mm_loadu_si128(v96), v40), v37), _mm_slli_epi64(_mm_mul_epu32(_mm_loadu_si128(&v97), v44), 0x20u)), _mm_srli_epi32(v47, 0x10u)))); v53 = _mm_add_epi32( _mm_slli_epi32( _mm_add_epi32( _mm_srli_epi32(v52, 0x10u), _mm_add_epi32( _mm_and_si128( _mm_or_si128( _mm_and_si128(_mm_mul_epu32(v32, v50), v37), _mm_slli_epi64(_mm_mul_epu32(v34, _mm_srli_epi64(v50, 0x20u)), 0x20u)), v28), _mm_add_epi32( _mm_or_si128( _mm_and_si128(_mm_mul_epu32(v40, v95), v37), _mm_slli_epi64(_mm_mul_epu32(v44, v33), 0x20u)), _mm_srli_epi32(v51, 0x10u)))), 0x10u), _mm_and_si128(v52, v28)); v54 = _mm_add_epi32(_mm_slli_epi32(v49, 0x10u), _mm_and_si128(v48, v28)); *(__m128 *)&a1 = v91; v55 = _mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x80000000), 0), (__m128i)v91); v56 = (__m128)_mm_or_si128( _mm_srli_epi32(v53, 9u), _mm_xor_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x3F800000u), 0), v55)); v57 = (__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x47400000u), 0); v58 = (__m128)_mm_xor_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x28800000u), 0), v55); v59 = (__m128)_mm_xor_si128(v55, _mm_shuffle_epi32(_mm_cvtsi32_si128(0x34000000u), 0)); v60 = _mm_add_ps(v56, v57); v61 = _mm_sub_ps( (__m128)_mm_or_si128( _mm_or_si128( _mm_slli_epi32(_mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x1FFu), 0), v53), 0xEu), _mm_srli_epi32(v54, 0x12u)), (__m128i)v59), v59); v62 = (__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0xB795777A), 0); v63 = _mm_sub_ps(v56, _mm_sub_ps(v60, v57)); v64 = _mm_add_ps(v63, v61); v65 = _mm_and_ps((__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0xFFFFF000), 0), v64); v66 = _mm_sub_ps(v63, v64); v67 = _mm_sub_ps(v64, v65); v68 = (__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x40C91000u), 0); v69 = _mm_add_ps( _mm_sub_ps( (__m128)_mm_or_si128( _mm_slli_epi32(_mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x3FFFFu), 0), v54), 5u), (__m128i)v58), v58), _mm_add_ps(v61, v66)); v70 = _mm_mul_ps(v68, v65); v71 = _mm_add_ps( _mm_add_ps(_mm_mul_ps(v68, v67), _mm_mul_ps(v65, v62)), _mm_add_ps( _mm_mul_ps((__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x40C90FDBu), 0), v69), _mm_mul_ps(v62, v67))); v72 = _mm_and_ps((__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x7FFFFFFFu), 0), v91); v73 = (__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x35800000u), 0); v74 = _mm_add_ps(v71, v70); v75 = _mm_cmplt_ps(v73, v72); v76 = _mm_or_ps(_mm_and_ps(_mm_cmple_ps(v72, v73), v91), _mm_and_ps(v74, v75)); v77 = _mm_slli_epi32(_mm_and_si128((__m128i)v60, _mm_shuffle_epi32(_mm_cvtsi32_si128(0xFFu), 0)), 4u); v78 = _mm_cvtsi128_si32(v77); v79 = _mm_and_ps(v75, _mm_add_ps(v71, _mm_sub_ps(v70, v74))); v80 = _mm_cvtsi128_si32(_mm_shuffle_epi32(v77, 2)); a3 = (unsigned int)_mm_cvtsi128_si32(_mm_shuffle_epi32(v77, 3)); v81 = _mm_cvtsi128_si32(_mm_shuffle_epi32(v77, 1)); v82 = _mm_mul_ps(v76, v76); v83 = (__m128)_mm_unpacklo_epi64( _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v78)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v81))), _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v80)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + (unsigned int)a3)))); v84 = (__m128)_mm_unpacklo_epi64( _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v78 + 12)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v81 + 12))), _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v80 + 12)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + (unsigned int)a3 + 12)))); v85 = _mm_mul_ps(v76, v84); v86 = _mm_mul_ps(v76, v83); v87 = (__m128)_mm_unpacklo_pd( (__m128d)_mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v78 + 4)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v81 + 4))), (__m128d)_mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v80 + 4)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + (unsigned int)a3 + 4)))); v88 = _mm_add_ps(v87, v85); v89 = _mm_sub_ps(_mm_add_ps(v83, v84), _mm_mul_ps(v76, v87)); v90 = _mm_add_ps(v88, v86); v15 = _mm_or_ps( _mm_andnot_ps(v92, v93), _mm_and_ps( _mm_add_ps( v90, _mm_add_ps( _mm_add_ps( _mm_add_ps( (__m128)_mm_unpacklo_epi64( _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v78 + 8)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v81 + 8))), _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v80 + 8)), _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + (unsigned int)a3 + 8)))), _mm_mul_ps(v79, v89)), _mm_mul_ps( v87, _mm_mul_ps(v82, _mm_add_ps(_mm_mul_ps((__m128)xmmword_180208480, v82), (__m128)xmmword_180208440)))), _mm_add_ps( _mm_add_ps(_mm_add_ps(v85, _mm_sub_ps(v87, v88)), _mm_add_ps(v86, _mm_sub_ps(v88, v90))), _mm_mul_ps( _mm_mul_ps( _mm_mul_ps( _mm_add_ps(_mm_mul_ps((__m128)xmmword_180208400, v82), (__m128)xmmword_1802083C0), v82), v76), v89)))), v92)); } if ( v4 ) { *v5 = *(_OWORD *)&a1; *(__m128 *)(((unsigned __int64)v99 & 0xFFFFFFFFFFFFFFC0uLL) + 0x40) = v15; v17 = 0; v18 = v4; do { if ( _bittest(&v18, v17) ) _common_scos_cout_rare((char *)v5 + 4 * v17, (char *)v5 + 4 * v17 + 64, a3, v3); v17 = (unsigned int)(v17 + 1); } while ( (int)v17 < 4 ); return *(__m128 *)(((unsigned __int64)v99 & 0xFFFFFFFFFFFFFFC0uLL) + 0x40); } return v15; }