Oracle Solaris Studio 12.2: C ユーザーガイド

B.2.74 -xarch=isa

対象となる命令セットアーキテクチャー (ISA) を指定します。

このオプションは、コンパイラが生成するコードを、指定した命令セットアーキテクチャーの命令だけに制限します。このオプションは、すべてのターゲットを対象とするような命令としての使用は保証しません。ただし、このオプションを使用するとバイナリプログラムの移植性に影響を与える可能性があります。


注 –

意図するメモリーモデルとして LP64 (64 ビット) または ILP32 (32 ビット) を指定するには、それぞれ -m64 または -m32 オプションを使用してください。次に示すように以前のリリースとの互換性を保つ場合を除いて、-xarch オプションでメモリーモデルを指定できなくなりました。


別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xarch の値を指定してください。

B.2.74.1 SPARC での -xarch のフラグ

次の表に、SPARC プラットフォームでの各 -xarch キーワードの詳細を示します。

表 B–14 SPARC プラットフォームでの -xarch のフラグ

フラグ  

意味  

generic

ほとんどのプロセッサに共通の命令セットを使用します。これはデフォルト値です。 

generic64

多くのシステムで良好な 64 ビットパフォーマンスを得るためのコンパイルをします(Solaris のみ)。 

このオプションは -m64 -xarch=generic に相当し、以前のリリースとの互換性のために用意されています。64 ビットでのコンパイルを指定するには、次のものではなく -m64 を使用してください。 - xarch=generic64

native

このシステムで良好なパフォーマンスを得られるようにコンパイルします。現在コンパイルしているシステムプロセッサにもっとも適した設定を選択します。 

native64

このシステムで良好なパフォーマンスを得られるようにコンパイルします (Solaris のみ)。このオプションは -m64 -xarch=native に相当し、以前のリリースとの互換性のために用意されています。

sparc

SPARC-V9 ISA 用のコンパイルを実行しますが、VIS (Visual Instruction Set) は使用せず、その他の実装に固有の ISA 拡張機能も使用しません。このオプションを使用して、コンパイラは、V9 ISA で良好なパフォーマンスが得られるようにコードを生成できます。 

sparcvis

SPARC-V9 + VIS (Visual Instruction Set) version 1.0 + UltraSPARC 拡張機能用のコンパイルを実行します。このオプションを使用すると、コンパイラは、UltraSPARC アーキテクチャー上で良好なパフォーマンスが得られるようにコードを生成することができます。 

sparcvis2

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 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0 を含む UltraSPARC-III 拡張機能、および浮動小数点積和演算用の SPARC64 VI 拡張機能の命令をコンパイラが使用できるようになります。 

-xarch=sparcfmaf fma=fused と組み合わせて使用し、ある程度の最適化レベルを指定することで、コンパイラが自動的に積和命令の使用を試みるようにする必要があります。

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 に相当し、以前のリリースとの互換性のために用意されています。

また、次のことにも注意してください。

B.2.74.2 x86 での -xarch のフラグ

次の表に、x86 プラットフォームでの -xarch フラグを示します。

表 B–15 x86 での -xarch のフラグ

フラグ 

意味  

amd64

-m64 -xarch=sse2 に相当します (Solaris のみ)。64 ビットメモリーモデルを得るために -xarch=amd64 を使用する古いメイクファイルとスクリプトでは、-m64 だけを使用すれば十分です。

amd64a

-m64 -xarch=sse2a に相当します (Solaris のみ)。

generic

ほとんどのプロセッサに共通の命令セットを使用します。これはデフォルトであり、—m32 でコンパイルする場合の pentium_pro、および —m64 でコンパイルする場合の sse2 に相当します。

generic64

多くのシステムで良好な 64 ビットパフォーマンスを得るためのコンパイルをします(Solaris のみ)。このオプションは -m64 -xarch=generic に相当し、以前のリリースとの互換性のために用意されています。64 ビットでのコンパイルを指定するには、次のものではなく -m64 を使用してください。 - xarch=generic64

native

