cpuid [--ext] [--ecx] <bit number>
cpuid --ext 29 && set arch x86_64 || set arch i386
cpuid 6 && set pae yes ||
cpuid --ecx 5 && set vmx yes || cpuid --ext --ecx 2 && set svm yes || isset ${vmx} || isset ${svm} && set hw_virt yes ||
Check for the existence of the specified x86 CPU feature using the CPUID
instruction. If the --ext
option is specified then the extended feature set is checked, otherwise the standard feature set is checked. If the --ecx
option is specified then the feature set contained in the %ecx
register is checked, otherwise the feature set contained in the %edx
register is checked.
Some useful features to check are:
Feature set | Register | Bit | Feature | Command |
---|---|---|---|---|
Extended | %edx | 29 | Long mode (64-bit) | cpuid --ext 29 |
Standard | %edx | 28 | Hyper-threading (HTT) | cpuid 28 |
Standard | %edx | 6 | Physical address extensions (PAE) | cpuid 6 |
Standard | %ecx | 5 | Intel Virtual Machine Extensions (VMX) | cpuid --ecx 5 |
Extended | %ecx | 2 | AMD Secure Virtual Machine (SVM) | cpuid --ext --ecx 2 |
Standard | %edx | 15 | Conditional Move (CMOV) | cpuid 15 |
Success | The specified x86 CPU feature is present |
---|---|
Failure | The specified x86 CPU feature is not present |
The standard feature set represents the values returned in %ecx
and %edx
when CPUID
is called with %eax=0x00000001
.
The extended feature set represents the values returned in %ecx
and %edx
when CPUID
is called with %eax=0x80000001
.