CPUID.06H:EAX。[7]可以在英特爾處理器中發現HWP(硬件控制的性能狀態)支持。
如果該功能位未設置,則該功能不存在。訪問HWP MSR將導致#GP異常。對於其他特徵位,結果可能更糟糕:沒有錯誤,但後來會導致難以調試的問題。
這意味着你應該指令之前eax=0x6
運行the cpuid
instruction後的eax
寄存器檢查了一下(特別eax & (1<<7)
)。
要發現在Linux內核中的CPUID值可以使用one of the cpuid
functions, with op=6
:
#include <asm/processor.h> // defines the following:
void cpuid(unsigned int op,
unsigned int *eax, unsigned int *ebx,
unsigned int *ecx, unsigned int *edx);
void cpuid_count(unsigned int op, int count,
unsigned int *eax, unsigned int *ebx,
unsigned int *ecx, unsigned int *edx);
或者用於你只想要一個寄存器結果的情況:
unsigned int cpuid_eax(unsigned int op);
的蒙版的EAX返回值。
一個小提醒:引述SDM最好是指定段時 - 這是一本大書畢竟...
在Linux內核中有檢查CPUID和匹配與你期待什麼樣的API。例如'x86_match_cpu()'可能會完成一項工作。 OTOH還有其他幫助程序可用於檢查運行CPU上的標誌。 – 0andriy