cosmopolitan/libc/nexgen32e/x86info.h

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_ */