[ < ] | [ > ] | [ << ] | [ 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 コードである。
1
NEG
や NOT
、ABS
等の単項算術演算用の
RTX コードである。このカテゴリには、値の拡張(符号付きも符号無しも)や
整数と浮動小数点の間の変換も含まれる。
c
PLUS
や AND
等の交換可能な二項演算の RTX コードである。
NE
と EQ
は比較なので、<
クラスになる。
2
MINUS
や 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。
m
MATCH_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
である。
<
c
2
このクラスのコードのフォーマットは全て ee
である。
b
3
このクラスのコードのフォーマットは全て eee
である。
i
このクラスのコードのフォーマットは全て iuueiee
で始まる。
ある insn の連鎖にリンクされた RTL オブジェクトのクラスが全て
i
ではないことに注意。
o
m
x
これらのコードのフォーマットについては何ら想定を置くことはできない。
This document was generated
using texi2html 1.78.