Everything

-switch


switch文のコード出力形式を指定します。

[指定形式]

-switch={ifelse|binary|abs_table|rel_table}

 

-

省略時解釈

コンパイラがswitch文ごとに最適な出力形式を 自動的に選択します。

[詳細説明]

-

switch文のコード出力形式を指定します。

-

指定可能なパラメータを以下に示します。
これ以外のものを指定した場合は,エラーとなります。

ifelse

caseラベルを1つずつ比較する形式で出力します。

case文の数が少ないときに,本項目を指定します。

binary

バイナリ・サーチ形式で出力します。

バイナリ・サーチ・アルゴリズムを用いて合致するcase文を探します。

ラベル数が多いときに本項目を選択すると,どのcase文も同じくらいの速さで見つけることができます。

abs_table

rel_table

switch文のcase分岐テーブルを用いる方式で出力します。

case値を基にインデックス化したテーブルを参照し,case値から各caseラベルの位置を取得して分岐します。どのcaseラベルにも同じくらい速く分岐します,case値が連続していない場合はテーブル内に無駄な領域が生じます。

case値の最大値と最小値の差が8192を超えるswitch文に対しては,本オプションを無視して省略時解釈のとおりに処理します。

abs_tableを指定した場合,テーブルには各caseラベル位置の絶対アドレスを登録します。

rel_tableを指定した場合,テーブルには分岐命令から各caseラベル位置までの相対距離を登録します。ただし,相対距離が64Kバイトを超える場合にはリンク・エラーとなります。

switch文を持つ関数がnear領域へ配置する関数である場合は,どちらのパラメータを使用していても,絶対アドレスによるテーブルを用いたコードを生成します。

-

ミラー領域がないデバイスでは-far_romオプションを指定してください。

-

パラメータを省略した場合は,エラーとなります。

[使用例]

-

switch文のコードに対して,バイナリ・サーチ形式で出力します。

>ccrl -switch=binary -cpu=S2 -dev=dr5f100pj.dvf main.c