Next: Insn Lengths, Previous: Tagging Insns, Up: Insn Attributes
要想有效的使用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条件码, 因为它们将会根据全字的结果来设置条件码。