A.2.165.1 値
r には次の値のいずれかを指定します。それぞれの値の意味は -xarch 設定によって異なります。
表 A–46
-xregs の値
値
|
意味
|
[no%]appl
|
(SPARC) コンパイラがアプリケーションレジスタをスクラッチレジスタとして使用してコードを生成することを許可します [しません]。アプリケーションレジスタは次のとおりです。
g2、g3、g4 ( 32 ビットプラットフォーム)
g2、g3 (64 ビットプラットフォーム)
すべてのシステムソフトウェアおよびライブラリは、-xregs=no%appl を指定してコンパイルすることをお勧めします。システムソフトウェア (共有ライブラリを含む) は、アプリケーション用のレジスタの値を保持する必要があります。これらの値は、コンパイルシステムによって制御されるもので、アプリケーション全体で整合性が確保されている必要があります。
SPARC ABI では、これらのレジスタはアプリケーションレジスタと記述されています。これらのレジスタを使用すると、必要な load や store 命令が少なくなるため、パフォーマンスが向上します。ただし、これらのレジスタの使用は、ほかの目的でレジスタを使用するプログラムとの矛盾を起こすことがあります。
|
[no%]float
|
(SPARC) コンパイラが浮動小数点レジスタを整数値用のスクラッチレジスタとして使用してコードを生成することを許可します [しません]。浮動小数点値を使用する場合は、このオプションとは関係なくこれらのレジスタを使用します。浮動小数点レジスタに対するすべての参照をコードから排除する場合は、-xregs=no%float を使用するとともに、決して浮動小数点型をコードで使わないようにする必要があります。
|
[no%]frameptr
|
(x86) フレームポインタレジスタ (IA32 の場合 %ebp 、AMD64 の場合 %rbp) を未割り当ての呼び出し先保存レジスタとして使用することを許可 [禁止] します。
未割り当ての呼び出し先保存レジスタとしてフレームポインタレジスタを使用すると、プログラムの実行時パフォーマンスが向上することがあります。ただし、スタックを調べ、追跡するために、一部ツールの能力の低下を招きます。このスタック調査機能は、システムパフォーマンスの測定やチューニングの際に重要です。このため、この最適化を使用すると、グローバルなシステムパフォーマンスを犠牲にしてローカルのプログラムパフォーマンスが向上することがあります。
-
事後診断用にスタックをダンプするパフォーマンスアナライザなどのツールが機能しなくなります。
-
デバッガ (adb、mdb、 dbx など) が、スタックをダンプしたり、スタックフレームを直接ポップしたりできなくなります。
-
dtrace パフォーマンス解析機能が、スタック上の、フレームポインタを失った最新のフレームの前のフレームに関する情報を収集できなくなります。
-
Posix の pthread_cancel がクリーンアップハンドラを検出できなくなります。
-
C++ の例外が、C 関数経由で伝搬できなくなります。
フレームポインタを失った C 関数が、その C 関数経由で例外をスローする C++ 関数を呼び出す場合、C++ 例外で問題が発生します。一般にそうした呼び出しは、関数が関数ポインタを受け付けるか (たとえば qsort)、malloc などの大域関数が割り込みを受けるときに発生します。
前述の最後の 2 つの影響によって、アプリケーションの正しい動作に影響が生じることがあります。多くのアプリケーションコードは、こうした問題を検出しません。-xO4 を使用して作成されたライブラリには、そのクライアントによる使用制限を詳述したマニュアルを用意することを推奨します。
注意: -xpg も指定されている場合、コンパイラは -xregs=frameptr を無視し、警告を表示します。また、-noex オプションによって除外が無効になっている場合を除いて、32 ビット x86 プラットフォームでもコンパイラはこのオプションを無視します。
|
デフォルト
SPARC のデフォルトは -xregs=appl,float です。
x86 のデフォルトは、-fast の展開に含まれる -xregs=no%frameptr -xregs=frameptr です。
例
使用可能なすべての一時レジスタを使ってアプリケーションプログラムをコンパイルするには、-xregs=appl,float と指定します。
コンテキストの切り替えの影響を受けやすい非浮動小数点コードをコンパイルするには -xregs=no%appl,no%float と指定します。
関連項目
SPARC V8 および SPARC V9 の ABI