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

15.1 RTL オブジェクト型

RTL は5種類のオブジェクトを使う。式、整数、幅広整数、文字列、ベクトル である。式が最も重要である。ある RTL 式(省略形は“RTX”) は、C 言語の 構造体だが、普通はポインタで参照される。RTL 式の型は typedef 名 rtx で与えられる。

整数は、単に int である。10進数を使って表記する。 幅広整数は、整数型のオブジェクトのうちで、その型が HOST_WIDE_INT の ものである(see section コンフィギュレーションファイル)。やはり、10進数を使って表記する。

文字列は文字の連なりである。メモリ中では、通常の C 言語の形式である、 char * で表現され、C 言語と同じ文法にしたがって表記する。 ただし、RTL での文字列は決してヌルにはならない。マシン記述中で 空文字列を書いた場合、メモリ中ではヌルポインタではなく、ヌル文字への ポインタとして表現される。文脈によっては、文字列の代わりにヌルポインタ を使っても有効である。RTL のコード内では、文字列は symbol_ref 式 の中で最も良く使われる。しかし、マシン記述を構成する RTL 式の他の 文脈にも現れる。

ベクトルは、式を指す任意個数のポインタから成る。ベクトルの要素数は ベクトルの中で明示的に表現される。ベクトルは、 空白で区切られた要素を順番に並べたものを、鍵括弧(‘[…]’)で 囲んで表記する。長さ 0 のベクトルは作成されない。代わりに ヌルポインタが使われる。

式は式コード(または RTX コードと呼ばれる) で分類される。 式コードは ‘rtl.def’ で定義される名前であり、大文字で記述した C の列挙型定数でもある。許される式コードとその意味は機種には依存しない。 ある RTX のコードはマクロ GET_CODE (x) によって 取り出すことができ、また、マクロ PUT_CODE (x, newcode) で変更することができる。

式コードは、式の中にオペランドが幾つあるか、およびオペランドがどんな種類の オブジェクトかを決定する。 Lisp と違って RTL では、オペランドを見てもどんな種類の オブジェクトか知ることはできない。代わりに、文脈から知る必要がある。 つまり、オペランドを含む式の式コードから知る必要がある。 例えば、式コードが subreg である式の中では、最初のオペランドが 式と見なされ、二番目のオペランドが整数とみなされる。式コード plus の式では、二つのオペランドがあり、どちらも式としてみなされる。 式コード symbol_ref の式では、オペランドは一つであり、 文字列としてみなされる。

式は、式のタイプ名と、そのフラグとあればマシンモード、式のオペランドを 空白で区切り、括弧で囲んで表記する。

式コード名は、‘md’ ファイル中では小文字で書くが、 C のコードとしては大文字となって現れる。このマニュアルでは、 const_int のように書くことにする。

通常、式が要求される場合でも、ヌルポインタが有効なコンテキストが 二、三存在する。その場合には、(nil) と表記する。


This document was generated using texi2html 1.78.