vkdoom_m/src/common/utility/x86.h
Christoph Oelckers 7491361863 - do some cleansing of the GPU string and add CPU name when only getting an anonymous series name.
The cleansing is mainly for AMD's Linux drivers which report too much extraneous info here.
The CPU name helps when classifying anonymous iGPU series.
2023-09-24 22:20:50 +02:00

235 lines
4.7 KiB
C

#ifndef X86_H
#define X86_H
#include "basics.h"
#include "zstring.h"
struct CPUInfo // 92 bytes
{
union
{
char VendorID[16];
uint32_t dwVendorID[4];
};
union
{
char CPUString[48];
uint32_t dwCPUString[12];
};
uint8_t Stepping;
uint8_t Model;
uint8_t Family;
uint8_t Type;
uint8_t HyperThreading;
union
{
struct
{
uint8_t BrandIndex;
uint8_t CLFlush;
uint8_t CPUCount;
uint8_t APICID;
uint32_t bSSE3:1;
uint32_t bPCLMULQDQ:1;
uint32_t bDTES64:1;
uint32_t bMONITOR:1;
uint32_t bDSCPL:1;
uint32_t bVMX:1;
uint32_t bSMX:1;
uint32_t bEST:1;
uint32_t bTM2:1;
uint32_t bSSSE3:1;
uint32_t bCNXTID:1;
uint32_t bSDBG:1;
uint32_t bFMA3:1;
uint32_t bCX16:1;
uint32_t bXTPR:1;
uint32_t bPDCM:1;
uint32_t bReverved1:1;
uint32_t bPCID:1;
uint32_t bDCA:1;
uint32_t bSSE41:1;
uint32_t bSSE42:1;
uint32_t bX2APIC:1;
uint32_t bMOVBE:1;
uint32_t bPOPCNT:1;
uint32_t bTSCDL:1;
uint32_t bAES:1;
uint32_t bXSAVE:1;
uint32_t bOSXSAVE:1;
uint32_t bAVX:1;
uint32_t bF16C:1;
uint32_t bRDRND:1;
uint32_t bHypervisor:1;
uint32_t bFPU:1;
uint32_t bVME:1;
uint32_t bDE:1;
uint32_t bPSE:1;
uint32_t bRDTSC:1;
uint32_t bMSR:1;
uint32_t bPAE:1;
uint32_t bMCE:1;
uint32_t bCX8:1;
uint32_t bAPIC:1;
uint32_t bReserved2:1;
uint32_t bSEP:1;
uint32_t bMTRR:1;
uint32_t bPGE:1;
uint32_t bMCA:1;
uint32_t bCMOV:1;
uint32_t bPAT:1;
uint32_t bPSE36:1;
uint32_t bPSN:1;
uint32_t bCFLUSH:1;
uint32_t bReserved3:1;
uint32_t bDS:1;
uint32_t bACPI:1;
uint32_t bMMX:1;
uint32_t bFXSR:1;
uint32_t bSSE:1;
uint32_t bSSE2:1;
uint32_t bSS:1;
uint32_t bHTT:1;
uint32_t bTM:1;
uint32_t bReserved4:1;
uint32_t bPBE:1;
uint32_t DontCare2:22;
uint32_t bMMXPlus:1; // AMD's MMX extensions
uint32_t bMMXAgain:1; // Just a copy of bMMX above
uint32_t DontCare3:6;
uint32_t b3DNowPlus:1;
uint32_t b3DNow:1;
uint32_t bFSGSBASE:1;
uint32_t bIA32_TSC_ADJUST:1;
uint32_t bSGX:1;
uint32_t bBMI1:1;
uint32_t bHLE:1;
uint32_t bAVX2:1;
uint32_t bFDP_EXCPTN_ONLY:1;
uint32_t bSMEP:1;
uint32_t bBMI2:1;
uint32_t bERMS:1;
uint32_t bINVPCID:1;
uint32_t bRTM:1;
uint32_t bPQM:1;
uint32_t bFPU_CS_DS:1;
uint32_t bMPX:1;
uint32_t bPQE:1;
uint32_t bAVX512_F:1;
uint32_t bAVX512_DQ:1;
uint32_t bRDSEED:1;
uint32_t bADX:1;
uint32_t bSMAP:1;
uint32_t bAVX512_IFMA:1;
uint32_t bPCOMMIT:1;
uint32_t bCLFLUSHOPT:1;
uint32_t bCLWB:1;
uint32_t bINTEL_PT:1;
uint32_t bAVX512_PF:1;
uint32_t bAVX512_ER:1;
uint32_t bAVX512_CD:1;
uint32_t bSHA:1;
uint32_t bAVX512_BW:1;
uint32_t bAVX512_VL:1;
uint32_t bPREFETCHWT1:1;
uint32_t bAVX512_VBMI:1;
uint32_t bUMIP:1;
uint32_t bPKU:1;
uint32_t bOSPKE:1;
uint32_t bWAITPKG:1;
uint32_t bAVX512_VBMI2:1;
uint32_t bCET_SS:1;
uint32_t bGFNI:1;
uint32_t bVAES:1;
uint32_t bVPCLMULQDQ:1;
uint32_t bAVX512_VNNI:1;
uint32_t bAVX512_BITALG:1;
uint32_t bReserved5:1;
uint32_t bAVX512_VPOPCNTDQ:1;
uint32_t bReserved6:1;
uint32_t b5L_PAGING:1;
uint32_t MAWAU:5;
uint32_t bRDPID:1;
uint32_t bReserved7:1;
uint32_t bReserved8:1;
uint32_t bCLDEMOTE:1;
uint32_t bReserved9:1;
uint32_t bMOVDIRI:1;
uint32_t bMOVDIR64B:1;
uint32_t bENQCMD:1;
uint32_t bSGX_LC:1;
uint32_t bPKS:1;
uint32_t bReserved10:1;
uint32_t bReserved11:1;
uint32_t bAVX512_4VNNIW:1;
uint32_t bAVX512_4FMAPS:1;
uint32_t bFSRM:1;
uint32_t bReserved12:1;
uint32_t bReserved13:1;
uint32_t bReserved14:1;
uint32_t bAVX512_VP2INTERSECT:1;
uint32_t bSRBDS_CTRL:1;
uint32_t bMD_CLEAR:1;
uint32_t bReserved15:1;
uint32_t bReserved16:1;
uint32_t bTSX_FORCE_ABORT:1;
uint32_t bSERIALIZE:1;
uint32_t bHYBRID:1;
uint32_t bTSXLDTRK:1;
uint32_t bReserved17:1;
uint32_t bPCONFIG:1;
uint32_t bLBR:1;
uint32_t bCET_IBT:1;
uint32_t bReserved18:1;
uint32_t bAMX_BF16:1;
uint32_t bReserved19:1;
uint32_t bAMX_TILE:1;
uint32_t bAMX_INT8:1;
uint32_t bIBRS_IBPB:1;
uint32_t bSTIBP:1;
uint32_t bL1D_FLUSH:1;
uint32_t bIA32_ARCH_CAPABILITIES:1;
uint32_t bIA32_CORE_CAPABILITIES:1;
uint32_t bSSBD:1;
uint32_t DontCare4:5;
uint32_t bAVX512_BF16:1;
uint32_t DontCare5:26;
};
uint32_t FeatureFlags[8];
};
uint8_t AMDStepping;
uint8_t AMDModel;
uint8_t AMDFamily;
uint8_t bIsAMD;
union
{
struct
{
uint8_t DataL1LineSize;
uint8_t DataL1LinesPerTag;
uint8_t DataL1Associativity;
uint8_t DataL1SizeKB;
};
uint32_t AMD_DataL1Info;
};
};
extern CPUInfo CPU;
void CheckCPUID (CPUInfo *cpu);
FString DumpCPUInfo (const CPUInfo *cpu, bool brief = false);
#endif