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

2.14.18 DEC Alpha オプション

以下の ‘-m’ オプションが、DEC Alpha の実装向けに定義されている。

-mno-soft-float
-msoft-float

浮動小数点演算に対してハードウェア浮動小数点命令を使う(使わない)。 -msoft-float を指定すると、‘libgcc1.c’ にある関数が 浮動小数点演算を実行するのに使われる。 浮動小数点演算をエミュレートするルーチンで置き換えるか、 そのようなエミュレートを行うルーチンを呼び出すようにコンパイルされるか しない限り、これらのルーチンは浮動小数点演算を発行する。 浮動小数点演算なしの Alpha ようにコンパイルを行うなら、 ライブラリがそれらのルーチンを呼び出さないように構築されることを 保証しなければならない。

浮動小数点演算なしの Alpha の実装でも浮動小数点レジスタが必要である ことに注意。

-mfp-reg
-mno-fp-regs

浮動小数点レジスタセットを使う(使わない)コードを生成する。 -mno-fp-regs を指定すると -msoft-float が暗黙に指定される。 浮動小数点レジスタセットが使われない場合、浮動小数点オペランドは それが整数であるかのように整数レジスタに入れて渡され、浮動小数点の結果は $f0 の代わりに $0 で返される。これは標準の呼出しシーケンスとは 違うので、-mno-fp-regs 付きでコンパイルしたコードから 呼び出される関数で、浮動小数点引数や戻り値を持つものもまた、この オプションを指定してコンパイルしなければならない。

このオプションが使われるのは、普通は、浮動小数点レジスタを使わず、 それゆえに浮動小数点レジスタをセーブ/リストアする必要のない カーネルを構築するときである。

-mieee

Alpha アーキテクチャは、浮動小数点用ハードウェアを最大の性能を出すように 最適化して実装している。この実装は、IEEE 浮動小数点規格にほぼ準拠している。 だが、完全に準拠するには、ソフトウェアによる補助が必要である。 このオプションにより、inexact flag が保持されない(下記参照)という 点を除いて、IEEE に完全に準拠したコードを生成する。 このオプションが有効になっていると CPP マクロ _IEEE_FP が コンパイル時に定義される。 このオプションは、‘-D_IEEE_FP -mfp-trap-mode=su -mtrap-precision=i -mieee-conformant’ の省略形である。 この結果生成されるコードは幾らか効率が落ちるが、非正規化数と、 非数と正負の無限大のような IEEE の例外値を正しくサポートできる。 他の Alpha 用コンパイラはこのオプションを -ieee_with_no_inexact と 呼んでいる。

-mieee-with-inexact

これは ‘-mieee’ と同様だが、生成されたコードは IEEE の inexact flag の維持も行う。このオプションを有効にすると、生成されたコードは 完全に準拠した IEEE の数学演算を実装することになる。 このオプションは、‘-D_IEEEFP -D_IEEE_FP_INEXACT’ に加えて、 ‘-mieee-conformant’、‘-mfp-trap-mode=sui’、 ‘-mtrap-precision=i’ の三つの オプションを指定したものの省略形である。 Alpha の実装の中にはこうして得られたコードが、デフォルトで生成される コードよりも非常に遅くなるものがある。inexact flag に 依存するようなコードは滅多にないので、このオプションを普通は 指定しなくて良いはずである。他の Alpha 用コンパイラはこのオプションを ‘-ieee_with_inexact’ としている。

-mfp-trap-mode=trap mode

このオプションは、どの浮動小数点関係のトラップを有効にするかを 扱う。他の Alpha 用コンパイラでは、 ‘-fptmtrap mode と言っているものである。 trap mode には以下の四つの値のうち一つを設定可能である。

n

これはデフォルト(通常、normal)の設定である。有効になるトラップは、 ソフトウェアでは無効にできないもの(例えば、ゼロによる除算)だけである。

u

n’ で有効になるトラップに加えて、アンダーフローによるトラップが 有効になる。

su

u’ と同様だが、命令は、ソフトウェア補完(詳細については、 Alpha のアーキテクチャマニュアルを参照のこと)に対して安全であるとの 印がつけられる。

sui

su’ と同様だが、不正確なトラップも同じく有効になる。

-mfp-rounding-mode=rounding mode

IEEE の丸めモードを選択する。他の Alpha 用コンパイラでは、 ‘-fprmrounding mode と言っているものである。 rounding mode は以下のどれか一つである。

n

通常の IEEE 丸めモード。浮動小数点数は最近のハードウェアで表現できる 数に向かって丸められる。二つの数のちょうど中間の場合は偶数の方に 向かって丸められる。

m

負の無限大に向かって丸める。

c

切り捨て丸めモード。浮動小数点数はゼロに向かって丸められる。

d

動的丸めモード。浮動小数点制御レジスタ(fpcr、Alpha アーキテクチャ 参照マニュアルを参照のこと)中のあるフィールドが有効になる丸めモードを 制御する。C ライブラリは、このレジスタを正の無限大に向かって丸めるモードに 初期化する。このため、プログラムで fpcr を変更しない限り、 ‘d’ は正の無限大に向かっての丸めに対応する。

