switch文のコード出力形式を指定します。
[指定形式]
-switch={ifelse|binary|abs_table|rel_table}
|
コンパイラが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
|