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条件码, 因为它们将会根据全字的结果来设置条件码。