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

2.14.23 TMS320C3x/C4x オプション

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