#pragma reg_killed_by

C に適用 C++ に適用

説明

#pragma reg_killed_by ディレクティブは、指定の関数によって変更 (強制終了) 可能な一連の揮発性レジスターを指定する。この pragma は、#pragma mc_func を使って定義された関数でしか使用できません。

構文


構文図

ここで、


function 以前に #pragma mc_func を使って定義した関数。
regid 指定された function によって変更される、単一レジスターまたは一連のレジスターのシンボル名。一連のレジスターは、ダッシュで区切られた開始および終了の両レジスターのシンボル名を使用して識別されます。レジスターが指定されていない場合、どのレジスターも、指定された function によって変更されません。

シンボル名は、2 つの部分から構成されています。 1 つ目の部分は、レジスター・クラス名であり、 "a" から "z" および/または "A" から "Z" の範囲にある 1 つ以上の文字のシーケンスを使用して指定されます。

2 つ目の部分は、符号なし int の範囲にある整数です。この数値は、レジスター・クラス内の特定のレジスター番号を表します。一部のレジスター・クラスには、レジスター番号の指定が不要であり、レジスター番号を指定しようとすると、エラーが起こります。

regid が指定されていない場合、どの揮発性レジスターも、指定された function によって強制終了されません。


レジスター
クラスおよび [レジスター番号] 説明および使用法
ctr カウント・レジスター (CTR)
cr[0-7] 条件レジスター (CR)
  • このクラス内の各レジスターは、条件レジスター内の 4 ビット・フィールドの 1 つです。
  • 8 CR フィールドのうち、cr0cr1、および cr5-cr7 のみが #pragma reg_killed_by によって指定されることができます。
fp[0-31] 浮動小数点レジスター (FPR)
  • 32 個のマシン・レジスターのうち、 fp0fp13 のみが #pragma reg_killed_by によって指定されることができます。
fs 浮動小数点状況および制御レジスター (FPSCR)
lr リンク・レジスター (LR)
gr[0-31] 汎用レジスター (GPR)
  • 32 個のマシン・レジスターのうち、 gr0、および gr3gr12 のみが #pragma reg_killed_by によって指定されることができます。
vr[0-31] ベクトル・レジスター (Altivec プロセッサーのみ)
xer 固定小数点例外 (XER)

通常、#pragma mc_func によって指定された関数用に生成されたコードは、ご使用のシステムで使用可能な揮発性レジスターをどれでも変更できます。 #pragma reg_killed_by を使用して、そのような関数によって変更される揮発性レジスターの特定のセットを明示的にリストすることができます。このリストにないレジスターは、変更されません。

regid によって指定されたレジスターは、以下の要件を満たさなければなりません。

これらの要件のいずれかが満たされない場合は、エラーが発行され、プラグマは無視されます。

次の例では、 #pragma mc_func によって定義された関数が使用する揮発性レジスターの特定のセットをリストする #pragma reg_killed_by の使用法を示しています。

 
int add_logical(int, int);
#pragma mc_func add_logical {"7c632014" "7c630194"}
                /*   addc       r3 <- r3, r4           */
                /*   addze      r3 <- r3, carry bit    */
 
#pragma reg_killed_by add_logical gr3, xer
                /* only gpr3 and the xer are altered by this function */
 
 
main() {
 
      int i,j,k;
 
      i = 4;
      k = -4;
      j = add_logical(i,k);
      printf("¥n¥nresult = %d¥n¥n",j);
}

関連参照

汎用プラグマ
#pragma mc_func IBM Copyright 2003