何気なく、IsProcessorFeaturePresent を見てみた

Windows2000のIsProcessorFeaturePresent の中身を見ていて気づいたことをまとめてみる。


ちなみに kernel32.dllのコードはこうなっている。

 IsProcessorFeaturePresent:
          mov    eax,[esp+04h]
          cmp    eax,00000040h
          jnc    L77E77B57
          movzx    eax,[eax+7FFE0274h]
          jmp    L77E77B59
 L77E77B57:
          xor    eax,eax
 L77E77B59:
          retn    0004h

どうやら 0x7ffe0274 から 0x40 バイト分が cpuの識別結果の値らしい。

デバッガで開いてみると
+0x02、+0x03、+0x06、+0x08 にBitが立っている。
サーバ機はさらに +0x09 にBitが立っていた。
値の意味は

2: PF_COMPARE_EXCHANGE_DOUBLE
3: PF_MMX_INSTRUCTIONS_AVAILABLE (MMX)
6: PF_XMMI_INSTRUCTIONS_AVAILABLE (SSE)
8: PF_RDTSC_INSTRUCTION_AVAILABLE
9: PF_PAE_ENABLED

他に非サポートのものでこういうものもある。
10:PF_XMMI64_INSTRUCTIONS_AVAILABLE(SSE2)
13:PF_SSE3_INSTRUCTIONS_AVAILABLE
14:PF_COMPARE_EXCHANGE128
17:PF_XSAVE_ENABLED

KDWのkernel32.dll(5.1.2599.49)に判定処理を入れてみたところ。
Windows 2000 Advanced Server + Xeon X3360 で実行した結果
ispro
XSAVE 以外は使えるようだ。
これで、Windows2000 だけ、SSE2非対応のソフトが、SSE2対応動作するかも。

関連サイト:
IsProcessorFeaturePresent Function (Windows)
KDW Page

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です