CPUDetect: improve win/arm64 support

read brand_string on macos/arm64
remove unused flags
report family/model info instead of vendor name
This commit is contained in:
Shawn Hoffman
2022-07-18 21:45:27 -07:00
parent e4ff49769c
commit 76b4318b88
9 changed files with 422 additions and 229 deletions

View File

@ -16,62 +16,52 @@ enum class CPUVendor
struct CPUInfo
{
CPUVendor vendor = CPUVendor::Intel;
CPUVendor vendor = CPUVendor::Other;
char cpu_string[0x41] = {};
char brand_string[0x21] = {};
bool OS64bit = false;
bool CPU64bit = false;
bool Mode64bit = false;
std::string cpu_id;
std::string model_name;
bool HTT = false;
int num_cores = 0;
bool bSSE = false;
bool bSSE2 = false;
bool bSSE3 = false;
bool bSSSE3 = false;
bool bPOPCNT = false;
bool bSSE4_1 = false;
bool bSSE4_2 = false;
bool bLZCNT = false;
bool bSSE4A = false;
bool bAVX = false;
bool bAVX2 = false;
bool bBMI1 = false;
bool bBMI2 = false;
// PDEP and PEXT are ridiculously slow on AMD Zen1, Zen1+ and Zen2 (Family 23)
bool bFastBMI2 = false;
// PDEP and PEXT are ridiculously slow on AMD Zen1, Zen1+ and Zen2 (Family 17h)
bool bBMI2FastParallelBitOps = false;
bool bFMA = false;
bool bFMA4 = false;
bool bAES = false;
// FXSAVE/FXRSTOR
bool bFXSR = false;
bool bMOVBE = false;
// This flag indicates that the hardware supports some mode
// in which denormal inputs _and_ outputs are automatically set to (signed) zero.
bool bFlushToZero = false;
bool bLAHFSAHF64 = false;
bool bLongMode = false;
bool bAtom = false;
bool bZen1p2 = false;
// ARMv8 specific
bool bFP = false;
bool bASIMD = false;
bool bCRC32 = false;
bool bSHA1 = false;
bool bSHA2 = false;
// ARMv8 specific
bool bAFP = false; // Alternate floating-point behavior
// Call Detect()
explicit CPUInfo();
// Turn the CPU info into a string we can show
// The returned string consists of "<model_name>,<cpu_id>,<flag...>"
// Where:
// model_name and cpud_id may be zero-length
// model_name is human-readable marketing name
// cpu_id is ':'-delimited string of id info
// flags are optionally included if the related feature is supported and reporting its enablement
// seems useful to report
std::string Summarize();
private:
// Detects the various CPU features
void Detect();
};