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

2.14.11 M88K オプション

以下の ‘-m’ オプションが Motorola 88k アーキテクチャ用に定義されている。

-m88000

m88100 と m88110 の両方で正しく動作するコードを生成する。

-m88100

m88100 で最も良く動作するが、m88110 でも動作はするコードを生成する。

-m88110

m88110 で最も良く動作し、m88100 では動作しない可能性があるコードを 生成する。

-mbig-pic

次期バージョンで削除予定の古いオプションである。 ‘-fPIC’ を使おう。

-midentify-revision

アセンブラ出力に ident 疑似命令を入れて、 ソースファイル名、コンパイラ名とそのバージョン、タイムスタンプ、 コンパイラへのオプションを記録する。

-mno-underscores

アセンブラ出力で、シンボル名の先頭にアンダースコアを付けずにその 名前を出力する。デフォルトでは、それぞれの名前の前にアンダースコアが 付く。

-mocs-debug-info
-mno-ocs-debug-info

88open Object Compatibility Standard, “OCS” で規定されている 追加のデバッグ情報(各スタックフレームでのレジスタの使用状況)を 出力する(出力しない)。この追加デバッグ情報があると、フレームポインタ が削除されたコードをデバッグできる。DG/UX、SVR4、Delta 88 SVR3.2 の 場合のデフォルトは、この情報を含める。他の 88k のコンフィギュレーション ではデフォルトではこの情報を省略する。

-mocs-frame-position

自動変数、それにスタック上に格納される引数に対する COFF 形式デバッグ 情報を出力するとき、正規のフレームアドレス、つまり関数の入り口点での スタックポインタ(レジスタ 31)からのオフセットを使う。 DG/UX、SVR4、Delta88 SVR3.2、BCS のコンフィギュレーションでは ‘-mocs-frame-position’ を使っている。他の 88k のコンフィギュレーション では、デフォルトは ‘-mno-ocs-frame-position’ である。

-mno-ocs-frame-position

自動変数、それにスタック上に格納される引数に対する COFF 形式デバッグ 情報を出力するとき、フレームポインタ(レジスタ 30)からのオフセットを使う。 このオプションが有効になっていると、デバッグ情報が -g オプションで 選択されているときフレームポインタは削除されない。

-moptimize-arg-area
-mno-optimize-arg-area

関数の引数がスタックフレームにどのように格納されるかを制御する。 ‘-moptimize-arg-area’ を指定すると最適化により使用メモリを 節約する。だが、このオプションは 88open の仕様に反する。 その反対のオプション ‘-mno-optimze-arg-area’ は、 88open 規格に一致する。デフォルトでは、引数領域の最適化は行なわない。

-mshort-data-num

データへの参照をより小さくするために、それらをr0 相対にする。 これにより、値をロードするのが一個の命令でできるようになる (普通は命令二個必要である)。どのデータ参照が影響を受けるかは、 このオプションで指定する num で調整できる。 例えば、‘-mshort-data-512’ と指定すると、影響を受けるデータ参照は 512 バイト未満の変位を含むものである。 ‘-mshort-data-num’ は、num が 64k より大きいと 効果がない。

-mserialize-volatile
-mno-serialize-volatile

逐次的な揮発性メモリ参照の一貫性を保証するコードを生成する、あるいは 生成しない。 デフォルトでは一貫性は保証される。

MC88110 プロセッサによりなされるメモリ参照の順序は、 その参照を必要とする命令の順序には必ずしも一致しない。 特に、ロード命令は先行するストア命令よりも先に実行される可能性がある。 このような並べ替えは、逐次的な揮発性メモリ参照の一貫性を、 マルチプロセッサの場合には破る。一貫性が保証されなければ ならない場合は、GNU C は必要に応じて特別な命令を生成し、強制的に 適切な順序で実行させるようにする。

MC88100 プロセッサはメモリ参照の並べ替えを行なわないので、常に 逐次的な一貫性を提供する。だが、GNU C はデフォルトでは、 ‘-m88100’ を指定した場合でも、特別な命令を生成し、一貫性を保証するので、 その生成コードは M88110 プロセッサでも実行可能である。 M88100 プロセッサでしか実行しないつもりなら、 ‘-mno-serialize-volatile’ を指定することができる。

