IA-32 architecture
CPUID




Before trying to rely upon CPUID, a program must properly detect and sometimes enable the instruction. In particular, the program must detect the presence of a 32bit IA-32 processor, which supports the EFLAGS register. Next, if it is a Cyrix or a NexGen processor, the CPUID instruction may have to be enabled. Then the program must try to toggle the ID bit in the EFLAGS register, to determine whether the instruction is supported or not. Note that the program may face one of the early Intel P5 processors: they do neither return a vendor ID string nor the maximum supported standard level, when level 0000_0000h is queried. Finally, notice that some chips support a partially programmable CPUID instruction -- thanks to those idiot programmers who hard-coded "GenuineIntel" all over the place...



 
standard level 0000_0000h
 
input EAX=0000_0000h get maximum supported standard level and vendor ID string
output EAX=xxxx_xxxxh maximum supported standard level #1
EBX-EDX-ECX vendor ID string #2
GenuineIntel Intel processor
UMC UMC UMC  UMC processor
AuthenticAMD AMD processor
CyrixInstead Cyrix processor
NexGenDriven NexGen processor
CentaurHauls Centaur processor
RiseRiseRise Rise Technology processor
SiS SiS SiS  SiS processor
GenuineTMx86 Transmeta processor
Geode by NSC National Semiconductor processor
notes description
#1 According to [1] and [2] the pre-B0 step Intel P5 processors return EAX=0000_05xxh.
#2 According to [1] and [2] the pre-B0 step Intel P5 processors don't return a vendor ID string.

 
standard level 0000_0001h
 
