index として EAX しか設定できないという問題があります。

Visual C++ が提供している __cpuid() 自体の問題ではあるのですが・・・。CPUID 命令実行時の ECX レジスタの値は本質的に不定となります。

32bit だけならインラインアセンブラを使って

__asm {mov ecx, XXX}
__cpuid()

で ECX レジスタの値を設定可能ですが、x64 ではインラインアセンブラが使えないためこのような簡単な方法は存在しません。CrystalCPUID4 が使用している SysInfo.dll では、師匠であるぬじぬじ氏に制作していただいた CPUID 命令発行用アセンブラから生成したオブジェクトコードをリンクしています。

ECX 入力に対応するとなると API 変更が必要になるのでまたしてもマイナーバージョンが変更となります。

ホント、新機能の(ほとんど無い)ライブラリのバージョンアップって迷惑ですよねぇ~開発者からみると。でもやるっきゃない。WinRing0 のユーザーはまだそんなに多くないのでやるなら早い方が良いですね。

最初っからわかってはいたことなのですが・・・。忘れてたけどw

No related posts.