From 2a66b40267db6ebcea0cd36a7111abcf85af876f Mon Sep 17 00:00:00 2001 From: RedBlackAka Date: Wed, 20 May 2026 19:11:09 +0200 Subject: [PATCH] [common/cpu_detect] Remove SSE/SSE2/FMA4/AVX_VNNI detection (#3979) Removes Eden's own feature detection for SSE, SSE2, FMA4 and AVX_VNNI, in order to clean up code and make the function slightly lighter. They are all unused and I have specific reasons for their removal: - SSE/SSE2 are always true for x64 - FMA4 is a deprecated AMD exclusive extension, replaced by the regular FMA and was logged here as "FMA" for no reason - AVX_VNNI simply does not seem applicable for Eden (but can still be checked for through Xbyak's feature detection if necessary) Co-authored-by: RedBlackAka <140876408+RedBlackAka@users.noreply.github.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3979 Reviewed-by: Lizzie Reviewed-by: crueter Reviewed-by: MaranBr --- src/common/x64/cpu_detect.cpp | 6 ------ src/common/x64/cpu_detect.h | 7 +++---- src/qt_common/qt_common.cpp | 2 +- src/yuzu/main_window.cpp | 2 +- 4 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/common/x64/cpu_detect.cpp b/src/common/x64/cpu_detect.cpp index 4cc42ccbd5..d613954eb5 100644 --- a/src/common/x64/cpu_detect.cpp +++ b/src/common/x64/cpu_detect.cpp @@ -106,8 +106,6 @@ static CPUCaps Detect() { // Detect family and other miscellaneous features if (max_std_fn >= 1) { __cpuid(cpu_id, 0x00000001); - caps.sse = Common::Bit<25>(cpu_id[3]); - caps.sse2 = Common::Bit<26>(cpu_id[3]); caps.sse3 = Common::Bit<0>(cpu_id[2]); caps.pclmulqdq = Common::Bit<1>(cpu_id[2]); caps.ssse3 = Common::Bit<9>(cpu_id[2]); @@ -150,9 +148,6 @@ static CPUCaps Detect() { caps.waitpkg = Common::Bit<5>(cpu_id[2]); caps.gfni = Common::Bit<8>(cpu_id[2]); - - __cpuidex(cpu_id, 0x00000007, 0x00000001); - caps.avx_vnni = caps.avx && Common::Bit<4>(cpu_id[0]); } } @@ -170,7 +165,6 @@ static CPUCaps Detect() { // Check for more features __cpuid(cpu_id, 0x80000001); caps.lzcnt = Common::Bit<5>(cpu_id[2]); - caps.fma4 = Common::Bit<16>(cpu_id[2]); caps.monitorx = Common::Bit<29>(cpu_id[2]); } diff --git a/src/common/x64/cpu_detect.h b/src/common/x64/cpu_detect.h index 756459417f..af93c36e2c 100644 --- a/src/common/x64/cpu_detect.h +++ b/src/common/x64/cpu_detect.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project // SPDX-FileCopyrightText: Copyright 2013 Dolphin Emulator Project / 2015 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -36,15 +39,12 @@ struct CPUCaps { u32 crystal_frequency; u64 tsc_frequency; // Derived from the above three values - bool sse : 1; - bool sse2 : 1; bool sse3 : 1; bool ssse3 : 1; bool sse4_1 : 1; bool sse4_2 : 1; bool avx : 1; - bool avx_vnni : 1; bool avx2 : 1; bool avx512f : 1; bool avx512dq : 1; @@ -59,7 +59,6 @@ struct CPUCaps { bool bmi2 : 1; bool f16c : 1; bool fma : 1; - bool fma4 : 1; bool gfni : 1; bool invariant_tsc : 1; bool lzcnt : 1; diff --git a/src/qt_common/qt_common.cpp b/src/qt_common/qt_common.cpp index 0a134d5047..753c537736 100644 --- a/src/qt_common/qt_common.cpp +++ b/src/qt_common/qt_common.cpp @@ -223,7 +223,7 @@ void Init(QWidget* root) { } else if (caps.avx2) { cpu_string += '2'; } - if (caps.fma || caps.fma4) { + if (caps.fma) { cpu_string += " | FMA"; } } diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp index 3ca4b40a6d..4d5a3c43f9 100644 --- a/src/yuzu/main_window.cpp +++ b/src/yuzu/main_window.cpp @@ -3120,7 +3120,7 @@ void MainWindow::OnMenuReportCompatibility() { // #if defined(ARCHITECTURE_x86_64) && !defined(__APPLE__) // const auto& caps = Common::GetCPUCaps(); - // const bool has_fma = caps.fma || caps.fma4; + // const bool has_fma = caps.fma; // const auto processor_count = std::thread::hardware_concurrency(); // const bool has_4threads = processor_count == 0 || processor_count >= 4; // const bool has_8gb_ram = Common::GetMemInfo().TotalPhysicalMemory >= 8_GiB;