input EAX=0000_0001h get processor type/family/model/stepping and feature flags
output EAX=xxxx_xxxxh processor type/family/model/stepping
extended family
(add)
The extended processor family is encoded in bits 27...20.
00+F Intel P4
AMD K8
Transmeta Efficeon
01+F AMD K8L
Intel Itanium 2 (IA-64)
02+0 Intel Itanium 2 DC (IA-64)
extended model
(concat)
The extended processor model is encoded in bits 19...16.
AMD K8 0 130 nm Rev C
1 90 nm Rev D
2 90 nm Rev E
4 90 nm Rev F
5 90 nm Rev F
6 65 nm Rev G
7 65 nm Rev G
Intel Core 2 1 65 nm SC with 1 MB on-die L2
1 45 nm DC with 6 MB on-die L2
type The processor type is encoded in bit 13 and bit 12.
11b reserved
10b secondary processor (for MP)
01b Overdrive processor
00b primary processor
family The family is encoded in bits 11...8.
4 most 80486s
AMD 5x86
Cyrix 5x86
5 Intel P5, P54C, P55C, P24T
NexGen Nx586
Cyrix M1
Cyrix MediaGX
Geode
AMD K5, K6
Centaur C6, C2, C3
Rise mP6
SiS 55x
Transmeta Crusoe
6 Intel P6, P2, P3, PM, Core 2
AMD K7
Cyrix M2
VIA C3
7 Intel Itanium (IA-64)
F refer to extended family
0 refer to extended family
model The model is encoded in bits 7...4.
Intel 80486 0 i80486DX-25/33
1 i80486DX-50
2 i80486SX
3 i80486DX2
4 i80486SL
5 i80486SX2
7 i80486DX2WB
8 i80486DX4
9 i80486DX4WB
UMC 80486 1 U5D
2 U5S
AMD 80486 3 80486DX2
7 80486DX2WB
8 80486DX4
9 80486DX4WB
A Elan SC400
E 5x86
F 5x86WB
Cyrix 5x86 9 5x86
Cyrix MediaGX 4 GX, GXm
Intel P5-core 0 P5 A-step
1 P5
2 P54C
3 P24T Overdrive
4 P55C
7 P54C
8 P55C (0.25µm)
NexGen Nx586 0 Nx586 or Nx586FPU (only later ones)
Cyrix M1 2 6x86
Cyrix M2 0 6x86MX
Geode 4 GX1, GXLV, GXm
5 GX2
A LX
AMD K5 0 SSA5 (PR75, PR90, PR100)
1 5k86 (PR120, PR133)
2 5k86 (PR166)
3 5k86 (PR200)
AMD K6 6 K6 (0.30 µm)
7 K6 (0.25 µm)
8 K6-2
9 K6-III
D K6-2+ or K6-III+ (0.18 µm)
Centaur 4 C6
8 C2
9 C3
VIA C3 5 Cyrix M2 core
6 WinChip C5A core
7 WinChip C5B core (if stepping = 0...7)
7 WinChip C5C core (if stepping = 8...F)
8 WinChip C5N core (if stepping = 0...7)
9 WinChip C5XL core (if stepping = 0...7)
9 WinChip C5P core (if stepping = 8...F)
10 WinChip C5J core
Rise 0 mP6 (0.25 µm)
2 mP6 (0.18 µm)
SiS 0 55x
Transmeta Crusoe 4 TM3x00 and TM5x00
Intel P6-core 0 P6 A-step
1 P6
3 P2 (0.28 µm)
5 P2 (0.25 µm)
6 P2 with on-die L2 cache
7 P3 (0.25 µm)
8 P3 (0.18 µm) with 256 KB on-die L2
A P3 (0.18 µm) with 2 MB on-die L2
B P3 (0.13 µm) with 512 KB on-die L2
9 PM (0.13 µm) with 1 MB on-die L2
D PM (0.09 µm) with 2 MB on-die L2
E PM DC (65 nm) with 2 MB on-die L2
F Core 2 DC (65 nm) with 4 MB on-die L2
16 Core 2 SC (65 nm) with 1 MB on-die L2
17 Core 2 DC (45 nm) with 6 MB on-die L2
1C Atom (45 nm) with 512 KB on-die L2
AMD K7 1 Athlon (0.25 µm)
2 Athlon (0.18 µm)
3 Duron (SF core)
4 Athlon (TB core)
6 Athlon (PM core)
7 Duron (MG core)
8 Athlon (TH/AP core)
A Athlon (BT core)
AMD K8 xx00b Socket 754 or Socket S1
xx01b Socket 940 or Socket F1207
xx10b if Rev CG, then see K8 erratum #108
xx11b Socket 939 or Socket AM2
01xxb SH (SC 1024 KB)
11xxb DH (SC 512 KB)
10xxb CH (SC 256 KB)
00xxb JH (DC 1024 KB)
10xxb BH (DC 512 KB)
AMD K8L 0 Rev A (0=A0, 1=A1, 2=A2)
2 Rev B (0=B0, 1=B1, A=BA, 2=B2, 3=B3)
Intel P4-core 0 P4 (0.18 µm)
1 P4 (0.18 µm)
2 P4 (0.13 µm)
3 P4 (0.09 µm)
4 P4 (0.09 µm)
6 P4 (65 nm)
Transmeta Efficeon 2 TM8000 (130 nm)
2 TM8000 (90 nm CMS 6.0)
3 TM8000 (90 nm CMS 6.1+)
Intel Itanium 0 Merced (0.18 µm)
Intel Itanium 2 0 McKinley (0.18 µm)
1 Madison or Deerfield (0.13 µm)
2 Madison 9M (0.13 µm)
Intel Itanium 2 DC 0 Montecito (0.09 µm)
stepping The stepping is encoded in bits 3...0.
The stepping values are processor-specific.
EBX=aall_ccbbh brand ID The brand ID is encoded in bits 7...0.
00h not supported
01h 0.18 µm Intel Celeron
02h 0.18 µm Intel Pentium III
03h 0.18 µm Intel Pentium III Xeon
03h 0.13 µm Intel Celeron
04h 0.13 µm Intel Pentium III
07h 0.13 µm Intel Celeron mobile
06h 0.13 µm Intel Pentium III mobile
0Ah 0.18 µm Intel Celeron 4
08h 0.18 µm Intel Pentium 4
09h 0.13 µm Intel Pentium 4
0Eh 0.18 µm Intel Pentium 4 Xeon
0Bh 0.18 µm Intel Pentium 4 Xeon MP
0Bh 0.13 µm Intel Pentium 4 Xeon
0Ch 0.13 µm Intel Pentium 4 Xeon MP
08h 0.13 µm Intel Celeron 4 mobile (0F24h)
0Fh 0.13 µm Intel Celeron 4 mobile (0F27h)
0Eh 0.13 µm Intel Pentium 4 mobile (production)
0Fh 0.13 µm Intel Pentium 4 mobile (samples)
11h mobile Intel ??? processor
12h 0.13 µm Intel Celeron M
12h 0.09 µm Intel Celeron M
13h mobile Intel Celeron ? processor
14h Intel Celeron ? processor
15h mobile Intel ??? processor
16h 0.13 µm Intel Pentium M
16h 0.09 µm Intel Pentium M
17h mobile Intel Celeron ? processr
AMD see extended level 8000_0001h
with ID=0000_0765_0000_0000b and NN=4_3210b
CLFLUSH The CLFLUSH (8-byte) chunk count is encoded in bits 15...8.
CPU count The logical processor count is encoded in bits 23...16.
APIC ID The (fixed) default APIC ID is encoded in bits 31...24.
ECX=xxxx_xxxxh feature flags description
bits 31...29 reserved
bit 28 (AVX) AVX
bit 27 (OSXSAVE) non-privileged read-only copy of current CR4.OSXSAVE value
bit 26 (XSAVE) CR4.OSXSAVE, XCRn, XGETBV, XSETBV, XSAVE, XRSTOR
also see standard level 0000_000Dh
bit 25 (AES) AES*
bit 24 reserved
bit 23 (POPCNT) POPCNT
bit 22 (MOVBE) MOVBE
bit 21 (x2APIC) x2APIC, APIC_BASE.EXTD, MSRs 0000_0800h...0000_0BFFh
64-bit ICR (+030h but not +031h), no DFR (+00Eh), SELF_IPI (+040h)
also see standard level 0000_000Bh
bit 20 (SSE4.2) SSE4.2
bit 19 (SSE4.1) SSE4.1, MXCSR, CR4.OSXMMEXCPT, #XF
bit 18 (DCA) Direct Cache Access (that is, the ability to prefetch data from MMIO)
also see standard level 0000_0009h
bit 17 reserved
bit 16 reserved
bit 15 (PDCM) Performance Debug Capability MSR
bit 14 (ETPRD) MISC_ENABLE.ETPRD
bit 13 (CX16) CMPXCHG16B
bit 12 (FMA) FMA
bit 11 reserved
bit 10 (CID) context ID: the L1 data cache can be set to adaptive or shared mode
MISC_ENABLE.L1DCCM
bit 9 (SSSE3) SSSE3
bit 8 (TM2) MISC_ENABLE.TM2E
THERM_INTERRUPT and THERM_STATUS MSRs
xAPIC thermal LVT entry
THERM2_CONTROL MSR
bit 7 (EST) Enhanced SpeedStep Technology
bit 6 (SMX) CR4.SMXE, GETSEC
bit 5 (VMX) CR4.VMXE, VM* and VM*
bit 4 (DSCPL) CPL-qualified Debug Store
bit 3 (MON) MONITOR/MWAIT, MISC_ENABLE.MONE, MISC_ENABLE.LCMV
MONITOR_FILTER_LINE_SIZE MSR
also see standard level 0000_0005h
setting MISC_ENABLE.MONE=0 causes MON=0
bit 2 (DTES64) 64-bit Debug Trace and EMON Store MSRs
bit 1 (PCLMUL) PCLMULQDQ
bit 0 (SSE3) SSE3, MXCSR, CR4.OSXMMEXCPT, #XF, if FPU=1 then also FISTTP
EDX=xxxx_xxxxh feature flags description
bit 31 (PBE) Pending Break Event, STPCLK, FERR#, MISC_ENABLE.PBE
bit 30 (IA-64) IA-64, JMPE Jv, JMPE Ev
bit 29 (TM1) MISC_ENABLE.TM1E
THERM_INTERRUPT and THERM_STATUS MSRs
xAPIC thermal LVT entry
bit 28 (HTT) Hyper-Threading Technology, PAUSE
bit 27 (SS) selfsnoop
bit 26 (SSE2) SSE2, MXCSR, CR4.OSXMMEXCPT, #XF
bit 25 (SSE) SSE, MXCSR, CR4.OSXMMEXCPT, #XF
bit 24 (FXSR) FXSAVE/FXRSTOR, CR4.OSFXSR
bit 23 (MMX) MMX
bit 22 (ACPI) THERM_CONTROL MSR
bit 21 (DTES) Debug Trace and EMON Store MSRs
bit 20 reserved
bit 19 (CLFL) CLFLUSH
bit 18 (PSN) PSN (see standard level 0000_0003h), MISC_CTL.PSND #1
bit 17 (PSE36) 4 MB PDE bits 16...13, CR4.PSE
bit 16 (PAT) PAT MSR, PDE/PTE.PAT
bit 15 (CMOV) CMOVcc, if FPU=1 then also FCMOVcc/F(U)COMI(P)
bit 14 (MCA) MCG_*/MCn_* MSRs, CR4.MCE, #MC
bit 13 (PGE) PDE/PTE.G, CR4.PGE
bit 12 (MTRR) MTRR* MSRs
bit 11 (SEP) SYSENTER/SYSEXIT, SEP_* MSRs #2
bit 10 reserved
bit 9 (APIC) APIC #3, #4
bit 8 (CX8) CMPXCHG8B #5
bit 7 (MCE) MCAR/MCTR MSRs, CR4.MCE, #MC
bit 6 (PAE) 64bit PDPTE/PDE/PTEs, CR4.PAE
bit 5 (MSR) MSRs, RDMSR/WRMSR
bit 4 (TSC) TSC, RDTSC, CR4.TSD (doesn't imply MSR=1)
bit 3 (PSE) PDE.PS, PDE/PTE.res, CR4.PSE, #PF(1xxxb)
bit 2 (DE) CR4.DE, DR7.RW=10b, #UD on MOV from/to DR4/5
bit 1 (VME) CR4.VME/PVI, EFLAGS.VIP/VIF, TSS32.IRB
bit 0 (FPU) FPU
notes description
#1 If the PSN has been disabled, then the PSN feature flag will read as 0. In addition the value for the maximum supported standard level (reported by standard level 0000_0000h, register EAX) will be lower.
#2 The Intel P6 processor does not support SEP, but inadvertently reports it.
#3 If the APIC has been disabled, then the APIC feature flag will read as 0.
#4 Early AMD K5 processors (SSA5) inadvertently used this bit to report PGE support.
#5 Some processors do support CMPXCHG8B, but don't report it by default. This is due to a Windows NT bug.

 
standard level 0000_0002h
 
input EAX=0000_0002h get processor configuration descriptors
output AL number of times this level must be queried to obtain all configuration descriptors #1
EAX.15...8
EAX.23...16
EAX.31...24
EBX.0...7
EBX.15...8
EBX.23...16
EBX.31...24
ECX.0...7
ECX.15...8
ECX.23...16
ECX.31...24
EDX.0...7
EDX.15...8
EDX.23...16
EDX.31...24
configuration descriptors #2
value description
00h null descriptor (=unused descriptor)
01h code TLB, 4K pages, 4 ways, 32 entries
02h code TLB, 4M pages, fully, 2 entries
03h data TLB, 4K pages, 4 ways, 64 entries
04h data TLB, 4M pages, 4 ways, 8 entries
05h data TLB, 4M pages, 4 ways, 32 entries
06h code L1 cache, 8 KB, 4 ways, 32 byte lines
08h code L1 cache, 16 KB, 4 ways, 32 byte lines
0Ah data L1 cache, 8 KB, 2 ways, 32 byte lines
0Bh code TLB, 4M pages, 4 ways, 4 entries
0Ch data L1 cache, 16 KB, 4 ways, 32 byte lines
0Eh data L1 cache, 24 KB, 6 ways, 64 byte lines
10h data L1 cache, 16 KB, 4 ways, 32 byte lines (IA-64)
15h code L1 cache, 16 KB, 4 ways, 32 byte lines (IA-64)
1Ah code and data L2 cache, 96 KB, 6 ways, 64 byte lines (IA-64)
22h code and data L3 cache, 512 KB, 4 ways (!), 64 byte lines, dual-sectored
23h code and data L3 cache, 1024 KB, 8 ways, 64 byte lines, dual-sectored
25h code and data L3 cache, 2048 KB, 8 ways, 64 byte lines, dual-sectored
29h code and data L3 cache, 4096 KB, 8 ways, 64 byte lines, dual-sectored
2Ch data L1 cache, 32 KB, 8 ways, 64 byte lines
30h code L1 cache, 32 KB, 8 ways, 64 byte lines
39h code and data L2 cache, 128 KB, 4 ways, 64 byte lines, sectored
3Ah code and data L2 cache, 192 KB, 6 ways, 64 byte lines, sectored
3Bh code and data L2 cache, 128 KB, 2 ways, 64 byte lines, sectored
3Ch code and data L2 cache, 256 KB, 4 ways, 64 byte lines, sectored
3Dh code and data L2 cache, 384 KB, 6 ways, 64 byte lines, sectored
3Eh code and data L2 cache, 512 KB, 4 ways, 64 byte lines, sectored
40h no integrated L2 cache (P6 core) or L3 cache (P4 core)
41h code and data L2 cache, 128 KB, 4 ways, 32 byte lines
42h code and data L2 cache, 256 KB, 4 ways, 32 byte lines
43h code and data L2 cache, 512 KB, 4 ways, 32 byte lines
44h code and data L2 cache, 1024 KB, 4 ways, 32 byte lines
45h code and data L2 cache, 2048 KB, 4 ways, 32 byte lines
46h code and data L3 cache, 4096 KB, 4 ways, 64 byte lines
47h code and data L3 cache, 8192 KB, 8 ways, 64 byte lines
48h code and data L2 cache, 3072 KB, 12 ways, 64 byte lines
49h code and data L3 cache, 4096 KB, 16 ways, 64 byte lines (P4) or
code and data L2 cache, 4096 KB, 16 ways, 64 byte lines (Core 2)
4Ah code and data L3 cache, 6144 KB, 12 ways, 64 byte lines
4Bh code and data L3 cache, 8192 KB, 16 ways, 64 byte lines
4Ch code and data L3 cache, 12288 KB, 12 ways, 64 byte lines
4Dh code and data L3 cache, 16384 KB, 16 ways, 64 byte lines
4Eh code and data L2 cache, 6144 KB, 24 ways, 64 byte lines
4Fh code TLB, 4K pages, ???, 32 entries
50h code TLB, 4K/4M/2M pages, fully, 64 entries
51h code TLB, 4K/4M/2M pages, fully, 128 entries
52h code TLB, 4K/4M/2M pages, fully, 256 entries
56h L0 data TLB, 4M pages, 4 ways, 16 entries
57h L0 data TLB, 4K pages, 4 ways, 16 entries
59h L0 data TLB, 4K pages, fully, 16 entries
5Bh data TLB, 4K/4M pages, fully, 64 entries
5Ch data TLB, 4K/4M pages, fully, 128 entries
5Dh data TLB, 4K/4M pages, fully, 256 entries
60h data L1 cache, 16 KB, 8 ways, 64 byte lines, sectored
66h data L1 cache, 8 KB, 4 ways, 64 byte lines, sectored
67h data L1 cache, 16 KB, 4 ways, 64 byte lines, sectored
68h data L1 cache, 32 KB, 4 ways, 64 byte lines, sectored
70h trace L1 cache, 12 KµOPs, 8 ways
71h trace L1 cache, 16 KµOPs, 8 ways
72h trace L1 cache, 32 KµOPs, 8 ways
73h trace L1 cache, 64 KµOPs, 8 ways
77h code L1 cache, 16 KB, 4 ways, 64 byte lines, sectored (IA-64)
78h code and data L2 cache, 1024 KB, 4 ways, 64 byte lines
79h code and data L2 cache, 128 KB, 8 ways, 64 byte lines, dual-sectored
7Ah code and data L2 cache, 256 KB, 8 ways, 64 byte lines, dual-sectored
7Bh code and data L2 cache, 512 KB, 8 ways, 64 byte lines, dual-sectored
7Ch code and data L2 cache, 1024 KB, 8 ways, 64 byte lines, dual-sectored
7Dh code and data L2 cache, 2048 KB, 8 ways, 64 byte lines
7Eh code and data L2 cache, 256 KB, 8 ways, 128 byte lines, sect. (IA-64)
7Fh code and data L2 cache, 512 KB, 2 ways, 64 byte lines
80h code and data L2 cache, 512 KB, 8 ways, 64 byte lines
81h code and data L2 cache, 128 KB, 8 ways, 32 byte lines
82h code and data L2 cache, 256 KB, 8 ways, 32 byte lines
83h code and data L2 cache, 512 KB, 8 ways, 32 byte lines
84h code and data L2 cache, 1024 KB, 8 ways, 32 byte lines
85h code and data L2 cache, 2048 KB, 8 ways, 32 byte lines
86h code and data L2 cache, 512 KB, 4 ways, 64 byte lines
87h code and data L2 cache, 1024 KB, 8 ways, 64 byte lines
88h code and data L3 cache, 2048 KB, 4 ways, 64 byte lines (IA-64)
89h code and data L3 cache, 4096 KB, 4 ways, 64 byte lines (IA-64)
8Ah code and data L3 cache, 8192 KB, 4 ways, 64 byte lines (IA-64)
8Dh code and data L3 cache, 3072 KB, 12 ways, 128 byte lines (IA-64)
90h code TLB, 4K...256M pages, fully, 64 entries (IA-64)
96h data L1 TLB, 4K...256M pages, fully, 32 entries (IA-64)
9Bh data L2 TLB, 4K...256M pages, fully, 96 entries (IA-64)
B0h code TLB, 4K pages, 4 ways, 128 entries
B1h code TLB, 4M pages, 4 ways, 4 entries and
code TLB, 2M pages, 4 ways, 8 entries
B3h data TLB, 4K pages, 4 ways, 128 entries
B4h data TLB, 4K pages, 4 ways, 256 entries
BAh data TLB, 4K pages, 4 ways, 64 entries
C0h data TLB, 4K/4M pages, 4 ways, 8 entries
F0h 64 byte prefetching
F1h 128 byte prefetching
value description
70h Cyrix specific: code and data TLB, 4K pages, 4 ways, 32 entries
74h Cyrix specific: ???
77h Cyrix specific: ???
80h Cyrix specific: code and data L1 cache, 16 KB, 4 ways, 16 byte lines
82h Cyrix specific: ???
84h Cyrix specific: ???
value description
others reserved
example
(here: P6)
EAX=0302_0101h
EBX=0000_0000h
ECX=0000_0000h
EDX=0604_0A43h
Because AL is 01h, one invocation of the level is enough to obtain all the configuration descriptors. All of them are valid because their highest bits are 0. This P6 processor includes a 4K/M code/data TLB, an 8+8 KB code/data L1 cache and an integrated 512 KB code and data L2 cache.
notes description
#1 In a MP system special precautions must be taken when executing standard level 0000_0002h more than once. In particular it must be ensured that the same CPU is used during that entire process.
#2 Programs must no expect any particular order for the reported configuration descriptors.

 
standard level 0000_0003h
 
input EAX=0000_0003h get processor serial number #1
output EAX=xxxx_xxxxh processor serial number (Transmeta Efficeon processors only)
EBX=xxxx_xxxxh processor serial number (Transmeta Crusoe and Efficeon processors only)
ECX=xxxx_xxxxh processor serial number
EDX=xxxx_xxxxh processor serial number
note description
#1 This level is only supported and enabled if the PSN feature flag is set. The reported processor serial number should be combined with the vendor ID string and the processor type/family/model/stepping value, to distinguish cases in which two processors from different vendors happen to have the same serial number. Finally, it should be noted that most vendors can not guarantee that their serial numbers are truely unique.

 
standard level 0000_0004h
 
input EAX=0000_0004h get cache configuration descriptors #1
ECX=xxxx_xxxxh cache level to query (e.g. 0=L1D, 1=L2, or 0=L1D, 1=L1I, 2=L2)
output EAX bits description
31...26 cores per package - 1
25...14 threads per cache - 1
13...10 reserved
9 fully associative?
8 self-initializing?
7...5 cache level (starts at 1)
4...0 cache type (0=null, 1=data, 2=code, 3=unified, 4...31=reserved)
EBX bits description
31...22 ways of associativity - 1
21...12 physical line partitions - 1
11...0 system coherency line size - 1
ECX bits description
31...0 sets - 1
EDX bits description
31...10 reserved
1 inclusive of lower levels?
0 write-back invalidate?
notes description
#1 This level is only enabled if MISC_ENABLE.LCMV is set to 0. This is due to a Windows NT bug.

 
standard level 0000_0005h
 
input EAX=0000_0005h get MON information #1
output EAX bits description
31...16 reserved
15...0 smallest monitor line size in bytes
EBX bits description
31...16 reserved
15...0 largest monitor line size in bytes
ECX bits description
31...2 reserved
1 treat interrupts as break events, even when interrupts are disabled
0 enumeration of MWAIT extensions (beyond EAX and EBX)
EDX bits description
31...20 reserved
19...16 number of C4 sub C-states for MWAIT
15...12 number of C3 sub C-states for MWAIT
11...8 number of C2 sub C-states for MWAIT
7...4 number of C1 sub C-states for MWAIT
3...0 number of C0 sub C-states for MWAIT
notes description
#1 This level is only enabled if MISC_ENABLE.LCMV is set to 0. This is due to a Windows NT bug.

 
standard level 0000_0006h
 
input EAX=0000_0006h get power management information #1
output EAX bits description
31...3 reserved
2 operating point protection (protect CPU's ratio/VID points) #2
1 dynamic acceleration enabled (MISC.ENABLE.DAD=0)
0 digital thermometer
EBX bits description
31...4 reserved
3...0 number of programmable digital thermometer interrupt thresholds
ECX bits description
31...1 reserved
0 ACNT/MCNT
notes description
#1 This level is only enabled if MISC_ENABLE.LCMV is set to 0. This is due to a Windows NT bug.
#2 The implementation of OPP is processor and stepping specific.
On certain Pentium 4 processors, the protection mechanism is Snap-to-VID and it is enabled if the bit is set.

 
standard level 0000_0009h
 
input EAX=0000_0009h get DCA parameters #1
output EAX bits description
31...0 value of PLATFORM_DCA_CAP MSR (0000_01F8h, bits 31...0)
notes description
#1 This level is only enabled if MISC_ENABLE.LCMV is set to 0. This is due to a Windows NT bug.

 
standard level 0000_000Ah
 
input EAX=0000_000Ah get architectural PeMo information #1
output EAX bits description
31...24 length of EBX bit vector
23...16 bit width of PeMo counter(s)
15...8 number of PeMo counters per logical processor
7...0 revision
EBX bits description
31...7 reserved
6 branch mispredicts retired event unavailable
5 branch instructions retired event unavailable
4 last level cache misses event unavailable
3 last level cache references event unavailable
2 reference cycles event unavailable
1 instructions retired event unavailable
0 core cycles event unavailable
EDX bits description
31...13 reserved
12...5 bit width of fixed-function PeMo counters (if revision > 1)
4...0 number of fixed-function PeMo counters (if revision > 1)
notes description
#1 This level is only enabled if MISC_ENABLE.LCMV is set to 0. This is due to a Windows NT bug.

 
standard level 0000_000Bh
 
input EAX=0000_000Bh get topology enumeration information #1
ECX=0000_00xxh level to query (00h=SMT)
output EAX bits description
31...5 reserved
4...0 number of bits to shift x2APIC ID right to get unique topology ID of next level type
all logical processors with same next level ID share current level
EBX bits description
31...16 reserved
15...0 number of enabled logical processors at this level
ECX bits description
31...16 reserved
15...8 level type (00h=invalid, 01h=SMT, 02h=core, 03h...FFh=reserved
7...0 level number (same as input)
EDX bits description
31...0 x2APIC ID of current logical processor
notes description
#1 This level is only enabled if MISC_ENABLE.LCMV is set to 0. This is due to a Windows NT bug.

 
standard level 0000_000Dh
 
input EAX=0000_000Dh get extended state enumeration #1
ECX=0000_00xxh level to query (0=main, 1=reserved, 2...62=sub as per XCR0.n)
output
(main)
EAX bits description
31...0 valid XCR0.31...0 bits
EBX bits description
31...0 current size (in bytes) of XSAVE/XRSTOR area (as per current XCR0)
ECX bits description
31...0 max. size (in bytes) of XSAVE/XRSTOR area (incl. XSAVE.HEADER)
EDX bits description
31...0 valid XCR0.63...32 bits
output
(res.)
EAX bits description
31...0 reserved
EBX bits description
31...0 reserved
ECX bits description
31...0 reserved
EDX bits description
31...0 reserved
output
(sub)
EAX bits description
31...0 size (in bytes) in XSAVE/XRSTOR area for XCR0.n (n=ECX=2...62)
0 if n was invalid
EBX bits description
31...0 offset (in bytes) in XSAVE/XRSTOR area for XCR0.n (n=ECX=2...62)
0 if n was invalid
ECX bits description
31...0 reserved
0 if n was invalid
EDX bits description
31...0 reserved
0 if n was invalid
notes description
#1 This level is only enabled if MISC_ENABLE.LCMV is set to 0. This is due to a Windows NT bug.



 
extended level 8000_0000h
 
input EAX=8000_0000h get maximum supported extended level and vendor ID string
output EAX=xxxx_xxxxh maximum supported extended level
EBX-EDX-ECX vendor ID string
AuthenticAMD AMD processor
reserved Cyrix processor
reserved Centaur processor
reserved Intel processor
TransmetaCPU Transmeta processor
reserved National Semiconductor processor (GX1, GXLV, GXm)
Geode by NSC National Semiconductor processor (GX2)

 
extended level 8000_0001h
 
input EAX=8000_0001h get processor family/model/stepping and features flags
output EAX=xxxx_xxxxh processor family/model/stepping
extended family
(add)
The extended processor family is encoded in bits 27...20.
00+F AMD K8
Transmeta Efficeon
01+F AMD K8L
extended model
(concat)
The extended processor model is encoded in bits 19...16.
AMD K8 0 130 nm Rev C
1 90 nm Rev D
2 90 nm Rev E
4 90 nm Rev F
5 90 nm Rev F
6 65 nm Rev G
7 65 nm Rev G
family The family is encoded in bits 11...8.
5 AMD K5
Geode
Centaur C2 and C3
Transmeta Crusoe
6 AMD K6
VIA C3
7 AMD K7
F refer to extended family
model The model is encoded in bits 7...4.
AMD K5 1 5k86 (PR120 or PR133)
2 5k86 (PR166)
3 5k86 (PR200)
AMD K6 6 K6 (0.30 µm)
7 K6 (0.25 µm)
8 K6-2
9 K6-III
D K6-2+ or K6-III+ (0.18 µm)
AMD K7 1 Athlon (0.25 µm)
2 Athlon (0.18 µm)
3 Duron (SF core)
4 Athlon (TB core)
6 Athlon (PM core)
7 Duron (MG core)
8 Athlon (TH/AP core)
A Athlon (BT core)
AMD K8 xx00b Socket 754 or Socket S1
xx01b Socket 940 or Socket F1207
xx10b if Rev CG, then see K8 erratum #108
xx11b Socket 939 or Socket AM2
01xxb SH (SC 1024 KB)
11xxb DH (SC 512 KB)
10xxb CH (SC 256 KB)
00xxb JH (DC 1024 KB)
10xxb BH (DC 512 KB)
AMD K8L 0 Rev A (0=A0, 1=A1, 2=A2)
2 Rev B (0=B0, 1=B1, A=BA, 2=B2, 3=B3)
Geode 4 GX1, GXLV, GXm
5 GX2
5 LX
Centaur 8 C2
9 C3
VIA C3 5 Cyrix M2 core
6 WinChip C5A core
7 WinChip C5B core (if stepping = 0...7)
7 WinChip C5C core (if stepping = 8...F)
8 WinChip C5N core (if stepping = 0...7)
9 WinChip C5XL core (if stepping = 0...7)
9 WinChip C5P core (if stepping = 8...F)
10 WinChip C5J core
Transmeta Crusoe 4 TM3x00 and TM5x00
Transmeta Efficeon 2 TM8000 (130 nm)
2 TM8000 (90 nm CMS 6.0)
3 TM8000 (90 nm CMS 6.1+)
stepping The stepping is encoded in bits 3...0.
The stepping values are processor-specific.
EBX=x000_xxxxh package type The package type is encoded in bits 31...28.
AMD K8L 0000b Socket F1207
0001b Socket AM2
0011b Socket G3
other reserved
brand ID The brand ID is encoded in bits 15...0.
AMD K8 DDR1 ID = bits 15...6 = (value >> 6) & 3FFh
NN = bits 5...0 = value & 3Fh
 
for NN=1...63: XX = 22 + NN
for NN=1...30: YY = 38 + (2 * NN)
for NN=1...63: ZZ = 24 + NN
for NN=1...63: TT = 24 + NN
for NN=1...11: RR = 45 + (5 * NN)
for NN=1...31: EE = 9 + NN
00h engineering sample
04h AMD Athlon 64 XX00+
05h AMD Athlon 64 X2 XX00+
08h AMD Athlon 64 XX00+ mobile
09h AMD Athlon 64 XX00+ mobile, low power
0Ah AMD Turion 64 ML-XX
0Bh AMD Turion 64 MT-XX
0Ch AMD Opteron 1YY
0Dh AMD Opteron 1YY
0Eh AMD Opteron 1YY HE
0Fh AMD Opteron 1YY EE
10h AMD Opteron 2YY
11h AMD Opteron 2YY
12h AMD Opteron 2YY HE
13h AMD Opteron 2YY EE
14h AMD Opteron 8YY
15h AMD Opteron 8YY
16h AMD Opteron 8YY HE
17h AMD Opteron 8YY EE
18h AMD Athlon 64 EE00+
1Dh AMD Athlon XP-M XX00+ mobile
1Eh AMD Athlon XP-M XX00+ mobile, low power
20h AMD Athlon XP XX00+
21h AMD Sempron TT00+ mobile, 32-bit
23h AMD Sempron TT00+ mobile, 32-bit, low power
22h AMD Sempron TT00+, 32-bit
26h AMD Sempron TT00+, 64-bit
24h AMD Athlon 64 FX-ZZ
29h AMD Opteron DC 1RR SE
2Ah AMD Opteron DC 2RR SE
2Bh AMD Opteron DC 8RR SE
2Ch AMD Opteron DC 1RR
2Dh AMD Opteron DC 1RR
2Eh AMD Opteron DC 1RR HE
2Fh AMD Opteron DC 1RR EE
30h AMD Opteron DC 2RR
31h AMD Opteron DC 2RR
32h AMD Opteron DC 2RR HE
33h AMD Opteron DC 2RR EE
34h AMD Opteron DC 8RR
35h AMD Opteron DC 8RR
36h AMD Opteron DC 8RR HE
37h AMD Opteron DC 8RR EE
38h AMD Opteron DC 1RR
39h AMD Opteron DC 2RR
3Ah AMD Opteron DC 8RR
other unknown
AMD K8 DDR2 S = socket (see CPUID model bits 1...0)
CC = core count - 1 (see NB capabilities register)
ID = bits 13...9
PL = bits 8...6 and 14
NN = bits 15 and 5...0
 
RR = -1 + NN*
PP = 26 + NN
TT = 15 + (CC * 10) + NN
ZZ = 57 + NN
YY = 29 + NN
* 000001b...000010b/100010b...111111b = 1...2/34...63 are reserved
S=any CC=? ID=00h PL=0h engineering sample
S=AM2 CC=0 ID=06h PL=4h AMD Sempron TT00+
S=AM2 CC=0 ID=06h PL=8h AMD Sempron TT00+
S=AM2 CC=0 ID=04h PL=4h AMD Athlon 64 TT00+
S=AM2 CC=0 ID=04h PL=8h AMD Athlon 64 TT00+
S=AM2 CC=1 ID=04h PL=2h AMD Athlon 64 X2 TT00+
S=AM2 CC=1 ID=04h PL=6h AMD Athlon 64 X2 TT00+
S=AM2 CC=1 ID=04h PL=8h AMD Athlon 64 X2 TT00+
S=AM2 CC=1 ID=05h PL=Ch AMD Athlon 64 DC FX-ZZ
S=S1 CC=1 ID=02h PL=Ch AMD Turion 64 X2 TL-YY
S=AM2 CC=1 ID=01h PL=Ah AMD Opteron DC 12RR
S=AM2 CC=1 ID=01h PL=Ch AMD Opteron DC 12RR SE
S=F1207 CC=1 ID=01h PL=6h AMD Opteron DC 22RR HE
S=F1207 CC=1 ID=01h PL=Ah AMD Opteron DC 22RR
S=F1207 CC=1 ID=01h PL=Ch AMD Opteron DC 22RR SE
S=F1207 CC=1 ID=04h PL=6h AMD Opteron DC 82RR HE
S=F1207 CC=1 ID=04h PL=Ah AMD Opteron DC 82RR
S=F1207 CC=1 ID=04h PL=Ch AMD Opteron DC 82RR SE
AMD K8L PT = package type (se EBX bits 31...28)
NC = number of cores (see level 8000_0008h)
 
PG = bit 15
S1 = bits 14...11
M = bits 10...4
S2 = bits 3...0
M=0 PG=0 engineering sample
M=0 PG=1 thermal testing kit
PT=0 PG=0 NC=1 S1=0h AMD Opteron DC 83
PT=0 PG=0 NC=1 S1=1h AMD Opteron DC 23
PT=0 PG=0 NC=3 S1=0h AMD Opteron QC 83
PT=0 PG=0 NC=3 S1=1h AMD Opteron QC 23
PT=0 PG=0 NC=3 S1=2h embedded AMD Opteron QC 83
PT=0 PG=0 NC=3 S1=3h embedded AMD Opteron QC 23
PT=0 PG=0 NC=3 S1=4h embedded AMD Opteron QC 13
PT=0 PG=0 NC=x S2=Ah  SE
PT=0 PG=0 NC=x S2=Bh  HE
PT=0 PG=0 NC=x S2=Ch  EE
PT=0 PG=0 NC=x S2=Fh (empty)
PT=1 PG=0 NC=3 S1=2h AMD Phenom
PT=1 PG=0 NC=3 S2=0h 00 QC
PT=1 PG=0 NC=3 S2=2h 00B QC
PT=1 PG=0 NC=3 S2=Dh  QC
PT=1 PG=0 NC=x S2=Fh (empty)
ECX=xxxx_xxxxh feature flags description of indicated feature
bits 31...14 reserved
bit 13 (WDT) watchdog timer
bit 12 (SKINIT) SKINIT, STGI, DEV
bit 11 (SSE5A) SSE5A, MXCSR, CR4.OSXMMEXCPT, #XF
bit 10 (IBS) instruction based sampling
bit 9 (OSVW) OS-visible workaround
bit 8 (3DNow!-) PREFETCH and PREFETCHW (K8 Rev G and K8L)
bit 7 (MSSE) misaligned SSE, MXCSR.MM