1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// Copyright 2008 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
// Detect the CPU, so we'll know which optimizations to use
#pragma once
#include <string>
enum class CPUVendor
{
Intel,
AMD,
ARM,
Other,
};
struct CPUInfo
{
CPUVendor vendor = CPUVendor::Other;
std::string cpu_id;
std::string model_name;
bool HTT = false;
int num_cores = 0;
bool bSSE3 = false;
bool bSSSE3 = false;
bool bSSE4_1 = false;
bool bSSE4_2 = false;
bool bLZCNT = false;
bool bAVX = false;
bool bBMI1 = false;
bool bBMI2 = 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;
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 bAtom = false;
bool bCRC32 = false;
bool bSHA1 = false;
bool bSHA2 = false;
// ARMv8 specific
bool bAFP = false; // Alternate floating-point behavior
// Call Detect()
explicit CPUInfo();
// 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:
void Detect();
};
extern CPUInfo cpu_info;
|