// // _sse4_cosf4 from 0x180122820 to 0x180122fbd (1949 bytes) // // 2 xrefs: // > __vdecl_cosf4 @ 0x1801202c7 // > @ 0x1802025d0 // // 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 _sse4_cosf4(double a1, __int64 a2, __int64 a3) { void *v3; // r9 int v4; // r10d _OWORD *v5; // r13 __m128 v6; // xmm1 __m128 v7; // xmm4 __m128 v8; // xmm2 __m128 v9; // xmm8 __m128 v10; // xmm10 __m128 v11; // xmm8 __m128 v12; // xmm5 __m128 v13; // xmm11 __m128 v14; // xmm5 __m128 v15; // xmm5 __int64 v17; // rbx int v18; // esi __m128i v19; // xmm10 __m128i v20; // xmm9 unsigned int v21; // r8d unsigned int epi32; // edx unsigned int v23; // ecx unsigned int v24; // eax __m128i v25; // xmm5 __m128i v26; // xmm13 __m128i v27; // xmm14 __m128i v28; // xmm7 __m128i v29; // xmm12 __m128i v30; // xmm11 __m128i v31; // xmm15 __m128i v32; // xmm4 __m128i v33; // xmm11 __m128i v34; // xmm14 __m128i v35; // xmm10 __m128i v36; // xmm8 __m128i v37; // xmm9 __m128i v38; // xmm12 __m128i v39; // xmm5 __m128i v40; // xmm6 __m128i v41; // xmm1 __m128i v42; // xmm14 __m128i v43; // xmm10 __m128i v44; // xmm13 __m128 v45; // xmm14 __m128 v46; // xmm4 __m128i v47; // xmm1 __m128 v48; // xmm8 __m128 v49; // xmm13 __m128 v50; // xmm15 __m128 v51; // xmm7 __m128 v52; // xmm14 __m128 v53; // xmm11 __m128 v54; // xmm9 __m128 v55; // xmm12 __m128 v56; // xmm7 __m128 v57; // xmm8 __m128 v58; // xmm9 __m128 v59; // xmm5 __m128 v60; // xmm11 __m128i v61; // xmm15 __m128 v62; // xmm4 unsigned int v63; // edx __m128 v64; // xmm8 __m128 v65; // xmm10 unsigned int v66; // ecx unsigned int v67; // eax __m128 v68; // xmm9 __m128 v69; // xmm10 __m128 v70; // xmm9 __m128 v71; // xmm8 __m128 v72; // xmm14 __m128 v73; // xmm1 __m128 v74; // xmm6 __m128 v75; // xmm12 __m128 v76; // xmm7 __m128 v77; // xmm13 __m128 v78; // xmm4 __m128 v79; // xmm7 __m128 v80; // [rsp+20h] [rbp-158h] _BYTE v81[81]; // [rsp+6Fh] [rbp-109h] BYREF unsigned __int64 v82; // [rsp+168h] [rbp-10h] v3 = &unk_180206700; v4 = 0; v5 = (_OWORD *)((unsigned __int64)v81 & 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_add_ps(_mm_mul_ps((__m128)xmmword_180208840, v7), (__m128)xmmword_180208880); v10 = (__m128)_mm_slli_epi32((__m128i)v9, 0x1Fu); v11 = _mm_sub_ps(_mm_sub_ps(v9, (__m128)xmmword_180208880), (__m128)xmmword_180208900); 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 = _mm_xor_ps(v12, v10); v82 = (unsigned __int64)v81 & 0xFFFFFFFFFFFFFFC0uLL; v15 = _mm_blendv_ps( _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))), (__m128)xmmword_180208940, _mm_cmpeq_ps((__m128)xmmword_1802088C0, v7)); if ( _mm_movemask_ps(v8) ) { v4 = _mm_movemask_ps(_mm_cmpeq_ps(_mm_and_ps(v6, (__m128)xmmword_180208380), (__m128)xmmword_180208380)); 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); v21 = _mm_cvtsi128_si32(v20); v80 = v15; epi32 = _mm_extract_epi32(v20, 2); v23 = _mm_extract_epi32(v20, 1); v24 = _mm_extract_epi32(v20, 3); v25 = _mm_unpacklo_epi64( _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v21)), *(_DWORD *)((char *)&unk_180206700 + v23), 1), _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + epi32)), *(_DWORD *)((char *)&unk_180206700 + v24), 1)); v26 = _mm_srli_epi32(v25, 0x10u); v27 = _mm_unpacklo_epi64( _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v21 + 4)), *(_DWORD *)((char *)&unk_180206700 + v23 + 4), 1), _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + epi32 + 4)), *(_DWORD *)((char *)&unk_180206700 + v24 + 4), 1)); v3 = &unk_180207300; v28 = _mm_srli_epi32(v27, 0x10u); v29 = _mm_unpacklo_epi64( _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + v21 + 8)), *(_DWORD *)((char *)&unk_180206700 + v23 + 8), 1), _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180206700 + epi32 + 8)), *(_DWORD *)((char *)&unk_180206700 + v24 + 8), 1)); v30 = _mm_add_epi32( _mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x7FFFFFu), 0), *(__m128i *)&a1), _mm_shuffle_epi32(_mm_cvtsi32_si128(0x800000u), 0)); v31 = _mm_shuffle_epi32(_mm_cvtsi32_si128(0xFFFFu), 0); v32 = _mm_srli_epi32(v30, 0x10u); v33 = _mm_and_si128(v30, v31); v34 = _mm_and_si128(v27, v31); v35 = _mm_srli_epi32(v29, 0x10u); v36 = _mm_mullo_epi32(v33, v34); v37 = _mm_mullo_epi32(v33, v28); v38 = _mm_add_epi32( _mm_srli_epi32(_mm_mullo_epi32(_mm_and_si128(v29, v31), v32), 0x10u), _mm_add_epi32( _mm_and_si128(v36, v31), _mm_add_epi32(_mm_mullo_epi32(v32, v35), _mm_srli_epi32(_mm_mullo_epi32(v35, v33), 0x10u)))); v39 = _mm_and_si128(v25, v31); v40 = _mm_mullo_epi32(v33, v39); v41 = _mm_add_epi32( _mm_srli_epi32(v38, 0x10u), _mm_add_epi32(_mm_and_si128(v37, v31), _mm_add_epi32(_mm_mullo_epi32(v34, v32), _mm_srli_epi32(v36, 0x10u)))); v42 = _mm_add_epi32( _mm_srli_epi32(v41, 0x10u), _mm_add_epi32(_mm_and_si128(v40, v31), _mm_add_epi32(_mm_mullo_epi32(v28, v32), _mm_srli_epi32(v37, 0x10u)))); v43 = _mm_add_epi32( _mm_slli_epi32( _mm_add_epi32( _mm_srli_epi32(v42, 0x10u), _mm_add_epi32( _mm_and_si128(_mm_mullo_epi32(v33, v26), v31), _mm_add_epi32(_mm_mullo_epi32(v32, v39), _mm_srli_epi32(v40, 0x10u)))), 0x10u), _mm_and_si128(v42, v31)); v44 = _mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x80000000), 0), *(__m128i *)&a1); v45 = (__m128)_mm_or_si128( _mm_srli_epi32(v43, 9u), _mm_xor_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x3F800000u), 0), v44)); v46 = (__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x47400000u), 0); v47 = _mm_add_epi32(_mm_slli_epi32(v41, 0x10u), _mm_and_si128(v38, v31)); v48 = (__m128)_mm_xor_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x28800000u), 0), v44); v49 = (__m128)_mm_xor_si128(v44, _mm_shuffle_epi32(_mm_cvtsi32_si128(0x34000000u), 0)); v50 = _mm_add_ps(v45, v46); v51 = _mm_sub_ps( (__m128)_mm_or_si128( _mm_or_si128( _mm_slli_epi32(_mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x1FFu), 0), v43), 0xEu), _mm_srli_epi32(v47, 0x12u)), (__m128i)v49), v49); v52 = _mm_sub_ps(v45, _mm_sub_ps(v50, v46)); v53 = (__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x40C91000u), 0); v54 = _mm_add_ps(v52, v51); v55 = _mm_add_ps( _mm_sub_ps( (__m128)_mm_or_si128( _mm_slli_epi32(_mm_and_si128(_mm_shuffle_epi32(_mm_cvtsi32_si128(0x3FFFFu), 0), v47), 5u), (__m128i)v48), v48), _mm_add_ps(v51, _mm_sub_ps(v52, v54))); v56 = (__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0xB795777A), 0); v57 = _mm_and_ps((__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0xFFFFF000), 0), v54); v58 = _mm_sub_ps(v54, v57); v59 = _mm_mul_ps(v57, v53); v60 = _mm_add_ps( _mm_add_ps(_mm_mul_ps(v53, v58), _mm_mul_ps(v57, v56)), _mm_add_ps( _mm_mul_ps((__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x40C90FDBu), 0), v55), _mm_mul_ps(v56, v58))); v61 = _mm_slli_epi32(_mm_and_si128((__m128i)v50, _mm_shuffle_epi32(_mm_cvtsi32_si128(0xFFu), 0)), 4u); v62 = _mm_add_ps(v60, v59); v63 = _mm_cvtsi128_si32(v61); v64 = (__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x35800000u), 0); v65 = _mm_and_ps((__m128)_mm_shuffle_epi32(_mm_cvtsi32_si128(0x7FFFFFFFu), 0), *(__m128 *)&a1); v66 = _mm_extract_epi32(v61, 2); v67 = _mm_extract_epi32(v61, 1); v68 = _mm_cmplt_ps(v64, v65); a3 = (unsigned int)_mm_extract_epi32(v61, 3); v69 = _mm_or_ps(_mm_and_ps(_mm_cmple_ps(v65, v64), *(__m128 *)&a1), _mm_and_ps(v62, v68)); v70 = _mm_and_ps(v68, _mm_add_ps(v60, _mm_sub_ps(v59, v62))); v71 = _mm_mul_ps(v69, v69); v72 = (__m128)_mm_unpacklo_epi64( _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v63 + 12)), *(_DWORD *)((char *)&unk_180207300 + v67 + 12), 1), _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v66 + 12)), *(_DWORD *)((char *)&unk_180207300 + (unsigned int)a3 + 12), 1)); v73 = _mm_mul_ps(v69, v72); v74 = (__m128)_mm_unpacklo_pd( (__m128d)_mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v63 + 4)), *(_DWORD *)((char *)&unk_180207300 + v67 + 4), 1), (__m128d)_mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v66 + 4)), *(_DWORD *)((char *)&unk_180207300 + (unsigned int)a3 + 4), 1)); v75 = _mm_add_ps(v74, v73); v76 = (__m128)_mm_unpacklo_epi64( _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v63)), *(_DWORD *)((char *)&unk_180207300 + v67), 1), _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v66)), *(_DWORD *)((char *)&unk_180207300 + (unsigned int)a3), 1)); v77 = _mm_mul_ps(v69, v76); v78 = _mm_add_ps(v75, v77); v79 = _mm_sub_ps(_mm_add_ps(v76, v72), _mm_mul_ps(v69, v74)); v15 = _mm_blendv_ps( v80, _mm_add_ps( v78, _mm_add_ps( _mm_add_ps( _mm_add_ps( (__m128)_mm_unpacklo_epi64( _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v63 + 8)), *(_DWORD *)((char *)&unk_180207300 + v67 + 8), 1), _mm_insert_epi32( _mm_cvtsi32_si128(*(_DWORD *)((char *)&unk_180207300 + v66 + 8)), *(_DWORD *)((char *)&unk_180207300 + (unsigned int)a3 + 8), 1)), _mm_mul_ps(v70, v79)), _mm_mul_ps( v74, _mm_mul_ps(v71, _mm_add_ps(_mm_mul_ps((__m128)xmmword_180208480, v71), (__m128)xmmword_180208440)))), _mm_add_ps( _mm_add_ps(_mm_add_ps(v73, _mm_sub_ps(v74, v75)), _mm_add_ps(v77, _mm_sub_ps(v75, v78))), _mm_mul_ps( _mm_mul_ps( _mm_mul_ps(_mm_add_ps(_mm_mul_ps((__m128)xmmword_180208400, v71), (__m128)xmmword_1802083C0), v71), v69), v79)))), v8); } if ( v4 ) { *v5 = *(_OWORD *)&a1; *(__m128 *)(((unsigned __int64)v81 & 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)v81 & 0xFFFFFFFFFFFFFFC0uLL) + 0x40); } return v15; }