(SPARC) メモリー境界整列の最大値の想定と、境界整列不正データへアクセスした時の動作を指定します。
コンパイル時に境界整列を決定できるメモリーアクセスの場合、コンパイラは、そのデータ境界整列に適したロード/ストア命令のシーケンスを生成します。
コンパイル時に境界整列を決定できないメモリーアクセスの場合、コンパイラは、境界整列を想定して、必要なロード/ストア命令のシーケンスを生成します。
-xmemalign フラグを使用すると、このようなあいまいな状況の場合にコンパイラが想定するデータの最大メモリー境界整列を指定することができます。整列不正データへのメモリーアクセスが行われた場合の実行時エラーの動作も指定します。
指定する値は、2 種類です。すなわち、数値の境界整列値 <a> と、英数字の動作フラグ <b> です。
境界整列値 <a> に指定できる値は、次のとおりです。
最大で 1 バイトの境界整列を想定します。
最大で 2 バイトの境界整列を想定します。
最大で 4 バイトの境界整列を想定します。
最大で 8 バイトの境界整列を想定します。
最大で 16 バイトの境界整列を想定します。
不正境界整列データにアクセスした場合のエラーの動作を表す <b> に指定できる値は、次のとおりです。
アクセスを解釈し、実行を継続します。
SIGBUS という信号を発生させます。
64 ビットのプラットフォームでは、4 バイト以下の境界整列にだけ SIGBUS 信号を発生させます。それ以外ではアクセスを解釈して実行を継続します。その他のプラットフォームでは、f は i と等価です。
-xmemalign を指定しない場合のコンパイル時のデフォルト値は、次のようになります。
32 ビットのプラットフォームの場合は、8i
C および C++ の 64 ビットのプラットフォームの場合は、8s
Fortran の 64 ビットのプラットフォームの場合は、8f
値をまったく指定しない場合の -xmemalign のデフォルト値は、すべてのプラットフォームで 1i です。
-xmemalign そのものは、特定のデータ整列を強制的に行わせることはありません。強制的にデータ境界整列を行わせるには、-dalign または -aligncommon を使用してください。
-dalign オプションはマクロです。
-dalign は -xmemalign=8s -aligncommon=16 のマクロです。
詳細は、「3.4.2 -aligncommon[ ={1|2|4| 8|16}]」を参照してください。