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 |
CPUID_SETTINGS build option
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.