00001
00009 #ifndef DKUTIL_CSTD_X86_H
00010 #define DKUTIL_CSTD_X86_H
00011
00012 #include "os.h"
00013 #include "define.h"
00014 #include "stdbool.h"
00015
00016 enum edkX86_CPU_type{
00018 edkcCPU_Legacy=0,
00019
00020 edkcCPU_MMX=1,
00021 edkcCPU_MMX2 = 2,
00022 edkcCPU_SSE=4,
00023 edkcCPU_SSE2=8,
00024
00025 edkcCPU_3DNOW=32,
00026 edkcCPU_E3DNOW=64,
00027 edkcCPU_3DNOW_PRO=128,
00028 };
00029
00030 typedef struct dkcstd_CPU_INFO{
00031 char CPUName[256];
00032 char CPUType[128];
00033 unsigned char bFPU;
00034 unsigned char bTSC;
00035 unsigned char bCMOV;
00036 unsigned char bFCMOV;
00037 unsigned char bCPUID;
00038 unsigned char bMMX;
00039 unsigned char bMMX2;
00040 unsigned char bSSE;
00041 unsigned char bSSE2;
00042 unsigned char b3DNOW;
00043 unsigned char bE3DNOW;
00044 long TypeID;
00045 long FamilyID;
00046 long ModelID;
00047 long SteppingID;
00048 long CPUClock;
00049 }DKCSTD_CPU_INFO;
00050
00051 #if 1==DKUTIL_CSTD_MSVC_IASM
00052
00053
00054
00055
00056
00057
00058
00060 DKC_EXTERN int WINAPI dkcstd_IsCPUID();
00061 DKC_EXTERN int WINAPI dkcstd_getCPUID();
00062
00064 DKC_EXTERN uint32 WINAPI dkcstd_getX86CPUType();
00065
00071
00072 DKC_EXTERN BOOL WINAPI dkcstd_getX86CPUInfo(DKCSTD_CPU_INFO *dest,int CPUClockCalcTime);
00073
00075 DKC_EXTERN uint16 WINAPI dkcstd_getFPUMode();
00076
00078 DKC_EXTERN int WINAPI dkcstd_setFPUMode(uint16);
00079
00080 DKC_EXTERN void WINAPI dkcstd_getRDTSC(DKC_UINT64_STRUCT *p);
00081
00082
00083 DKC_INLINE DKC_UINT64_STRUCT dkcstd_getRDTSC_Fast()
00084 {
00085 DKC_UINT64_STRUCT cy;
00086 __asm {
00087 cpuid
00088 rdtsc
00089 mov cy.LowPart, eax
00090 mov cy.HighPart, edx
00091 }
00092 return cy;
00093 }
00094
00095
00096 #endif
00097
00098 #endif //end of include once
00099