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

16.15.4 属性割り当ての例

デフォルトをうまく使うのが、insn の属性を効率良く使うには重要である。 通常、insn は types と、type と呼ばれている属性に分けられる。 type は、このデフォルト値を表すのに使われる。 この属性は、普通は他の属性のデフォルト値を定義するのにしか使われない。 例を使ってこの属性の使い方を説明する。

ある RISC マシンを考えよう。このマシンには条件コードがあり、 レジスタで実行されるのは全語の演算だけである。 全ての命令をロード、ストア、(整数)算術演算、浮動小数点演算、分岐に 分割できるとしよう。

ここでは、ある insn の条件コードに対する効果を決定することに 注意を集中することにし、さらに可能な効果として次のものに限定する。 条件コードは、予測できない形で設定され得る(破壊される)、 変更されない、演算結果に一致するように設定される、 以前に条件コードに設定した項目が修正されたときにのみ 変更される。

そういう機種用の ‘md’ ファイルの例の一部を示す

 
(define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))

(define_attr "cc" "clobber,unchanged,set,change0"
             (cond [(eq_attr "type" "load")
                        (const_string "change0")
                    (eq_attr "type" "store,branch")
                        (const_string "unchanged")
                    (eq_attr "type" "arith")
                        (if_then_else (match_operand:SI 0 "" "")
                                      (const_string "set")
                                      (const_string "clobber"))]
                   (const_string "clobber")))

(define_insn ""
  [(set (match_operand:SI 0 "general_operand" "=r,r,m")
        (match_operand:SI 1 "general_operand" "r,m,r"))]
  ""
  "@
   move %0,%1
   load %0,%1
   store %0,%1"
  [(set_attr "type" "arith,load,store")])

上の例で我々は、マシンワードより小さな量について算術演算を実行すると、 それにより条件コードに全ワードの結果に対応する値を設定するので、 条件コードが破壊されると仮定していることに注意。


This document was generated using texi2html 1.78.