-
-msmall-divides
- ハードウェア除算器がない場合に、小さい数値の除算に対して最適化されたコードを生成します。分母と分子が 0 ~ 15 の間にあるような符号付き整数の除算では、このオプションを使用するとルックアップ テーブルに基づく高速の除算ができるようになります。ハードウェア除算器がイネーブルの場合は、このオプションは無視されます。
-
-mxl-gp-opt
- プログラムに上位 16 ビットに 0 以外の値が含まれているアドレスがある場合、読み込みまたは格納操作には 2 つの命令が必要です。
MicroBlaze プロセッサ ABI には 2 つのグローバル スモール データ領域があり、それぞれ 64 KB までのデータを保存できます。これらのデータ領域にあるメモリ ロケーションには、スモール データ領域アンカーおよび 16 ビットの即値を使用してアクセスできるので、スモール データ領域への読み込みまたは格納操作を 1 つの命令のみで実行できます。この最適化をオンにするには、
-mxl-gp-opt
オプションを使用します。サイズがしきい値未満の変数はこれらの領域に保存され、少ない命令数でアドレス指定できます。アドレスはリンク段階で計算されます。重要: このオプションを使用する場合、プログラムのビルド プロセスのコンパイル コマンドとリンク コマンドの両方で指定する必要があります。いずれか一方のみで使用すると、コンパイル、リンク、またはランタイム エラーが発生する可能性があります。 -
-mno-clearbss
- このオプションは、シミュレーションで使用するプログラムをコンパイルする際に有益です。
C 言語のルールに基づき、初期化されていないグローバル変数は .bss セクションに割り当てられ、プログラム実行開始時の値は常に 0 になります。通常、プログラム実行開始時に、.bss セクションが 0 で埋められるように C スタートアップ ファイルをループで実行します。また、コンパイラを最適化した場合も、C コードで 0 に割り当てられたグローバル変数が
.bss
セクションに割り当てられます。シミュレーション環境では、上記の 2 言語機能は余分なオーバーヘッドとなる場合があります。シミュレータによっては、メモリ全体を自動的に 0 にするものがあります。通常の環境であっても、グローバル変数が開始時に 0 になっていなくても良いような C コードを記述できます。そのような場合にこのオプションが役立ちます。このオプションを使用すると、C スタートアップ ファイルにより
.bss
セクションが 0 に初期化されることはなくなります。また、このオプションは .bss セクションに 0 に初期化されたグローバル変数を割り当てず、.data
セクションに移動します。このオプションにより、アプリケーションの起動時間が短縮される場合があります。このオプションを使用する場合はよく注意してください。また、グローバル変数を 0 に初期化することを前提にしているコードを使用しない、またはシミュレーション プラットフォームが自動的にメモリを 0 に初期化するコードを使用しないようにしてください。 -
-mxl-stack-check
- プログラムの実行中にスタック オーバーフローが発生しているかどうかをチェックするよう指定します。
コンパイラは、各関数のプロローグ コード内に、スタック ポインター値と使用可能なメモリを比較するコードを挿入しますが、スタック ポインターが使用可能なメモリを超えている場合は、プログラムはサブルーチン
_stack_overflow_exit
に飛びます。このサブルーチンは、variable _stack_overflow_error
の値を 1 に設定します。スタック オーバーフロー ハンドラーとして機能する関数
_stack_overflow_exit
をソース コードに含めると、標準のスタック オーバーフロー ハンドラーの代わりとして使用できます。