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

16.1 命令パターンの全て

各命令パターンには、後で埋められる部分を持つ不完全な RTL 式と、各部分が どのように埋められるかを限定するオペランド制約、それに、出力パターンまたは アセンブラ出力を生成する C コードが含まれており、全て define_insn 式 中に記述される。

define_insn は一つの RTL 式で、四つか五つのオペランドを持つ。 それぞれのオペランドは以下の通りである。

  1. 名前。無くても良い。名前があると、 その命令パターンが、GCC の RTL生成パスにおいてある決まった仕事を 成しうるということを意味する。RTL生成パスは一定のパターン名を知っていて、 マシン記述に定義されている名前であれば、その名前の命令パターンを 使おうとする。

    名前を書くべき位置に空文字列を書くと名前がないということになる。 名無しの命令パターンは RTL コードの生成に使われることはありえない。 しかし、名無しの命令パターンを使うと、様々なより単純な insn を後で 結合させることが出来る。

    つまり、RTL生成時に知られていない、あるいは使われもしない名前は 何の効果ももたらさない。名無しと全く同じである。

  2. RTL テンプレート (see section RTL テンプレート) は、不完全な RTL 式を 要素とするベクトルであり、命令がどのように見えるかを示す。 不完全というのは、その命令のオペランドの代理である、match_operandmatch_operatormatch_dup 等の式を含むからである。

    RTL テンプレート・ベクトルに要素が一つしかなければ、その要素は命令パターンの テンプレートである。ベクトルに要素が複数あれば、その命令パターンは 列挙された要素を含む parallel 式である。

  3. 条件。これは文字列であり、insn 本体がパターンにマッチするかどうかを 最終的に決定するための条件を C 言語の式で表したものである。

    名前を持つパターンについては、条件は(もしあれば)、 マッチする insn 中のデータには依存せず、ターゲット機種の型のフラグに のみ依存する。GCC は、初期化時にこの条件を調べて、どういう名前の 命令が一回毎の実行時に利用できるのかを厳密に調べる必要がある。

    名無しのパターンについては、条件は個々の insn とのマッチングを行なう時と、 insn が、そのパターンの評価テンプレートにマッチした後にのみ 適用される。insn のオペランドは、ベクトル operands に入っている。

  4. 出力テンプレート。 マッチした insn をどのようにアセンブラコードとして 出力するかを指示する文字列である。文字列中の ‘%’ は、オペランドの値を どこに代入するかを指示する。See section 出力テンプレートとオペランド置換.

    単なる置き換えでは充分でないときは、C コードの断片を指定して、計算を 行なったうえで出力させることも出来る。See section アセンブラ出力用の C 言語の文.

  5. このパターンにマッチする insn の属性値を含むベクトル。 省略可能である。 See section 命令の属性.

This document was generated using texi2html 1.78.