// Copyright 2013 Dolphin Emulator Project // Licensed under GPLv2 // Refer to the license.txt file included. // Detect the cpu, so we'll know which optimizations to use #pragma once #include enum CPUVendor { VENDOR_INTEL = 0, VENDOR_AMD = 1, VENDOR_ARM = 2, VENDOR_OTHER = 3, }; struct CPUInfo { CPUVendor vendor; char cpu_string[0x21]; char brand_string[0x41]; bool OS64bit; bool CPU64bit; bool Mode64bit; bool HTT; int num_cores; int logical_cpu_count; bool bSSE; bool bSSE2; bool bSSE3; bool bSSSE3; bool bPOPCNT; bool bSSE4_1; bool bSSE4_2; bool bLZCNT; bool bSSE4A; bool bAVX; bool bFMA; bool bAES; // FXSAVE/FXRSTOR bool bFXSR; bool bMOVBE; // This flag indicates that the hardware supports some mode // in which denormal inputs _and_ outputs are automatically set to (signed) zero. // TODO: ARM bool bFlushToZero; bool bLAHFSAHF64; bool bLongMode; // ARM specific CPUInfo bool bSwp; bool bHalf; bool bThumb; bool bFastMult; bool bVFP; bool bEDSP; bool bThumbEE; bool bNEON; bool bVFPv3; bool bTLS; bool bVFPv4; bool bIDIVa; bool bIDIVt; bool bArmV7; // enable MOVT, MOVW etc // ARMv8 specific bool bFP; bool bASIMD; // Call Detect() explicit CPUInfo(); // Turn the cpu info into a string we can show std::string Summarize(); bool IsUnsafe(); private: // Detects the various cpu features void Detect(); }; extern CPUInfo cpu_info;