2016-03-01 15:47:10 +00:00
|
|
|
#ifndef X86_H
|
|
|
|
#define X86_H
|
|
|
|
|
|
|
|
#include "basictypes.h"
|
|
|
|
|
|
|
|
struct CPUInfo // 92 bytes
|
|
|
|
{
|
|
|
|
union
|
|
|
|
{
|
|
|
|
char VendorID[16];
|
2017-03-09 18:31:45 +00:00
|
|
|
uint32_t dwVendorID[4];
|
2016-03-01 15:47:10 +00:00
|
|
|
};
|
|
|
|
union
|
|
|
|
{
|
|
|
|
char CPUString[48];
|
2017-03-09 18:31:45 +00:00
|
|
|
uint32_t dwCPUString[12];
|
2016-03-01 15:47:10 +00:00
|
|
|
};
|
|
|
|
|
2017-03-09 18:54:41 +00:00
|
|
|
uint8_t Stepping;
|
|
|
|
uint8_t Model;
|
|
|
|
uint8_t Family;
|
|
|
|
uint8_t Type;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
2017-03-09 18:54:41 +00:00
|
|
|
uint8_t BrandIndex;
|
|
|
|
uint8_t CLFlush;
|
|
|
|
uint8_t CPUCount;
|
|
|
|
uint8_t APICID;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
2017-03-09 18:31:45 +00:00
|
|
|
uint32_t bSSE3:1;
|
|
|
|
uint32_t DontCare1:8;
|
|
|
|
uint32_t bSSSE3:1;
|
|
|
|
uint32_t DontCare1a:9;
|
|
|
|
uint32_t bSSE41:1;
|
|
|
|
uint32_t bSSE42:1;
|
|
|
|
uint32_t DontCare2a:11;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
2017-03-09 18:31:45 +00:00
|
|
|
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 bReserved1: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 bReserved2: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 bReserved3:1;
|
|
|
|
uint32_t bPBE:1;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
2017-03-09 18:31:45 +00:00
|
|
|
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;
|
2016-03-01 15:47:10 +00:00
|
|
|
};
|
2017-03-09 18:31:45 +00:00
|
|
|
uint32_t FeatureFlags[4];
|
2016-03-01 15:47:10 +00:00
|
|
|
};
|
|
|
|
|
2017-03-09 18:54:41 +00:00
|
|
|
uint8_t AMDStepping;
|
|
|
|
uint8_t AMDModel;
|
|
|
|
uint8_t AMDFamily;
|
|
|
|
uint8_t bIsAMD;
|
2016-03-01 15:47:10 +00:00
|
|
|
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
2017-03-09 18:54:41 +00:00
|
|
|
uint8_t DataL1LineSize;
|
|
|
|
uint8_t DataL1LinesPerTag;
|
|
|
|
uint8_t DataL1Associativity;
|
|
|
|
uint8_t DataL1SizeKB;
|
2016-03-01 15:47:10 +00:00
|
|
|
};
|
2017-03-09 18:31:45 +00:00
|
|
|
uint32_t AMD_DataL1Info;
|
2016-03-01 15:47:10 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
extern "C" CPUInfo CPU;
|
|
|
|
struct PalEntry;
|
|
|
|
|
|
|
|
void CheckCPUID (CPUInfo *cpu);
|
|
|
|
void DumpCPUInfo (const CPUInfo *cpu);
|
|
|
|
void DoBlending_SSE2(const PalEntry *from, PalEntry *to, int count, int r, int g, int b, int a);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|