3.4.109 –xarch=isa
命令セットアーキテクチャー (ISA) を指定します。
次の表は、SPARC プラットフォームと x86 プラットフォームの両方に共通する -xarch キーワードの一覧です。
表 3-13 SPARC および x86 の両方のプラットフォームに共通する -xarch キーワード
|
|
generic
|
ほとんどのプロセッサに共通の命令セットを使用します。これはデフォルト値です。
|
generic64
|
ほとんどの 64 ビットプラットフォームで良好なパフォーマンスを得られるようにコンパイルします。このオプションは –m64 –xarch=generic に相当し、以前のリリースとの互換性のために提供されています。
|
native
|
このシステムで良好なパフォーマンスを得られるようにコンパイルします。現在コンパイルしているシステムプロセッサにもっとも適した設定を選択します。
|
native64
|
64 ビットのこのシステムで良好なパフォーマンスを得られるようにコンパイルします。このオプションは、–m64 –xarch=native に相当し、以前のリリースとの互換性のために用意されています。
|
|
-xarch は単独で使用できますが、-xtarget オプションの展開の一部です。特定の -xtarget オプションで設定されている -xarch の値をオーバーライドするために使用することもできます。例:
% f95 -xtarget=ultra2 -xarch=sparcfmaf ...
-xtarget=ultra2 で設定した -xarch をオーバーライドします
このオプションは、指定の命令セットだけを許すことによって、コンパイラが指定の命令セットアーキテクチャーの命令に対応するコードしか生成できないようにします。このオプションは、すべてのターゲットを対象とするような命令としての使用は保証しません。
このオプションを最適化で使用する場合は、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。不適切なアーキテクチャーを選択すると、バイナリプログラムがその対象プラットフォーム上で実行できなくなることがあります。
次の点に注意してください。
-
generic、sparc、sparcvis2、sparcvis3、sparcfmaf、sparcima でコンパイルされたオブジェクトライブラリファイル (.o) をリンクして、一度に実行できます。ただし、実行できるのは、リンクされているすべての命令セットをサポートしているプロセッサのみです。
-
特定の設定で、生成された実行可能ファイルが実行されなかったり、従来のアーキテクチャーよりも実行速度が遅くなったりする場合があります。また、4 倍精度 (REAL*16 および long double) 浮動小数点命令は、これらの命令セットアーキテクチャーのいずれにも実装されないため、コンパイラは、それらの命令を生成したコードで使用しません。
-xarch が指定されない場合のデフォルトは、generic です。
Table 3–14 に、SPARC プラットフォーム上で使用する各 -xarch キーワードについてプラットフォームの詳細を説明します。
表 3-14 SPARC プラットフォーム上の -xarch の値
|
|
sparc
|
SPARC V9-ISA 用のコンパイルを行います。V9 ISA 用のコンパイルですが、Visual Instruction
Set (VIS) や、その他の実装固有の ISA
拡張機能は含まれません。このオプションを使用して、コンパイラは、V9 ISA で良好なパフォーマンスが得られるようにコードを生成できます。
|
sparc4
|
SPARC4 バージョンの SPARC-V9 ISA 用にコンパイルします。SPARC-V9 命令セット、VIS 1.0 を含む UltraSPARC 拡張機能、VIS2.0、浮動小数点積和演算命令、VIS 3.0、および SPARC4 命令を含む UltraSPARC-III 拡張機能の命令をコンパイラが使用できるようになります。
|
sparc4b
|
SPARC4B バージョンの SPARC-V9 ISA 用にコンパイルします。コンパイラが、SPARC-V9 命令セットからの命令に加えて、VIS 1.0 を含む UltraSPARC 拡張機能、VIS 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能からの命令、および SPARC T4 拡張機能からの PAUSE および CBCOND 命令を使用できるようにします。
|
sparc4c
|
SPARC4C バージョンの SPARC-V9 ISA 用にコンパイルします。コンパイラが、SPARC-V9 命令セットからの命令に加えて、VIS 1.0 を含む UltraSPARC 拡張機能、VIS 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能、VIS 3.0 の VIS3B サブセットと呼ばれる SPARC T3 拡張機能のサブセットからの命令、および SPARC T4 拡張機能からの PAUSE および CBCOND 命令を使用できるようにします。
|
sparcvis
|
UltraSPARC 拡張機能付きの SPARC-V9 ISA 用のコンパイルを行います。SPARC-V9 + VIS (Visual Instruction Set) version 1.0 + UltraSPARC 拡張機能用のコンパイルを実行します。このオプションを使用すると、コンパイラは、UltraSPARC アーキテクチャー上で良好なパフォーマンスが得られるようにコードを生成することができます。
|
sparcvis2
|
UltraSPARC-III 拡張機能付きの SPARC-V9 ISA 用にコンパイルします。UltraSPARC アーキテクチャー + VIS (Visual Instruction Set) version 2.0 + UltraSPARC-III 拡張機能用のオブジェクトコードを生成します。
|
sparcvis3
|
SPARC VIS version 3 の SPARC-V9 ISA 用にコンパイルします。SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0、積和演算 (FMA) 命令、および VIS (Visual Instruction Set) version 3.0 を含む UltraSPARC-III 拡張機能の命令をコンパイラが使用できるようになります。
|
sparcfmaf
|
SPARC-V9 ISA の sparcfmaf バージョン用にコンパイルします。SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0 を含む UltraSPARC-III 拡張機能、および浮動小数点積和演算用の SPARC64 VI 拡張機能の命令をコンパイラが使用できるようになります。
コンパイラが自動的に積和演算命令を使用する機会を見つけられるようにするには、-xarch=sparcfmaf および -fma=fused と最適化レベルを組み合わせて使用する必要があります。
|
sparcace
|
sparcace バージョンの SPARC-V9 ISA 用にコンパイルします。コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能、および ACE 浮動小数点用の SPARC64 X 拡張機能からの命令を使用できるようにします。
|
sparcaceplus
|
sparcaceplus バージョンの SPARC-V9 ISA 用にコンパイルします。コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能、SPARCACE 浮動小数点用の SPARC64 X 拡張機能、および SPARCACE 浮動小数点用の SPARC64 X+ 拡張機能からの命令を使用できるようにします。
|
sparcima
|
sparcima バージョンの SPARC-V9 ISA 用にコンパイルします。コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能からの命令を使用できるようにします。
|
v9
|
-m64 -xarch=sparc と同義です。 64 ビットのメモリーモデルを取得するために -xarch=v9 を使用している従来のメイクファイルおよびスクリプトでは、-m64 のみを使用する必要があります。
|
v9a
|
-m64 -xarch=sparcvis と同義です。旧バージョンとの互換を提供します。
|
v9b
|
-m64 -xarch=sparcvis2 と同義です。旧バージョンとの互換を提供します。
|
|
Table 3–15 に、x86 プラットフォーム上で使用する各 -xarch キーワードについて詳細を説明します。x86 で -xarch が指定されなかった場合のデフォルトは generic です (または -m64 が指定された場合は generic64)。
表 3-15 x86 プラットフォーム上の -xarch の値
|
|
386
|
命令セットを Intel 386/486 アーキテクチャーに限定します。
|
pentium_pro
|
命令セットを Pentium Pro アーキテクチャーに制限します。
|
pentium_proa
|
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット Pentium Pro アーキテクチャーに追加します。
|
sse
|
pentium_pro に SSE 命令セットを追加します(次を参照)。
|
ssea
|
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE アーキテクチャーに追加します。
|
sse2
|
pentium_pro に SSE2 命令セットを追加します(次を参照)。
|
sse2a
|
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE2 アーキテクチャーに追加します。
|
sse3
|
SSE2 命令セットに SSE3 命令セットを追加します。
|
sse3a
|
AMD 拡張命令 (3dnow など) を SSE3 命令セットに追加します。
|
amd64
|
Solaris プラットフォームでは、-m64 -xarch=sse2 と同義です。 64 ビットのメモリーモデルを取得するために -xarch=amd64 を使用している従来のメイクファイルおよびスクリプトでは、-m64 を使用する必要があります。
|
amd64a
|
Solaris プラットフォームでは、-m64 -xarch=sse2a と同義です。
|
sse3a
|
AMD 拡張命令 (3DNow! など) をSSE3 命令セットに追加します。
|
ssse3
|
SSE3 命令セットに SSSE3 命令を追加します。
|
sse4_1
|
SSSE3 命令セットに SSE4.1 命令を追加します。
|
sse4_2
|
SSE4.1 命令セットに SSE4.2 命令を追加します。
|
amdsse4a
|
AMD 命令セットに SSE4a 命令を追加します。
|
aes
|
Intel Advanced Encryption Standard 命令セットを追加します。ソースコードが .il インラインコード、_asm 文、または AES 命令を使用するアセンブラコードを含むか、AES 組み込み関数を参照することがない限り、-xarch=aes が指定されたときにコンパイラは AES 命令を自動的に生成しないことに注意してください。
|
avx
|
Intel Advanced Vector Extensions 命令セットを使用します。
|
avx_i
|
Intel Advanced Vector Extensions 命令セットを RDRND、FSGSBASE、および F16C 命令セットとともに使用します。
|
avx2
|
Intel Advanced Vector Extensions 2 命令セットを使用します。
|
|
3.4.109.1 x86/x64 プラットフォームでの特別な注意
x86 Solaris
プラットフォームでコンパイルを行う場合は、次の点が重要です。
-
プログラムのいずれかの部分が x86 プラットフォーム上で —m64 でコンパイルまたはリンクされる場合、プログラムのすべての部分もこれらのいずれかのオプションでコンパイルされる必要があります。各種 Intel 命令セットアーキテクチャー (SSE、SSE2、SSE3、SSSE3 など) の詳細は、Intel-64 および IA-32 の『Intel Architecture Software Developer's Manual』を参照してください。
-
-xarch を sse、sse2、sse2a、または sse3 以降に設定してコンパイルしたプログラムは、これらの機能および拡張機能をサポートするプラットフォームで実行する必要があります。
-
このリリースでは、デフォルトの命令セットおよび -xarch=generic の意味が sse2 に変更されました。ターゲットプラットフォームオプションを指定せずにコンパイルすると、古い Pentium III または以前のシステムと互換性がない sse2 バイナリが生成されます。
-
コンパイルとリンクを別々に行う場合は、必ずコンパイラを使ってリンクし、同じ -xarch 設定で正しい起動ルーチンがリンクされるようにしてください。
-
x86 の 80 バイト浮動小数点レジスタが原因で、x86 での演算結果が SPARC の結果と異なる場合があります。この差を最小にするには、-fstore オプションを使用するか、ハードウェアが SSE2 をサポートしている場合は -xarch=sse2 でコンパイルします。
-
これらの -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。
-
この警告は、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、SSE3 (およびそれ以降の) 命令と拡張機能を利用している __asm() アセンブラコードにも当てはまります。