[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.6 定数式型

最も簡単な RTL 式は、定数値を表すものである。

(const_int i)

この型の式は、整数値 i を表す。i は、マクロ INTVAL を 使って INTVAL (exp) のように参照するのが良く行われる。 これは、XWINT (exp, 0) と書くのと同じである。

整数値 0 を表す式オブジェクトは唯一つしかなく、変数 const0_rtx の値だけである。 同じく、整数値 1 に対する式は、const1_rtx だけであり、 整数値 2 に対する式は、const2_rtx だけである。 さらに、整数値 -1 に対する式は constm1_rtx だけである。 コードが const_int で、値が 0, 1, 2, -1 のどれかの 式を作ろうとすると、それぞれ、const0_rtxconst1_rtxconst2_rtxconstm1_rtx が返される。

同様に、値が STORE_FLAG_VALUE である整数に対するオブジェクトは 唯一つだけで、const_true_rtx になる。STORE_FLAG_VALUE が 1 であれば、const_true_rtxconst1_rtx は同じオブジェクトを 指す。STORE_FLAG_VALUE が -1 なら、const_true_rtxconstm1_rtx は同じオブジェクトを指すことになる。

(const_double:m addr i0 i1 …)

モード m の浮動小数点定数か、HOST_BITS_PER_WIDE_INT ビット には収まらないが HOST_BITS_PER_WIDE_INT の二倍のビット数になら 収まるような整数定数を表す(GNU CC は、それ以上に大きい定数を表現する 機能は提供していない)。後者の場合は、mVOIDmode になる。

addr は、定数が置かれているメモリ上の位置に対応する mem 式を 保持する。メモリ上の位置は確保されていないが、現在のコンパイル (表示されないフィールドを使い維持されている)の全ての const_double 式の連鎖上には存在するなら、addrconst0_rtx を含む。 その連鎖に存在しなければ、addrcc0_rtx を含む。 addr は、マクロ CONST_DOUBLE_MEMCONST_DOUBLE_CHAIN を経由した連鎖フィールドを使って アクセスするようになっている。

mVOIDmode なら、値を表すビット群は i0i1 に格納される。i0 はマクロ CONST_DOUBLE_LOW で、i1CONST_DOUBLE_HIGH で参照するのが通例となっている。

定数が浮動小数点数なら(精度に関わらず)、その値を格納するのに必要な 整数の個数は、REAL_VALUE_TYPE に依存する(see section クロスコンパイルと浮動小数点)。 その整数群は浮動小数点数を表現するが、厳密にはターゲットマシンまた ホストマシンの浮動小数点数形式ではない。ターゲットマシンで使われる 正確なビットパターンに変換するには、マクロ REAL_VALUE_TO_TARGET_DOUBLE と関連マクロを使用すること(see section データの出力)。

マクロ CONST0_RTX (mode) は、値が 0 でモードが mode の 式を参照する。モード mode が、MODE_INT のクラスのモードであれば、 const0_rtx を返す。そうでなければ、モード modeCONST_DOUBLE 式を返す。 同様に、マクロ CONST1_RTX (mode) は、値が 1 でモード mode の式を参照する。CONST2_RTX についても同様である。

(const_string str)

値が str である文字列定数を表す。 現時点では、この式は insn の属性(see section 命令の属性)についてのみ 使われている。というのは、C 言語の文字列定数はメモリ中に置かれるからである。

(symbol_ref:mode symbol)

アセンブラのデータに対するラベルの値を表現する。 symbol は、アセンブララベル名を記述する文字列である。 この文字列が ‘*’ で始まるなら、ラベル名は、symbol から ‘*’ を除いたものになる。それ以外の場合は、symbol そのものが ラベル名となり、通常は ‘_’ というプレフィックスが付く。

symbol_ref にはモードがあり、普通は Pmode になる。 普通は、このモードがシンボルに対して直接有効になる唯一のモードである。

(label_ref label)

コードに対するアセンブラ・ラベルの値を表現する。 オペランドは一つであり、それは式となる。この式は、ラベルの置かれるべき 位置を特定するための命令列に現れる code_label でなければならない。

コードラベルの参照に異なる式のタイプを使用するのは、 ジャンプ最適化で区別できるようにするためである。

(const:m exp)

アセンブル時の代数計算の結果として生じる定数を表現する。 オペランド exp は、定数(const_intsymbol_reflabel_ref 式)に plusminus を組み合わせたもののみ からなる式である。ただし、全ての組合せが有効とは限らない。 アセンブラは、再配置可能なシンボルについては勝手な計算は出来ないからである。

mPmode でなければならない。

(high:m exp)

exp、普通は symbol_ref の上位ビット群を表現する。 ビット数は機種依存であり、通常はレジスタの上位ビットを初期化する 命令で指定されるビット数になる。 lo_sum と共に使って、RISC で良く使われる、グローバルなメモリ位置を 参照する典型的な二命令の列を表現する。

mPmode でなければならない。


This document was generated using texi2html 1.78.