qzdoom/src/x86.h

112 lines
1.7 KiB
C
Raw Normal View History

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];
uint32 dwVendorID[4];
};
union
{
char CPUString[48];
uint32 dwCPUString[12];
};
BYTE Stepping;
BYTE Model;
BYTE Family;
BYTE Type;
union
{
struct
{
BYTE BrandIndex;
BYTE CLFlush;
BYTE CPUCount;
BYTE APICID;
uint32 bSSE3:1;
uint32 DontCare1:8;
uint32 bSSSE3:1;
uint32 DontCare1a:9;
uint32 bSSE41:1;
uint32 bSSE42:1;
uint32 DontCare2a:11;
uint32 bFPU:1;
uint32 bVME:1;
uint32 bDE:1;
uint32 bPSE:1;
uint32 bRDTSC:1;
uint32 bMSR:1;
uint32 bPAE:1;
uint32 bMCE:1;
uint32 bCX8:1;
uint32 bAPIC:1;
uint32 bReserved1:1;
uint32 bSEP:1;
uint32 bMTRR:1;
uint32 bPGE:1;
uint32 bMCA:1;
uint32 bCMOV:1;
uint32 bPAT:1;
uint32 bPSE36:1;
uint32 bPSN:1;
uint32 bCFLUSH:1;
uint32 bReserved2:1;
uint32 bDS:1;
uint32 bACPI:1;
uint32 bMMX:1;
uint32 bFXSR:1;
uint32 bSSE:1;
uint32 bSSE2:1;
uint32 bSS:1;
uint32 bHTT:1;
uint32 bTM:1;
uint32 bReserved3:1;
uint32 bPBE:1;
uint32 DontCare2:22;
uint32 bMMXPlus:1; // AMD's MMX extensions
uint32 bMMXAgain:1; // Just a copy of bMMX above
uint32 DontCare3:6;
uint32 b3DNowPlus:1;
uint32 b3DNow:1;
};
uint32 FeatureFlags[4];
};
BYTE AMDStepping;
BYTE AMDModel;
BYTE AMDFamily;
BYTE bIsAMD;
union
{
struct
{
BYTE DataL1LineSize;
BYTE DataL1LinesPerTag;
BYTE DataL1Associativity;
BYTE DataL1SizeKB;
};
uint32 AMD_DataL1Info;
};
};
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