2012-02-17 16 views
4

VS2010 CRTライブラリの一部の機能を少し変更してビルドしようとしていますが、おそらく命令セットアーキテクチャを保持するグローバル変数にアクセスしようとする部分を除いて、バージョン(ISA):x64で__asmのないSSEバージョンを取得する

if (__isa_available > __ISA_AVAILABLE_SSE2) 
{ 
    // ... 
} 
else if (__isa_available == __ISA_AVAILABLE_SSE2) 
{ 
    // ... 
} 

値それが保持しなければならない私は、アセンブリファイルで見つかった

__ISA_AVAILABLE_X86 equ 0 
__ISA_AVAILABLE_SSE2 equ 1 
__ISA_AVAILABLE_SSE42 equ 2 
__ISA_AVAILABLE_AVX equ 3 

方法と__isa_availableは価値がどこにも発見されてはならない割り当てられているが(私が見つけることを試みた 私のすべてのディレクトリ内のファイル...)

MSDNは、命令セットを決定するために、CPUIDの例を参照しています。その問題は、__asmブロックを使用し、それらはx64ビルドでは使用できないということです。

すぐに正しい値を__isa_availableに割り当てる方法を知っている人はいますか?あまりにも、同じウェブサイトに

__cpuid in intrin.h

広範なコードサンプルは次のとおりです。

答えて

3

Microsoftは、インラインアセンブリのサポートを停止することにしました。しかし彼らは新しいフォーマットを導入しました。 CPUIDの詳細については、新しい書式here(例)を参照してください。

インラインアセンブリのインラインアセンブリの利点は、コードが追加されずにx86とx64の両方と互換性があり、使いやすくなっていることです。

+0

素晴らしい、それはまさに私が必要としていたものです。 – demorge

1

VC++を使用すると、インラインASMなしでCPUIDを使用することを可能にする固有を持っています。