Geoff Chappell - Software Analyst
DRAFT: Take more than your usual care.
Executing the cpuid instruction with 1 in eax produces feature flags in edx. These are the original processor features that cpuid can report. Many are so long established that modern versions of Windows will not start without them.
Indeed, 64-bit Windows started with the luxury of requiring most of them up-front. If any of the feature bits marked below with “required” in parentheses is not set when the 64-bit kernel initialises its support for a processor, Windows stops with the bug check UNSUPPORTED_PROCESSOR (0x5D). For 32-bit Windows, requirement of features is not nearly so immediate. Each processor is first evaluated, and not just from this leaf, to build a list of the kernel’s own notion of feature bits such as would be saved as the FeatureBits member of the processor’s KPRCB. The 32-bit kernel’s eventual rejection of a processor is decided from these feature bits, not directly from the cpuid feature flags. Details may eventually follow the table as notes on each feature flag.
Mask | Intel’s Symbolic Name | Versions (x86) | Versions (x64) |
---|---|---|---|
0x00000001 | FPU | all (required) | |
0x00000002 | VME | 3.50 and higher | |
0x00000004 | DE | all (required) | |
0x00000008 | PSE | 4.0 and higher | all (required) |
0x00000010 | TSC | 3.50 and higher | all (required) |
0x00000020 | MSR | all (required) | |
0x00000040 | PAE | all (required) | |
0x00000080 | MCE | 3.50 to 3.51 | all (required) |
0x00000100 | CX8 | 4.0 and higher | all (required) |
0x00000200 | APIC | all (required) | |
0x00000800 | SEP | 5.1 and higher | |
0x00001000 | MTRR | 4.0 and higher | all (required) |
0x00002000 | PGE | 4.0 and higher | all (required) |
0x00004000 | MCA | all (required) | |
0x00008000 | CMOV | 4.0 and higher | all (required) |
0x00010000 | PAT | 5.0 and higher | all (required) |
0x00080000 | CLFSH | 6.0 and higher | all (required) |
0x00200000 | DS | 5.1 and higher | all |
0x00800000 | MMX | 4.0 and higher | all (required) |
0x01000000 | FXSR | 5.0 and higher | all (required) |
0x02000000 | SSE | 5.0 and higher | all (required) |
0x04000000 | SSE2 | 5.1 and higher | all (required) |
0x10000000 | HTT | 5.1 and higher | all |
To be clear, version 3.10 does not test for any cpuid feature flag. Its only interest in cpuid leaf 1 is to get the family, model and stepping from eax. For 64-bit Windows, “all” starts with the version 5.2 from Windows Server 2003 SP1.
AMD’s documentation omits the hyphen. No Windows kernel is known to use this feature.
AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.
AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.
AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.