[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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.