[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.14.3 SPARC オプション

以下の ‘-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.