68 lines
2.2 KiB
C
68 lines
2.2 KiB
C
#ifndef COSMOPOLITAN_LIBC_NEXGEN32E_X86INFO_H_
|
|
#define COSMOPOLITAN_LIBC_NEXGEN32E_X86INFO_H_
|
|
#include "libc/nexgen32e/kcpuids.h"
|
|
|
|
#define kX86CpuStepping ((KCPUIDS(1H, EAX) >> 0) & 0b1111)
|
|
#define kX86CpuModelid ((KCPUIDS(1H, EAX) >> 4) & 0b1111)
|
|
#define kX86CpuFamilyid ((KCPUIDS(1H, EAX) >> 8) & 0b1111)
|
|
#define kX86CpuType ((KCPUIDS(1H, EAX) >> 12) & 0b11)
|
|
#define kX86CpuExtmodelid ((KCPUIDS(1H, EAX) >> 16) & 0b1111)
|
|
#define kX86CpuExtfamilyid ((KCPUIDS(1H, EAX) >> 20) & 0b11111111)
|
|
|
|
#define kX86CpuFamily \
|
|
(kX86CpuFamilyid + (kX86CpuFamily == 15 ? kX86CpuExtfamilyid : 0))
|
|
|
|
#define kX86CpuModel \
|
|
(kX86CpuModelid | \
|
|
(kX86CpuFamily == 6 || kX86CpuFamily == 15 ? kX86CpuExtmodelid : 0) << 4)
|
|
|
|
#define kX86ProcessorModelKey \
|
|
(kX86CpuExtfamilyid << 12 | kX86CpuFamilyid << 8 | kX86CpuExtmodelid << 4 | \
|
|
kX86CpuModelid)
|
|
|
|
#define X86_MARCH_UNKNOWN 0
|
|
#define X86_MARCH_CORE2 1
|
|
#define X86_MARCH_NEHALEM 2
|
|
#define X86_MARCH_WESTMERE 3
|
|
#define X86_MARCH_SANDYBRIDGE 4
|
|
#define X86_MARCH_IVYBRIDGE 5
|
|
#define X86_MARCH_HASWELL 6
|
|
#define X86_MARCH_BROADWELL 7
|
|
#define X86_MARCH_SKYLAKE 8
|
|
#define X86_MARCH_KABYLAKE 9
|
|
#define X86_MARCH_CANNONLAKE 10
|
|
#define X86_MARCH_ICELAKE 11
|
|
#define X86_MARCH_TIGERLAKE 12
|
|
#define X86_MARCH_BONNELL 13
|
|
#define X86_MARCH_SALTWELL 14
|
|
#define X86_MARCH_SILVERMONT 15
|
|
#define X86_MARCH_AIRMONT 16
|
|
#define X86_MARCH_GOLDMONT 17
|
|
#define X86_MARCH_GOLDMONTPLUS 18
|
|
#define X86_MARCH_TREMONT 19
|
|
#define X86_MARCH_KNIGHTSLANDING 20
|
|
#define X86_MARCH_KNIGHTSMILL 21
|
|
|
|
#define X86_GRADE_UNKNOWN 0
|
|
#define X86_GRADE_APPLIANCE 1
|
|
#define X86_GRADE_MOBILE 2
|
|
#define X86_GRADE_TABLET 3
|
|
#define X86_GRADE_DESKTOP 4
|
|
#define X86_GRADE_CLIENT 5
|
|
#define X86_GRADE_DENSITY 6
|
|
#define X86_GRADE_SERVER 7
|
|
#define X86_GRADE_SCIENCE 8
|
|
|
|
struct X86ProcessorModel {
|
|
short key;
|
|
unsigned char march;
|
|
unsigned char grade;
|
|
};
|
|
|
|
extern const size_t kX86ProcessorModelCount;
|
|
extern const struct X86ProcessorModel kX86ProcessorModels[];
|
|
|
|
const struct X86ProcessorModel *getx86processormodel(short) nosideeffect;
|
|
|
|
#endif /* COSMOPOLITAN_LIBC_NEXGEN32E_X86INFO_H_ */
|