<コンパイル・オプション / 最適化オプション>
[指定形式]
optimize=maxオプションを指定した場合はmapです。
[詳細説明]
- | 最適化リンケージエディタが生成する外部シンボル割り付け情報を元にベースアドレスを設定し、外部変数もしくは静的変数のアクセスをベースアドレス相対で行うコードを生成します。 |
- | mapオプションによる外部変数アクセス最適化を使用する場合は、outputオプションの指定により使い方が異なります。 |
- | [output=abs、output=styまたはoutput=hexの場合]
mapのみ指定してください。コンパイラが自動的にコンパイル・リンクを2回行い、外部シンボル割り付け情報を元にベースアドレスを設定したコード生成を行います。なお、output=abs、output=styまたはoutput=hexと、optimize=maxを同時に指定した場合、mapが暗黙に指定されます。 |
- | [output=objの場合]
ソースファイルを本オプションを指定しないで一度コンパイルし、最適化リンケージエディタでのリンク時にmap=<ファイル名>を指定して外部シンボル割り付け情報ファイルを作成し、再度ccrxにmap=<ファイル名>を指定してコンパイルしてください。 |
[例]
long A,B,C;
void func()
{
A = 1;
B = 2;
C = 3;
}
|
_func:
MOV.L #_A,R4 ; A のアドレスをベースアドレスに設定
MOV.L #1,[R4]
MOV.L #2,4[R4] ; A のアドレスをベースとして、Bにアクセス
MOV.L #3,8[R4] ; A のアドレスをベースとして、Cにアクセス
|
[備考]
- | 外部変数もしくは静的変数の定義順を変更した場合は、外部シンボルアドレス情報ファイルを生成し直す必要があります。mapオプション以外で1回目のコンパイル時に指定したオプションと異なるオプションを指定した場合と、関数内の処理を追加した場合は、動作は保証しません。これらの場合は必ず外部シンボルアドレス情報ファイルを生成し直してください。 |
- | C/C++ソースをコンパイルする場合のみ適用されます。コンパイル時にoutput=srcを用いて作成、またはアセンブリ言語で記述されたプログラムには適用されません。 |
- | mapオプションとsmapオプションを同時に指定した場合は、mapオプションが有効となります。 |
- | プログラムセクションの次に連続してデータセクションを配置すると、外部変数アクセス最適化が無効になる、あるいは、最適化が十分に機能しない場合があります。 |
- | 最適化を最大限に機能させるためには、連続して複数のセクションを配置させる場合、プログラムセクションを末尾に配置してください。 |
- | Pを0x100番地から、C1,C2をPの直後、C3を0x400番地から配置したとします。 |
- | この場合、Pセクションと連続してC1,C2セクションが配置されているため、C2の後方に配置してください。C3セクションは配置関係が連続していないため無関係です。 |