[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ある insn のある属性に割り当てられる値は、主に、その insn により照合される
(あるいは define_peephole
が生成する)パターンにより決定される。
各 define_insn
と define_peephole
は、オプションの最後の
引数を持つことができ、一致する insn の属性値を指定することができる。
ある特定の insn において指定されていない属性値は全て、その属性の
デフォルト値に設定される。このデフォルト値は、その属性の define_attr
で
指定される。属性のデフォルト値を多用すると、ほとんどの insn パターンの
定義で一つか二つの属性値を指定するだけで済む。次の節の例を参照のこと。
define_insn
と define_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_insn
や define_peephole
式
両方に指定するのと同じものである。
これらの値は、普通はその属性値の「最悪の場合」になる。 例えば、条件コードが破壊されることを示したりする。
length
属性の指定は特別に扱われる。
一個の asm
insn の長さを計算するには、
式 define_asm_attributes
で指定された長さに、
asm
文に指定されている機械命令の数を掛けたものになる。
asm
文中の機械命令数は、命令文字列中のセミコロンと改行の
数で決まる。このため、define_asm_attributes
で指定される
length
属性の値は、一個の機械命令の可能な最大長にしなくては
ならない
This document was generated
using texi2html 1.78.