このシステムで良好なパフォーマンスを得られるようにコンパイルします。現在コンパイルしているシステムプロセッサにもっとも適した設定を選択します。 

native64

このシステムで良好なパフォーマンスを得られるようにコンパイルします (Solaris のみ)。このオプションは -m64 -xarch=native に相当し、以前のリリースとの互換性のために用意されています。

pentium_pro

命令セットを 32 ビット pentium_pro アーキテクチャーに限定します。 

pentium_proa

AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット pentium_pro アーキテクチャーに追加します。 

sse

SSE 命令セットを pentium_pro アーキテクチャーに追加します。

ssea

AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE アーキテクチャーに追加します。 

sse2

SSE2 命令セットを pentium_pro アーキテクチャーに追加します。

sse2a

AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE2 アーキテクチャーに追加します。 

sse3

SSE3 命令セットを SSE2 命令セットに追加します。 

ssse3

SSSE3 命令セットで、pentium_pro、SSE、SSE2、および SSE3 の各命令セットを補足します。 

sse4_1

SSSE4.1 命令セットで、pentium_pro、SSE、SSE2、SSE3、および SSSE3 の各命令セットを補足します。 

sse4_2

SSSE4.2 命令セットで、pentium_pro、SSE、SSE2、SSE3、SSSE3、および SSSE4.1 の各命令セットを補足します。 

amdsse4a

AMD SSE4a 命令セットを使用します。 

B.2.74.3 x86 の特記事項

x86 Solaris プラットフォーム用にコンパイルを行う場合に注意が必要な、重要な事項がいくつかあります。

-xarchssesse2sse2a、または sse3 以降に設定してコンパイルしたプログラムは、必ずこれらの拡張子と機能を提供するプラットフォームでのみ実行してください。

Pentium 4 互換プラットフォームの場合、Solaris OS リリースは SSE/SSE2 に対応しています。これより前のバージョンの Solaris OS は SSE/SSE2 に対応していません。-xarch で選択した命令セットが、実行中の Solaris OS で有効ではない場合、コンパイラはその命令セットのコードを生成またはリンクできません。

コンパイルとリンクを別々に行う場合は、必ずコンパイラを使ってリンクし、-xarch 設定で適切な起動ルーチンがリンクされるようにしてください。

x86 の 80 バイト浮動小数点レジスタが原因で、x86 での演算結果が SPARC の結果と異なる数値になる場合があります。この差を最小にするには、 -fstore オプションを使用するか、ハードウェアが SSE2 をサポートしている場合は -xarch=sse2 でコンパイルします。

Solaris と Linux でも、固有の数学ライブラリ (たとえば、sin(x)) が同じではないため、演算結果が異なることがあります。

B.2.74.4 バイナリの互換性の妥当性検査

Solaris Studio 11 と Solaris 10 OS から、これらの特殊化された -xarch ハードウェアフラグを使用してコンパイルし、構築されたプログラムバイナリは、適切なプラットフォームで実行されることが確認されます。

Solaris 10 以前のシステムでは妥当性検査が行われないため、これらのフラグを使用して構築したオブジェクトが適切なハードウェアに配備されることをユーザが確認する必要があります。

これらの -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。

このことは、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、および SSE3 の命令と拡張機能を利用している __asm() アセンブラコードにも当てはまります。

B.2.74.5 相互の関連性

このオプションは単体でも使用できますが、-xtarget オプションの展開の一部でもあります。したがって、特定の -xtarget オプションで設定される -xarch のオーバーライドにも使用できます。-xtarget=ultra2-xarch=sparcvis -xchip=ultra2 -xcache=16/32/1:512/64/1 に展開されます。次のコマンドでは、-xarch=generic は、-xtarget=ultra2 の展開で設定された -xarch=sparcvis より優先されます。


example% cc -xtarget=ultra2 -xarch=generic foo.c

B.2.74.6 警告

このオプションを最適化と併せて使用する場合、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。ただし、適切な選択をしなかった場合、パフォーマンスが著しく低下するか、あるいは、作成されたバイナリプログラムが目的のターゲットプラットフォーム上で実行できない可能性があります。

別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xarch の値を指定してください。