CPUID.06H:EAX [7]を使用すると、Intelプロセッサーで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);
それとも、1つのレジスタのみ結果たい場合のために:
unsigned int cpuid_eax(unsigned int op);
そして、EAXが値を返されたマスクを。
一つの小さなノート:SDMを引用するとき、セクションを指定することをお勧めします - それは結局大きな本です...
は、Linuxカーネルでは、あなたが期待しているものとCPUIDとの一致を確認するためのAPIがあります。たとえば、 'x86_match_cpu()'はジョブを実行します。 OTOHには、実行中のCPUのフラグをチェックできる他のヘルパーがあります。 – 0andriy