-mtrap-precision=trap precision

Alpha アーキテクチャでは、浮動小数点トラップは不正確である。 これは、ソフトウェアの助けを借りなくては、浮動小数点トラップから回復するのが 不可能であり、プログラムの実行は普通は終了させる必要があるといことを 意味する。GCC は OS のトラップ・ハンドラを助けるコードを生成し、 浮動小数点トラップが発生した正確な位置を特定することを可能にする。 アプリケーションの要求に応じて、正確さのレベルを以下から選択することが できる。

p

プログラム精度。このオプションはデフォルトであり、トラップハンドラは どのプログラムが浮動小数点例外を引き起こしたかしか特定できないことを 意味する。

f

関数精度。トラップハンドラは浮動小数点例外を引き起こした関数を 決定することができる。

i

命令精度。トラップハンドラは浮動小数点例外を引き起こした命令そのものを 決定できる。

他の Alpha 用コンパイラは、これらに等価なオプション ‘-scope_safe’ や ‘-resumption_safe’ を用意している。

-mieee-conformant

このオプションは、生成されたコードに IEEE に適合しているとの マークを付ける。このオプションを使うときは、‘-mtrap-precision=i’と、 ‘-mfp-trap-mode=su’ か ‘-mfp-trap-mode=sui’ のどちらかを 指定しなければならない。このオプションの効果は、生成されたアセンブリ ファイルの関数プロローグ部に ‘.eflag 48’ という行を一行 加えるだけである。DEC Unix では、これには、 IEEE適合数学ライブラリルーチンが リンクされるという効果がある。

-mbuild-constants

通常 GCC は、32 ビットまたは 64 ビットの整数定数について、 それがより小さな定数から二つまたは三つの命令で構築できるかどうかを 調べる。それが出来ない場合は、その定数をそのまま出力し、 実行時にデータ・セグメントからをロードするコードを生成する。

このオプションを使うと GCC は、たとえ、さらに命令数が 増えることになっても(最大で6個)、全ての整数定数を命令コードで 構築する。

このオプションを使う代表的な場合は、共有ライブラリの動的ローダを 構築するときである。動的ローダはそれ自身共有ライブラリであり、 変数や定数を自分自身のデータセグメントから見つけられるようになる前に、 メモリ中で自分自身を再配置しなければならない。

-malpha-as
-mgas

ベンダ提供のアセンブラによりアセンブルされるコードを生成する (‘-malpha-as’)か、GNU アセンブラ(‘-mgas’)にアセンブル されるコードを生成するかを選択する。

-mbwx
-mno-bwx
-mcix
-mno-cix
-mmax
-mno-max

オプションの命令セット、BWX、CIX、MAX を使うコードを生成するよう GCC に指示する。デフォルトは、‘-mcpu=’ オプションで指定した CPU 型でサポートされている命令セットか、何も指定されない場合は GCC の構築を行った CPU のものになる。

-mcpu=cpu_type

命令セット、レジスタセット、命令スケジューリング・パラメータを 機種 cpu_type 用に設定する。‘EV’ 形式の名前を 指定することもできるし、それに対応する CPU チップ番号を指定することも できる。GCC は、EV4 と EV5 シリーズのプロセッサ用のスケジューリング・ パラメータをサポートしており、命令セットのデフォルト値はユーザが 指定したプロセッサから選択する。プロセッサ型を指定しない場合は、 GCC は、GCC の構築を行ったプロセッサをデフォルトにする。

cpu_type の値として使えるのは以下の通り。

ev4
21064

EV4 としてスケジューリングを行ない、命令セットの拡張はないものとする。

ev5
21164

EV5 としてスケジューリングを行ない、命令セットの拡張はないものとする。

ev56
21164a

EV5 としてスケジューリングを行ない、BWX 拡張をサポートする。

pca56
21164pc
21164PC

EV5 としてスケジューリングを行ない、BWX と MAX 拡張をサポートする。

ev6
21264

EV5 としてスケジューリングを行ない(DEC が EV6 用のスケジューリング パラメータを発表するまでは)、BWX、CIX、MAX 拡張をサポートする。

-mmemory-latency=time

アプリケーションから見える典型的なメモリ参照に対し、 スケジューラが想定すべきレイテンシを設定する。 この数は、アプリケーションが使うメモリアクセスパタンと外部キャッシュの 大きさに非常に依存する。

time として有効な値は以下の通りである。

number

クロック数を表す 10進数。

L1
L2
L3
main

GCC は、「典型的な」 EV4 と EV5 のハードウェアについては、レベル 1、2、3 のキャッシュを持つ場合についてのクロックサイクル数の 見積値を、主記憶にたいするものと同様に保持している。 L3 は EV5 に対してのみ有効であることに注意。


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

This document was generated using texi2html 1.78.