| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
様々な式コードは幾つかのクラスに分類される。そのクラスは
一文字で表現される。ある RTX コードのクラスは、マクロ
GET_RTX_CLASS (code) を使って知ることができる。
現在、‘rtx.def’ では以下のクラスを定義している。
o実際のオブジェクト、例えば、レジスタ(REG)やメモリ位置
(MEM、SYMBOL_REF)等の実際のオブジェクトを表す
RTX コードである。定数やオブジェクトに基本的な変換を施したもの
(ADDRESSOF、HIGH、LO_SUM)も含まれる。
SUBREG や STRICT_LOW_PART はこのクラスには
含まれず、クラス x に含まれることに注意。
<NE や LT 等の比較用の RTX コードである。
1NEG や NOT、ABS 等の単項算術演算用の
RTX コードである。このカテゴリには、値の拡張(符号付きも符号無しも)や
整数と浮動小数点の間の変換も含まれる。
cPLUS や AND 等の交換可能な二項演算の RTX コードである。
NE と EQ は比較なので、< クラスになる。
2MINUS や DIV、ASHIFTRT 等の交換可能でない
二項演算の RTX コードである。
bビットフィールド演算の RTX コードである。現時点では、
ZERO_EXTRACT と SIGN_EXTRACT だけである。
これらは入力が三つあり、左辺値である(そのため、挿入にも同じように
使える)。See section ビットフィールド。
3その他の3入力演算の RTX コードである。現時点では、
IF_THEN_ELSE のみでる。
i命令全体を表す RTX コードである。INSN、JUMP_INSN、
CALL_INSN がある。See section Insns。
mMATCH_DUP 等の、insn にマッチする何かを表す RTX コードである。
マシン記述にのみ現れる。
xその他の全ての RTX コードである。このカテゴリには、マシン記述でしか
使われない(DEFINE_* 等)残りのコードが含まれる。
副作用を記述する全てのコードと insn の連鎖に現れる、NOTE、
BARRIER、CODE_LABEL 等の非 insn が含まれる。
‘rtl.def’ には、式のタイプ毎に、その式が含むオブジェクトの数と
その種類が記述されている。オブジェクトの種類の書き方としては
次の四つ(五つのtypo?)がある。式(実際には式へのポインタ)の場合は ‘e’、
整数は ‘i’、幅広整数は ‘w’、文字列は ‘s’、式のベクトルは
‘E’ と書く。式コードを表す文字の連なりを フォーマットと呼ぶ。
例えば、subreg のフォーマットは ‘ei’ となる。
その他に以下のフォーマット指定文字が使われる。
u‘u’ は、デバッグ用ダンプで異なった表示がなされる以外は ‘e’ に同じである。insn へのポインタで使われる。
n‘n’ は、デバッグ用ダンプで異なった表示がなされる以外は ‘i’ に
同じである。note insn で行番号やコード番号のために使われる。
S‘S’ は省略可能な文字列を示す。メモリ中での RTL オブジェクトでは、 ‘S’ は ‘s’ に同じであるが、‘md’ ファイルからオブジェクトを 読み込む場合には、このオペランドの文字列値は省かれる。省かれた文字列は ヌル文字列であるとして扱われる。
V‘V’ は省略可能なベクトルを示す。メモリ中での RTL オブジェクトでは、 ‘V’ は ‘E’ に同じであるが、‘md’ ファイルからオブジェクトを 読み込む場合には、このオペランドのベクトル値は省かれる。省かれたベクトルは、 実質的には要素が一つもないベクトルと同じである。
0‘0’ は、通常のカテゴリには収まらないものを入れるためのスロット であることを意味する。‘0’ のスロットは、どのダンプにも表示されず、 gcc の極く一部で特別な使われ方をする。
以下は、オペランド数、式コードのフォーマットを得るためのマクロである。
GET_RTX_LENGTH (code)コードが code である RTX のオペランド数。
GET_RTX_FORMAT (code)コードが code である RTX のフォーマットを C の文字列で 表したもの。
RTX コードの幾つかのクラスは常に同じフォーマットである。
例えば、全ての比較演算のフォーマットは ee であると想定しても
安全である。
1このクラスのコードのフォーマットは全て e である。
<c2このクラスのコードのフォーマットは全て ee である。
b3このクラスのコードのフォーマットは全て eee である。
iこのクラスのコードのフォーマットは全て iuueiee で始まる。
ある insn の連鎖にリンクされた RTL オブジェクトのクラスが全て
i ではないことに注意。
omxこれらのコードのフォーマットについては何ら想定を置くことはできない。
This document was generated
using texi2html 1.78.