void __alignx(int alignment,
const void *address); |
指定された address が、既知のコンパイル時オフセットで位置合わせされることをコンパイラーに通知します。alignment は、ゼロ以上で 2 乗の値を持つ正の定数整数でなければなりません。 |
void __builtin_return_address
(unsigned int level); |
現行関数またはその呼び出し側の 1 つの戻りアドレスを戻します。ここで、level 引数は呼び出しスタックをスキャンするフレームの数を示す定数リテラルです。
level は 0 から 63 の範囲です。0 の値は現行関数の戻りアドレスを戻し、1 の値は現行関数などの呼び出し側の戻りアドレスを戻します。
注:
- スタックの先頭に到達すると、関数は 0 を戻します。
- level は 0 から 63 の範囲でなければなりません。これ以外の場合は、警告メッセージが発行され、コンパイルが停止します。
- 関数がインライン化されている場合、戻りアドレスは戻り先の関数の戻りアドレスに対応します。
- コンパイラーの最適化は、インライン化などの最適化により、追加のスタック・フレームが導入されたり、または予期されたよりスタック・フレーム数が少なくなることにより、予期された戻り値に影響することがあります。
|
void __builtin_frame_address
(unsigned int level); |
現行関数、またはその呼び出し側の 1 つの関数フレームのアドレスを戻します。ここで、level 引数は呼び出しスタックをスキャンするフレームの数を示す定数リテラルです。
level は 0 から 63 の範囲です。0 の値は現行関数のフレーム・アドレスを戻し、1 の値は現行関数などの呼び出し側のフレーム・アドレスを戻します。
注:
- スタックの先頭に到達すると、関数は 0 を戻します。
- level は 0 から 63 の範囲でなければなりません。これ以外の場合は、警告メッセージが発行され、コンパイルが停止します。
- 関数がインラインの場合、フレーム・アドレスは戻り先の関数のフレーム・アドレスに対応します。
- コンパイラーの最適化は、インライン化などの最適化により、追加のスタック・フレームが導入されたり、または予期されたよりスタック・フレーム数が少なくなることにより、予期された戻り値に影響することがあります。
|
void __fence(void); |
コード・モーション、またはマシン・インストラクションの再配列を行うコンパイラーの最適化に対するバリアとして機能します。コンパイラーの最適化は、__fence 呼び出しのロケーションより先までマシン・インストラクションを移動しません。この構成は、最適化が使用可能になっている場合に、コンパイラーによって生成されるオブジェクト・コードでの命令の順序を保証するために有用です。 |
unsigned long __mftb(); |
Move from Time Base
32 ビット・コンパイル・モードでは、時間基準レジスターの下位のワードを戻し、__mftbu 組み込み関数と共に使用して時間基準レジスター全体を読み取ることができます。64 ビット・モードでは、ダブルワード時間基準レジスター全体を戻します。
注:
__fence 組み込み関数を __mftb 組み込み関数の前後に挿入することをお勧めします。
|
unsigned int __mftbu(); |
Move from Time Base Upper
32 ビット・コンパイル・モードでは、時間基準レジスターの上位のワードを戻し、__mftb組み込み関数と共に使用して時間基準レジスター全体を読み取ることができます。64 ビット・モードでは、 ダブルワード時間基準レジスター全体を戻します。したがって、__mftbu と別個に使用することは不要です。
注:
__fence 組み込み関数を __mftbu 組み込み関数の前後に挿入することをお勧めします。
|
unsigned long __mfmsr (void); |
MSR の内容を、指定された GPR のビット 32 から 63 に移動します。この命令の実行は特権が付いており、監視プログラム・モードのみに制限されます。 |
unsigned __mfspr(const int registerNumber); |
指定された特殊目的レジスター registerNumber の値を戻します。registerNumber はコンパイル時に既知でなければなりません。 |
void __mtmsr (unsigned long); |
指定された GPR のビット 32 から 63 の内容を、MSR に移動します。この命令の実行は特権が付いており、監視プログラム・モードのみに制限されます。 |
void __mtspr(const int registerNumber, unsigned long value); |
特殊目的レジスター registerNumber の値を、符号なし長整数値 value で設定します。両方の値がコンパイル時に既知でなければなりません。 |