Next: , Previous: Tagging Insns, Up: Insn Attributes


16.19.4 关于属性说明的例子

要想有效的使用insn属性,巧妙的使用缺省值是很重要的。通常,insn被分为不同类别, 并使用称作type的属性来表示该值。该属性通常只用于定义其它属性的缺省值。 可以举一个例子来阐明它的用法。

假设我们有一个RISC机器,其具有一个条件码并且在寄存器中只进行全字操作。 让我们假设可以将所有的insn分为加载,存储,(整数)算术运算,浮点运算和分支。

在这里我们将关注条件码对于insn的影响,并局限在下列可能的影响: 条件码可以被不可预期的设置(clobbered),没有改变,被设为符合运算结果的值, 或者只在先前被设置的条件码已经被修改。

下面是该机器的一个样本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")])

注意我们假设在上面的例子中,比机器字小的算术运算将会clobber条件码, 因为它们将会根据全字的结果来设置条件码。