[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下の ‘-m’ オプションが SPARC ではサポートされている。
-mno-app-regs
-mapp-regs
‘-mapp-regs’ を指定するとグローバルレジスタの 2 〜 4 を使うコード 生成を行なう。グローバルレジスタの 2 〜 4 は SPARC SVR4 ABI が アプリケーション用に予約している。これがデフォルトである。
完全に SVR4 ABI に準拠するには、幾らか効率が落ちるが、 ‘-mno-app-regs’ を指定する。ライブラリとシステムソフトウェアを このオプションでコンパイルする必要がある。
-mfpu
-mhard-float
浮動小数点命令を含んだ出力を生成する。これはデフォルトである。
-mno-fpu
-msoft-float
浮動小数点用ライブラリ呼び出しを含む出力を生成する。 警告: 必要となるライブラリは全ての SPARC ターゲットで利用可能 であるわけではない。普通はその機種の通常の C コンパイラの機能が 使われるが、クロスコンパイルの場合はこれをそのまま行なうことはできない。 クロスコンパイルの場合は、適切なライブラリ関数を自分で用意しなければ ならない。組み込みターゲット ‘sparc-*-aout’ と ‘sparclite-+-+’ では、ソフトウェアによる浮動小数点サポートを 提供している。
‘-msoft-float’ を指定すると、出力ファイル中の呼び出し規約が変わる。 このため、プログラム全体をこのオプションでコンパイルしないと いけない。特に、GCC 付属のライブラリである、‘libgcc.a’ を コンパイルするときに、‘-msoft-float’ を指定してコンパイルしないと このライブラリが正しく動作しない。
-mhard-quad-float
4倍精度(long double)の浮動小数点命令を含むコードを生成する。
-msoft-quad-float
4倍精度(long double)の浮動小数点命令に対して、ライブラリ呼びだしを 行なうコードを生成する。呼び出される関数は、SPARC ABI で 規定されているものである。これはデフォルトになっている。
このマニュアルを執筆している時点では、4倍精度浮動小数点命令をハードウェアで サポートしている SPARC の実装は存在しない。全ての実装で、 これらの命令のうちの一つに対してはトラップハンドラを起動し、 そのトラップハンドラでその命令の効果をエミュレートしている。 トラップハンドラのオーバーヘッドにより、ABI のライブラリルーチンを 呼び出すよりもずっと遅くなる。このため、‘-msoft-quad-float’ オプションがデフォルトになっている。
-mno-epilogue
-mepilogue
‘-mepilogue’ を指定すると(デフォルトで指定される)、 GCC は、各関数の最後に必ず関数の出口用のコードを生成する。 関数の途中での出口(例えば、C 言語の return 文)に対しては、 関数の最後の出口コードへのジャンプを生成する。
‘-mno-epilogue’ を指定すると、GCC は関数の出口毎に 出口コードを展開する。
-mno-flat
-mflat
‘-mflat’ を指定すると、GCC はセーブ/リストアを行なう 命令群を生成せず、「平らな」あるいは、一個のレジスタウィンドウ 呼出し規約を使う。この方式では、%i7 をフレームポインタとして使い、 通常のレジスタウィンドウ方式と互換性がある。どちらのコードも お互いに混ぜて使うことができる。 ローカルレジスタと入力レジスタ(0-5)は、以前として 呼出し時セーブレジスタとして取り扱われ、必要に応じてスタックに セーブされる。
‘-mno-flat’ を指定すると(デフォルト)、GCC は セーブ/リストア命令群を生成し(末端関数は除く)、通常の操作モードになる。
-mno-unaligned-doubles
-munaligned-doubles
double は 8 バイト境界に整列されると仮定する。これがデフォルトである。
‘-munaligned-doubles’ を指定すると、double 型が 8 バイト境界に 整列させられるのは、別の型に含まれている場合や、絶対アドレスを持つ場合に 限られる。その他の場合は、4 バイト境界に整列される。 このオプションを指定すると、滅多にないことだが、他のコンパイラで 生成したコードとの互換性の問題を回避できる。これはデフォルトには なっていない。性能が、とりわけ浮動小数点コードの場合に 悪くなるからである。
-mv8
-msparclite
この二つのオプションは、SPARC アーキテクチャの版のうちの 一つを選択する。
デフォルトでは(富士通の SPARClite 用にコンフィギュレーションを 行なわない限り)、GCC は、SPARC アーキテクチャの v7 用のコードを生成する。
‘-mv8’ を指定すると、SPARC v8 用のコードを生成する。 v7 との違いは、v7 にはないが v8 には存在する整数乗算と整数除算命令を 生成する点にある。
‘-msparclite’ を指定すると SPARClite 用のコードを生成する。
これは、整数乗算と整数除算、スキャン(ffs
)命令を追加する。
これらの命令は、v7 にはないが SPARClite に存在する。
これらのオプションは廃止要求が出ており、将来の GCC のリリースで削除される 予定である。これらは、‘-mcpu=xxx’ に置き換えられることになる。
-mcypress
-msupersparc
この二つのオプションは、どのプロセッサ向けに最適化を行なうかを 選択する。
‘-mcypress’ を指定すると(これがデフォルトである)、 GCC は Cypress CY7C602 というチップ向けにコードを最適化する。 このチップは、SPARCstation/SPARCserver 3xx シリーズで使われているものである。 このオプションは、古目の SPARCstation 1、2、IPX 等にも適している。
GCC は SuperSPARC チップ向けにコードを最適化する。 このチップは、SPARCstation 10、1000、2000 シリーズで使われているものである。 このオプションは、完全な SPARC v8 命令セットにも適している。
これらのオプションは廃止要求が出ており、将来の GCC のリリースで削除される 予定である。これらは、‘-mcpu=xxx’ に置き換えられることになる。
-mcpu=cpu_type
機種型 cpu_type 用に、命令セット、レジスタセット、命令スケジューリング のパラメータを設定する。 cpu_type の値として使えるのは、 ‘v7’、‘cypress’、‘v8’、‘supersparc’、‘sparclite’、 ‘hypersparc’、‘sparclite86x’、‘f930’、‘f934’、 ‘sparclet’、‘tsc701’、‘v9’、‘ultrasparc’ である。
デフォルトの命令スケジューリングパラメータは、アーキテクチャを 選択する値に対して使われるのであって、実装に対して使われるのではない。 これらは、‘v7’、‘v8’、‘sparclite’、‘sparclet’、 ‘v9’ である。
サポートされているアーキテクチャとそれに対応するサポートされている 実装のリストを以下に示す。
v7: cypress v8: supersparc, hypersparc sparclite: f930, f934, sparclite86x sparclet: tsc701 v9: ultrasparc |
-mtune=cpu_type
機種 cpu_type に対する命令スケジューリングのパラメータを 設定する。ただし、‘-mcpu=’cpu_type が行なうような 命令セットやレジスタセットの設定は行なわない。
‘-mcpu=’
cpu_type に使えるのと同じ値が ‘-mtune=’cpu_type
に対しても使える。ただし意味のある値は、特定の CPU の実装を選ぶもの
だけである。それは次の通り。‘cypress’、‘supersparc’、
‘hypersparc’、‘f930’、‘f934’、‘sparclite86x’、
‘tsc701’、‘ultrasparc’。
-malign-loops=num
ループを 2 の num 乗バイト境界に整列させる。 ‘-malign-loops’ が指定されていない場合のデフォルトは 2 である。
-malign-jumps=num
ジャンプ先の命令のみを 2 の num 乗境界に整列させる。 ‘-malign-jumps’ が指定されていない場合のデフォルトは 2 である。
-malign-functions=num
関数の開始位置を 2 の num 乗境界に整列させる。 ‘-malign-functions’ が指定されていない場合のデフォルトは、 32 ビットの SPARC の場合は 2 で、64 ビットの SPARC の場合は 5 である。
SPARCLET プロセッサでは、以下の ‘-m’ オプションが上記に加えて サポートされている。
-mlittle-endian
リトルエンディアン・モードで動作するプロセッサ用のコードを生成する。
-mlive-g0
レジスタ %g0
を普通のレジスタとして取り扱う。
GCC は必要に応じて、引き続き、このレジスタを上書きするが、
常に 0 を読み出すという想定は行なわない。
-mbroken-saverestore
save
命令と restore
命令の自明でない形を使わないコードを
生成する。SPARCLET プロセッサの初期のバージョンは、引数付きの
save
命令と restore
命令を正しく扱えない。
引数なしなら正しく扱うことができる。引数なしの save
命令は、
現在のウィンドウポインタをインクリメントするが、新しいスタックフレームは
割り当てない。ウィンドウのオーバフローのトラップハンドラが、
この場合を、割り込みハンドラと同じように正しく扱うことを想定している。
64ビット環境の SPARC V9 プロセッサでは上記に加えて以下のオプションが サポートされている。
-mlittle-endian
リトルエンディアン・モードで動作するプロセッサ用のコードを生成する。
-m32
-m64
32ビットまたは64ビット環境用のコードを生成する。 32ビット環境は、int と long、ポインタを 32ビットに設定する。 64ビット環境は、int を 32ビットに、long とポインタを 64ビットに設定する。
-mcmodel=medlow
Medium/Low コードモデル向けにコードを生成する。 このモデルでは、プログラムはアドレス空間の下位 32 ビット内で リンクしなければならない。 ポインタは 64 ビットである。プログラムは、静的にも動的にもリンク可能である。
-mcmodel=medmid
Medium/Middle コードモデル向けにコードを生成する。 このモデルでは、プログラムはアドレス空間の下位 44 ビット内で リンクしなければならず、テキストセグメントは 2G バイト以下で なければならず、データセグメントは 2Gバイトのテキストセグメント内に 一緒に入れなければならない。 ポインタは 64 ビットである。
-mcmodel=medany
Medium/Anywhere コードモデル向けにコードを生成する。 このモデルでは、プログラムはアドレス空間のどこに リンクしても良く、テキストセグメントは 2G バイト以下で なければならず、データセグメントは 2Gバイトのテキストセグメント内に 一緒に入れなければならない。 ポインタは 64 ビットである。
-mcmodel=embmedany
組み込みシステム用の Medium/Anywhere コードモデル向けにコードを生成する。 このモデルでは、テキストセグメントとデータセグメントは 32 ビットの大きさ であり、どちらも任意の位置(リンク時に決定される)から開始可能である。 レジスタ %g4 が、データセグメントの基底を指す。 ポインタは依然として 64 ビットである。
-mstack-bias
-mno-stack-bias
‘-mstack-bias’ を指定すると、GCC はスタックポインタと、それに もしあればフレームポインタは、スタックフレームの参照を作るときに、 オフセットに -2047 を加えなければならないと想定する。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated
using texi2html 1.78.