一貫性を保証するために生成された余分のコードは、読者のアプリケーション の実行速度に影響を及ぼす可能性がある。保証しなくても大丈夫で あることが判っているなら、‘-mno-serialize-volatile’ を 指定することができる。

-msvr4
-msvr3

SVR4 に関係した拡張機能をオンにしたり(‘-msvr4’)、 オフにする(‘-msvr3’。これは以下の事項を制御する。

  1. どのアセンブラ構文の変種を使うか。
  2. -msvr4’ を指定すると、C プリプロセッサが、SVR4 で使われている ‘#pragma weak’ を認識するようになる。
  3. -msvr4’ を指定すると、GCC は SVR4 で使われている追加の 宣言制御子を発行する。

-msvr4’ は、m88k-motorola-sysv4 と m88k-dg-dgux という m88k の コンフィギュレーションではデフォルトになっている。 ‘-msvr3’ は、その他の全ての m88k のコンフィギュレーションで デフォルトになっている。

-mversion-03.00

このオプションは廃れており、無視される。

-mno-check-zero-division
-mcheck-zero-division

整数のゼロによる除算が検出されることを保証するコードを生成するか どうかを指定する。デフォルトでは検出されることが保証される。

MC88100 プロセッサの幾つかのモデルでは、特定の条件下で ゼロによる整数除算をトラップできないことがある。 デフォルトでは、そういうプロセッサで実行される可能性があるコードを コンパイルするときは、GCC はゼロになる除数を明示的に検査し、 検出された場合には例外番号 503 でトラップするコードを生成する。 ‘-mno-check-zero-division’ を使うと、MC88100 プロセッサで実行するように 生成されたコードに対し、この様な検査を行なわない。

GNU C は、MC88110 プロセッサが、ゼロによる整数除算が起こった場合全てを 正しく検出できることを想定している。‘-m88110’ を指定したときは、 ‘-mcheck-zero-division’ も ‘-mno-check-zero-division’ も どちらも無視され、除数がゼロになるかどうかを明示的に検査するコードは 生成されない。

-muse-div-instruction

MC88100 プロセッサでの符号付き整数除算に対し、div 命令を使う。 デフォルトでは、div 命令は使われない。

MC88100 プロセッサでは、符号付きの整数除算命令(div)は、オペランドが 負の場合は OSへのトラップを発生する。OS は透過的に演算を 完了することができるが、実行時間が非常にかかることになる。 デフォルトでは、MC88100 プロセッサで実行される可能性があるコードを コンパイルするときは、GCC は符号付き整数除算を、符号なし整数除算 命令(divu)を使ってエミュレートする。これにより、OS へのトラップという 大きなペナルティを回避している。このエミュレーションのコストは、 実行時間とコードサイズの両面で小さくなっている。 読者のプログラムで、重要な符号付き整数除算が二つの負でないオペランドに 対して実行される範囲なら、div 命令を直接使うのが望ましい。

MC88110 プロセッサの場合は、div 命令(divs 命令としても知られている)は、 OS へのトラップを発生することなく、負のオペランドを処理する。 ‘-m88110’ が指定されたときは、‘-muse-div-instruction’ は 無視され、div 命令が符号付き整数除算に使われる。

INT_MIN を -1 で割った結果は未定義であることに注意して欲しい。 特に、このような割り算の動作は、‘-muse-div-instruction’ の 有無で変わってくる。

-mtrap-large-shift
-mhandle-large-shift

シフトビット数が 31 ビットを越えるものを検出するコードを挿入する。 これらのオプションは、それぞれ、そのようなシフト命令をトラップするか、 正しく取り扱うコードを生成する。 デフォルトでは、GCC はシフトのビット数が大きくても特に何もしない。

-mwarn-passed-structs

関数が引数や戻り値として構造体を渡したときに警告する。 構造体の渡し方の規約は、C 言語が進化するにつれて変わってきており、 移植上の問題の元になることが多い。デフォルトでは、GCC は この警告は出さない。


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

This document was generated using texi2html 1.78.