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

15.2 RTL クラスとフォーマット

様々な式コードは幾つかのクラスに分類される。そのクラスは 一文字で表現される。ある RTX コードのクラスは、マクロ GET_RTX_CLASS (code) を使って知ることができる。 現在、‘rtx.def’ では以下のクラスを定義している。

o

実際のオブジェクト、例えば、レジスタ(REG)やメモリ位置 (MEMSYMBOL_REF)等の実際のオブジェクトを表す RTX コードである。定数やオブジェクトに基本的な変換を施したもの (ADDRESSOFHIGHLO_SUM)も含まれる。 SUBREGSTRICT_LOW_PART はこのクラスには 含まれず、クラス x に含まれることに注意。

<

NELT 等の比較用の RTX コードである。

1

NEGNOTABS 等の単項算術演算用の RTX コードである。このカテゴリには、値の拡張(符号付きも符号無しも)や 整数と浮動小数点の間の変換も含まれる。

c

PLUSAND 等の交換可能な二項演算の RTX コードである。 NEEQ は比較なので、< クラスになる。

2

MINUSDIVASHIFTRT 等の交換可能でない 二項演算の RTX コードである。

b

ビットフィールド演算の RTX コードである。現時点では、 ZERO_EXTRACTSIGN_EXTRACT だけである。 これらは入力が三つあり、左辺値である(そのため、挿入にも同じように 使える)。See section ビットフィールド

3

その他の3入力演算の RTX コードである。現時点では、 IF_THEN_ELSE のみでる。

i

命令全体を表す RTX コードである。INSNJUMP_INSNCALL_INSN がある。See section Insns

m

MATCH_DUP 等の、insn にマッチする何かを表す RTX コードである。 マシン記述にのみ現れる。

x

その他の全ての RTX コードである。このカテゴリには、マシン記述でしか 使われない(DEFINE_* 等)残りのコードが含まれる。 副作用を記述する全てのコードと insn の連鎖に現れる、NOTEBARRIERCODE_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.