citra-emu
/
citra
Archived
1
0
Fork 0

Merge pull request #5021 from ccawley2011/cpu_detect

common/cpu_detect: Remove unused functionality
This commit is contained in:
James Rowe 2020-01-17 20:30:29 -07:00 committed by GitHub
commit e4285097f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 0 additions and 116 deletions

View File

@ -3,8 +3,6 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <cstring> #include <cstring>
#include <string>
#include <thread>
#include "common/common_types.h" #include "common/common_types.h"
#include "common/x64/cpu_detect.h" #include "common/x64/cpu_detect.h"
@ -51,8 +49,6 @@ namespace Common {
static CPUCaps Detect() { static CPUCaps Detect() {
CPUCaps caps = {}; CPUCaps caps = {};
caps.num_cores = std::thread::hardware_concurrency();
// Assumes the CPU supports the CPUID instruction. Those that don't would likely not support // Assumes the CPU supports the CPUID instruction. Those that don't would likely not support
// Citra at all anyway // Citra at all anyway
@ -70,12 +66,6 @@ static CPUCaps Detect() {
__cpuid(cpu_id, 0x80000000); __cpuid(cpu_id, 0x80000000);
u32 max_ex_fn = cpu_id[0]; u32 max_ex_fn = cpu_id[0];
if (!strcmp(caps.brand_string, "GenuineIntel"))
caps.vendor = CPUVendor::INTEL;
else if (!strcmp(caps.brand_string, "AuthenticAMD"))
caps.vendor = CPUVendor::AMD;
else
caps.vendor = CPUVendor::OTHER;
// Set reasonable default brand string even if brand string not available // Set reasonable default brand string even if brand string not available
strcpy(caps.cpu_string, caps.brand_string); strcpy(caps.cpu_string, caps.brand_string);
@ -96,15 +86,9 @@ static CPUCaps Detect() {
caps.sse4_1 = true; caps.sse4_1 = true;
if ((cpu_id[2] >> 20) & 1) if ((cpu_id[2] >> 20) & 1)
caps.sse4_2 = true; caps.sse4_2 = true;
if ((cpu_id[2] >> 22) & 1)
caps.movbe = true;
if ((cpu_id[2] >> 25) & 1) if ((cpu_id[2] >> 25) & 1)
caps.aes = true; caps.aes = true;
if ((cpu_id[3] >> 24) & 1) {
caps.fxsave_fxrstor = true;
}
// AVX support requires 3 separate checks: // AVX support requires 3 separate checks:
// - Is the AVX bit set in CPUID? // - Is the AVX bit set in CPUID?
// - Is the XSAVE bit set in CPUID? // - Is the XSAVE bit set in CPUID?
@ -129,8 +113,6 @@ static CPUCaps Detect() {
} }
} }
caps.flush_to_zero = caps.sse;
if (max_ex_fn >= 0x80000004) { if (max_ex_fn >= 0x80000004) {
// Extract CPU model string // Extract CPU model string
__cpuid(cpu_id, 0x80000002); __cpuid(cpu_id, 0x80000002);
@ -144,14 +126,8 @@ static CPUCaps Detect() {
if (max_ex_fn >= 0x80000001) { if (max_ex_fn >= 0x80000001) {
// Check for more features // Check for more features
__cpuid(cpu_id, 0x80000001); __cpuid(cpu_id, 0x80000001);
if (cpu_id[2] & 1)
caps.lahf_sahf_64 = true;
if ((cpu_id[2] >> 5) & 1)
caps.lzcnt = true;
if ((cpu_id[2] >> 16) & 1) if ((cpu_id[2] >> 16) & 1)
caps.fma4 = true; caps.fma4 = true;
if ((cpu_id[3] >> 29) & 1)
caps.long_mode = true;
} }
return caps; return caps;
@ -162,48 +138,4 @@ const CPUCaps& GetCPUCaps() {
return caps; return caps;
} }
std::string GetCPUCapsString() {
auto caps = GetCPUCaps();
std::string sum(caps.cpu_string);
sum += " (";
sum += caps.brand_string;
sum += ")";
if (caps.sse)
sum += ", SSE";
if (caps.sse2) {
sum += ", SSE2";
if (!caps.flush_to_zero)
sum += " (without DAZ)";
}
if (caps.sse3)
sum += ", SSE3";
if (caps.ssse3)
sum += ", SSSE3";
if (caps.sse4_1)
sum += ", SSE4.1";
if (caps.sse4_2)
sum += ", SSE4.2";
if (caps.avx)
sum += ", AVX";
if (caps.avx2)
sum += ", AVX2";
if (caps.bmi1)
sum += ", BMI1";
if (caps.bmi2)
sum += ", BMI2";
if (caps.fma)
sum += ", FMA";
if (caps.aes)
sum += ", AES";
if (caps.movbe)
sum += ", MOVBE";
if (caps.long_mode)
sum += ", 64-bit support";
return sum;
}
} // namespace Common } // namespace Common

View File

@ -4,30 +4,18 @@
#pragma once #pragma once
#include <string>
namespace Common { namespace Common {
/// x86/x64 CPU vendors that may be detected by this module
enum class CPUVendor {
INTEL,
AMD,
OTHER,
};
/// x86/x64 CPU capabilities that may be detected by this module /// x86/x64 CPU capabilities that may be detected by this module
struct CPUCaps { struct CPUCaps {
CPUVendor vendor;
char cpu_string[0x21]; char cpu_string[0x21];
char brand_string[0x41]; char brand_string[0x41];
int num_cores;
bool sse; bool sse;
bool sse2; bool sse2;
bool sse3; bool sse3;
bool ssse3; bool ssse3;
bool sse4_1; bool sse4_1;
bool sse4_2; bool sse4_2;
bool lzcnt;
bool avx; bool avx;
bool avx2; bool avx2;
bool bmi1; bool bmi1;
@ -35,20 +23,6 @@ struct CPUCaps {
bool fma; bool fma;
bool fma4; bool fma4;
bool aes; bool aes;
// Support for the FXSAVE and FXRSTOR instructions
bool fxsave_fxrstor;
bool movbe;
// This flag indicates that the hardware supports some mode in which denormal inputs and outputs
// are automatically set to (signed) zero.
bool flush_to_zero;
// Support for LAHF and SAHF instructions in 64-bit mode
bool lahf_sahf_64;
bool long_mode;
}; };
/** /**
@ -57,10 +31,4 @@ struct CPUCaps {
*/ */
const CPUCaps& GetCPUCaps(); const CPUCaps& GetCPUCaps();
/**
* Gets a string summary of the name and supported capabilities of the host CPU
* @return String summary
*/
std::string GetCPUCapsString();
} // namespace Common } // namespace Common

View File

@ -23,20 +23,6 @@
namespace Core { namespace Core {
#ifdef ARCHITECTURE_x86_64
static const char* CpuVendorToStr(Common::CPUVendor vendor) {
switch (vendor) {
case Common::CPUVendor::INTEL:
return "Intel";
case Common::CPUVendor::AMD:
return "Amd";
case Common::CPUVendor::OTHER:
return "Other";
}
UNREACHABLE();
}
#endif
static u64 GenerateTelemetryId() { static u64 GenerateTelemetryId() {
u64 telemetry_id{}; u64 telemetry_id{};
CryptoPP::AutoSeededRandomPool rng; CryptoPP::AutoSeededRandomPool rng;
@ -143,8 +129,6 @@ void TelemetrySession::AddInitialInfo(Loader::AppLoader& app_loader) {
AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string);
AddField(Telemetry::FieldType::UserSystem, "CPU_BrandString", AddField(Telemetry::FieldType::UserSystem, "CPU_BrandString",
Common::GetCPUCaps().brand_string); Common::GetCPUCaps().brand_string);
AddField(Telemetry::FieldType::UserSystem, "CPU_Vendor",
CpuVendorToStr(Common::GetCPUCaps().vendor));
AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_AES", Common::GetCPUCaps().aes); AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_AES", Common::GetCPUCaps().aes);
AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_AVX", Common::GetCPUCaps().avx); AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_AVX", Common::GetCPUCaps().avx);
AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_AVX2", Common::GetCPUCaps().avx2); AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_AVX2", Common::GetCPUCaps().avx2);