一般プログラム オプション - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: エンベデッド ソフトウェア開発 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 日本語
-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 をソース コードに含めると、標準のスタック オーバーフロー ハンドラーの代わりとして使用できます。