DRAFT: Take more than your usual care.

EDX From CPUID Leaf 1

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.

PSE-36 (Bit 17)

AMD’s documentation omits the hyphen. No Windows kernel is known to use this feature.

PSN (Bit 18)

AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.

ACPI (Bit 22)

AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.

SS (Bit 27)

AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.

TM (Bit 29)

AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.

IA64 (Bit 30)

AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.

PBE (Bit 31)

AMD’s documentation has this bit as reserved. No Windows kernel is known to use this feature.