/arch (x86)
x86 でコードの生成のアーキテクチャを指定します。/arch (x64) および /arch (ARM) も参照してください。
/arch:[IA32|SSE|SSE2|AVX]
引数
/arch:IA32
拡張命令を指定しないで、浮動小数点計算のために x87 を指定します。/arch:SSE
SSE 命令を使用できるようにします。/arch:SSE2
SSE2 命令の使用を有効にします。これは /arch のオプションが指定されていない場合、x86 プラットフォームの既定の命令です。/arch:AVX
Intel の使用を提供するベクターの拡張機能の命令を有効にします。
解説
SSE 命令および SSE2 命令は、さまざまな Intel プロセッサおよび AMD プロセッサに組み込まれています。AVX 命令は、Intel Sandy Bridge プロセッサおよび AMD Bulldozer プロセッサに組み込まれています。
_M_IX86_FP のマクロでは、/arch のコンパイラ オプションが使用されているかを示します。詳細については、「定義済みマクロ」を参照してください。
/arch を指定した場合、SSE 命令および SSE2 命令をいつどのように利用するかは、オプティマイザーによって選択されます。これは、スカラー浮動小数点演算に SSE/SSE2 命令を使用した方が高速判断し、x87 浮動小数点レジスタ スタックの代わりに登録した場合の SSE/SSE2 命令を使用します。したがって、実際のコードでは、浮動小数点演算に x87 と SSE/SSE2 の両方を組み合わせて使用します。また、/arch:SSE2と、SSE2 命令は、64 ビット整数演算に使用できます。
コンパイラでは、SSE 命令と SSE2 命令の使用に加え、SSE および SSE2 をサポートするプロセッサ リビジョンに組み込まれているその他の命令も使用します。例としては、Intel プロセッサの Pentium Pro リビジョンで初めて導入された CMOV 命令が挙げられます。
コンパイルに [/clr] を使用すると /arch はマネージ関数のコード生成に影響しません。/arch はネイティブ関数のコード生成にのみ影響します。
/arch と /QIfist は、同じコンパイル単位では使用できません。特に FP の制御ワードを変更するために _controlfp を使用するとランタイムのスタートアップ コードでは、53 bit に x87 FPU 制御ワードの精度制御フィールド。したがって、式のすべての浮動と倍精度浮動小数点演算は、53 bit の有効桁と 15 bit の指数を使用します。ただし、すべての SSE 単精度の演算は、24 bit の有効桁と 8 ビットの指数を使用し、SSE2 倍精度浮動小数点演算は、53 bit の有効桁と 11 ビットの指数を使用します。詳細については、「_control87、_controlfp、__control87_2」を参照してください。これらの差異は、ユーザーの代入が各部分式の後に行われる場合ではなく、単一の式ツリー内で発生する可能性があります。次に例を示します。
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
以下と比較してください。
t = f1 * f2; // Do f1 * f2, round to the type of t.
r = t + d; // This should produce the same overall result
// whether x87 stack is used or SSE/SSE2 is used.
controlfp では、MXCSR コントロール ビットは変更されません。したがって、/arch:SSE2と、controlfp の使用に依存する機能はすべて無効になります。
SSE または SSE2 のこのコンパイラ オプションを Visual Studio で設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。
[C/C++] フォルダーを選択します。
[コード生成] プロパティ ページを選択します。
[拡張命令セットを有効にする] プロパティを変更します。
/arch:AVX コンパイラ オプションを Visual Studio で設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。
[C/C++] フォルダーを選択します。
[コマンド ライン] のプロパティ ページを選択します。
[追加のオプション] ボックスに、「/arch:AVX」を追加します。
このコンパイラ オプションをコードから設定するには
- 「EnableEnhancedInstructionSet」を参照してください。