次の表は、x86 アーキテクチャーでの -xarch のフラグをまとめています。
表 B–14 x86 での -xarch のフラグ
フラグ |
意味 |
---|---|
386 |
命令セットを 386/486 アーキテクチャーに限定します。 |
amd64 |
-m64 -xarch=sse2 と同等です (Solaris のみ)。64 ビットのメモリーモデルを取得するために -xarch=amd64 を使用している従来のメイクファイルおよびスクリプトでは、-m64 のみを使用する必要があります。 |
amd64a |
-m64 -xarch=sse2a と同等です (Solaris のみ)。 |
generic |
ほとんどのプロセッサに共通の命令セットを使用します。これはデフォルトです。 |
generic64 |
多くのシステムで良好な 64 ビットパフォーマンスを得るためのコンパイルをします (Solaris のみ)。 このオプションは -m64 -xarch=generic と同等で、以前のリリースとの互換性のために提供されています。64 ビットのコンパイルを指定するには、 -xarch=generic64 の代わりに -m64 を使用します。 |
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 命令セットに追加します。 |
x86 Solaris プラットフォーム用にコンパイルを行う場合に注意が必要な、重要な事項がいくつかあります。
従来の Sun 形式の並列化プラグマは、x86 上では使用できません。この代わりに OpenMP を使用してください。従来の並列化指令から OpenMP への変換に関する詳細は、『Sun Studio 12: OpenMP API ユーザーズガイド』を参照してください。
-xarch を sse、sse2、sse2a、または sse3 に設定してコンパイルしたプログラムは、必ずこれらの拡張と機能を提供するプラットフォームでのみ実行してください。
Pentium 4 互換プラットフォームの場合、Solaris 9 4/04 以降のリリースは SSE/SSE2 に対応しています。これより前のバージョンの Solaris は SSE/SSE2 に対応していません。-xarch によって選択された命令セットが実行中の Solaris OS で有効にされていない場合、コンパイラはその命令セットのコードを生成またはリンクできません。
コンパイルとリンクを別々に行う場合は、必ずコンパイラを使ってリンクし、-xarch 設定で適切な起動ルーチンがリンクされるようにしてください。
x86 の 80 ビット浮動小数点レジスタが原因で、x86 での数値演算結果が SPARC の結果と異なる場合があります。この差を最小にするには、-fstore オプションを使用するか、ハードウェアが SSE2 をサポートしている場合は -xarch=sse2 でコンパイルします。
たとえば sin(x) など、組み込みの数学ライブラリが同じではないため、Solaris と Linux で数値演算結果が異なる場合があります。
Sun Studio 11 と Solaris 10 OS から、これらの特殊化された xarch ハードウェアフラグを使用してコンパイルし、構築されたプログラムバイナリは、適切なプラットフォームで実行されることが確認されます。
Solaris 10 以前のシステムでは確認が行われないため、これらのフラグを使用して構築したオブジェクトが適切なハードウェアに配備されることをユーザが確認する必要があります。
これらの xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。
このことは、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、および SSE3 の命令や拡張機能を利用している __asm() アセンブラコードにも当てはまります。