[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下の ‘-m’ オプションが、TMS320C3x/C4x の実装用に定義されている。
-mcpu=cpu_type
機種型 cpu_type 用の命令セット、レジスタセット、命令スケジューリング のパラメータを設定する。cpu_type の値として使えるのは、 ‘c30’、‘c31’、‘c32’、‘c40’、‘c44’ である。 デフォルトは ‘c40’ であり、TMS320C40 用のコードを生成する。
-mbig-memory
-mbig
-msmall-memory
-msmall
ビッグ・メモリ・モデルあるいはスモール・メモリ・モデル向けのコードを 生成する。スモール・メモリ・モデルでは、全てのデータが一個の 64K語ページに 収まると想定する。実行時には、データページ(DP)レジスタが、 .bss と .data セクションを含むその 64K ページを指すように設定されて いなければならない。ビッグ・メモリ・モデルがデフォルトであり、 直接的なメモリアクセス毎に DP レジスタの再ロードを必要とする。
-mbk
-mno-bk
一般的な整数オペランドをブロックカウントレジスタ BK に割り当てることを 許す(許さない)。
-mdb
-mno-db
デクリメントして分岐、すなわち DBcond(D) 命令を使うコードの 生成を有効にする(無効にする)。C4x ではデフォルトで有効になる。 安全のために C3x では無効になっている。C3x での最大繰り返し回数は 2^23+1だからである。 (でも一体誰が C3x で 2^23 回以上ループを繰り返すだろうか?) GCC は、ループを逆順に回して、デクリメントして分岐命令をなるべく 使えるようにするが、ループの中にメモリ参照が複数回ある場合は あきらめてしまう。つまり、RPTB 命令が利用できない ループカウンタがデクリメントされるループの場合でも、 幾らか効率の良いコードを生成することが可能になる。
-mdp-isr-reload
-mparanoid
DP レジスタを、割り込みサービスルーチン(ISR) の入り口点でセーブし、 データセクションを指すように再ロードし、ISR の出口点でリストアすることを 強制する。これは、だれかが、例えばあるオブジェクトライブラリ内で、 DP レジスタを変更することで小メモリモデルに違反しない限り、 必要とすべきではない。
-mmpyi
-mno-mpyi
C3x に対しては、整数の乗算にはライブラリ呼出しの代わりに
24 ビット MPYI 命令を使い、32ビットの結果を保証する。
オペランドの一つが定数なら、この乗算はシフトと加算を使って実行される
ことに注意。C3X の場合に -mmpyi
オプションを指定しないと、
ライブラリ呼出しの代わりに、平方演算がインラインで行われる。
-mfast-fix
-mno-fast-fix
浮動小数点値を整数値に変換する C3x/C4x の FIX 命令で、その浮動小数点値に 最も近い整数ではなく、浮動小数点値以下の最も近い整数を選ぶ。 このため、浮動小数点値が負なら、結果が不正に打ち切られるので、それを 検出して補正するコードが追加で必要になる。このオプションを使うと、 結果の補正に必要な追加コードの生成を無効にすることができる。
-mrptb
-mno-rptb
オーバヘッド無しのループ化のために、RPTB 命令を使った繰り返しブロック列 を生成することを有効にする。RPTB 構文は、最内側のループで、関数呼出しや ループ境界を越えるジャンプがない場合にだけ使われる。RPTB ループを 入れ子にするのは、RC、RS、RE レジスタをセーブ/リストアするのに 必要なオーバーヘッドがあるので、利点はない。これは、-O2 を 指定した場合にデフォルトで有効になる。
-mrpts=count
-mno-rpts
一個の命令を繰り返す命令 RPTS を使うことを有効にする(無効にする)。 繰り返しを行うブロックに命令が一個あり、ループ回数が count 未満で あることが保証可能なら、GCC は RPTB の代わりに RPTS 命令を生成する。 値を指定しない場合は、ループ回数がコンパイル時に決定できなくても RPTS が生成される。RPTS に続く繰り返される命令は、各繰り返しで メモリから再ロードする必要はないので、オペランドに対して CPU バスを 解放する。ただし、割り込みはこの命令によりブロックされるので、 デフォルトでは無効になっている。
-mloop-unsigned
-mno-loop-unsigned
RPTS と RPTB(それに C40 の場合は DBも)を使うときの最大の繰り返し回数は 2^23 + 1 である。これらの命令は、繰り返し回数が負であるかどうかをテスト して、ループを終了させるからである。繰り返し回数が符号無しであれば、 最大繰り返し回数が 2~23 + 1 を越える可能性がある。このオプションは 符号無しの繰り返し回数を許す。
-mti
TI アセンブラ(asm30) 向けのアセンブラ構文を出力する。 また、TI C3x C コンパイラで採用されている API との互換性も強要する。 例えば、long double 型は浮動小数点レジスタに入れてではなく構造体として 渡される。
-mregparm
-mmemparm
関数に引数を渡すのにレジスタ(スタック)を使うコードを生成する。 デフォルトでは、引数は可能な所では、スタックに引数をプッシュするのではなく、 レジスタで渡される。
-mparallel-insns
-mno-parallel-insns
並列命令の生成を許す。-O2 を指定した場合はデフォルトで有効になる。
-mparallel-mpy
-mno-parallel-mpy
‘-mparallel-insns’ も指定されている場合に、 並列命令 MPY||ADD と MPY||SUB の生成を許す。 これらの命令はレジスタの制約がきついので、大きな関数のコード生成を やりにくくする。
This document was generated
using texi2html 1.78.