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

16.15.3 属性値の insn への割り当て

ある insn のある属性に割り当てられる値は、主に、その insn により照合される (あるいは define_peephole が生成する)パターンにより決定される。 各 define_insndefine_peephole は、オプションの最後の 引数を持つことができ、一致する insn の属性値を指定することができる。 ある特定の insn において指定されていない属性値は全て、その属性の デフォルト値に設定される。このデフォルト値は、その属性の define_attr で 指定される。属性のデフォルト値を多用すると、ほとんどの insn パターンの 定義で一つか二つの属性値を指定するだけで済む。次の節の例を参照のこと。

define_insndefine_peephole の最後のオプションの引数は、 式のベクトルであり、それぞれの式がある一個の属性の値を定義する。 属性値を割り当てる最も一般的な方法は、set 式を使い、その第一 オペランドを設定する属性名を与える attr 式とすることである。 この set 式の第二のオペランドは属性式(see section 属性値として使用可能な式)であり、 属性の値を与える。

属性値が属性 ‘alternaitve’ に依存するとき(すなわち、それが、 その insn の制約にある利用可能な選択肢である)は、 set_attr_alternative 式を使うことができる。 これは属性式のベクトルを指定することを許す。ベクトルの中の それぞれの式が各属性を表す。

任意の属性式ほど一般的な機能が必要ない場合、もっと簡単な set_attr 式を使うことができる。この式を使うと、 一個の文字列を指定することで、一個の属性値か、あるいは各選択肢毎に 一個の属性値を与えるリストを表すことができる。

上記の指定方法をそれぞれ以下に示す。 どちらの場合も、name は、設定すべき属性を指定する文字列である。

(set_attr name value-string)

value-string は、希望の属性値を与える文字列か、あるいは 一連の属性値をカンマで区切ったリストを表す文字列である。 この要素数は、insn パターンの制約の選択肢数と一致しなければならない。

選択肢のどれかに ‘*’ を指定することができる。 その場合、属性値は、その選択肢にマッチする insn のデフォルト値になる。

(set_attr_alternative name [value1 value2 …])

insn の選択肢により、この値は指定された値のうちの一つになる。 これは、属性 ‘alternative’ の cond を使ってのテストの 省略形である。

(set (attr name) value)

この set の第一オペランドは、特別な RTL 式 である attr 式で なければならない。この式の唯一のオペランドは、設定する属性の名前を 指定する文字列である。value は、その属性の値である。

以下に同じ属性値の指定を表す、三つの異なる方法を示す。

 
(set_attr "type" "load,store,arith")

(set_attr_alternative "type"
                      [(const_string "load") (const_string "store")
                       (const_string "arith")])

(set (attr "type")
     (cond [(eq_attr "alternative" "1") (const_string "load")
            (eq_attr "alternative" "2") (const_string "store")]
           (const_string "arith")))

define_asm_attributes 式は、asm 文から生成された insn に割り当てられた属性を指定する方法を提供する。 次の形を取る。

 
(define_asm_attributes [attr-sets])

ここで、atr-sets は、define_insndefine_peephole 式 両方に指定するのと同じものである。

これらの値は、普通はその属性値の「最悪の場合」になる。 例えば、条件コードが破壊されることを示したりする。

length 属性の指定は特別に扱われる。 一個の asm insn の長さを計算するには、 式 define_asm_attributes で指定された長さに、 asm 文に指定されている機械命令の数を掛けたものになる。 asm 文中の機械命令数は、命令文字列中のセミコロンと改行の 数で決まる。このため、define_asm_attributes で指定される length 属性の値は、一個の機械命令の可能な最大長にしなくては ならない


This document was generated using texi2html 1.78.