Next: Attr Example, Previous: Expressions, Up: Insn Attributes
给insn的属性赋予的值,主要由该insn所匹配的模式决定
(或者什么define_peephole生成的它)。
每个define_insn和define_peephole可以具有可选的最后的参数,
用来指定匹配insn的属性值。在特定insn中没有指定的任何属性的值,
将被设为在define_attr中指定的缺省值。
可选的define_insn和define_peephole最后的参数,为一个表达式向量,
每个元素定义了单个属性的值。赋属性值的最通用方式是使用set表达式,
其第一个操作数为一个attr表达式,给出了要设置的属性名。
第二个操作数为一个属性表达式(参见Expressions),给出了属性值。
当属性值依赖于可选(‘alternative’)属性,
则可以使用set_attr_alternative表达式。其允许指定属性表达式向量,
每个元素对应一个可选属性。
当不需要一般性的任意属性表达式,则可以使用简单的set_attr表达式,
其允许指定一个字符串,给出单个属性值或者属性值列表,
其中每个元素对应于一个可选属性。
以上的属性指定形式将在下面展示出。在每种情况中,name为一个字符串, 指定了要被设置的属性。
(set_attr name value-string)注意可以为一些可选项指定‘*’,这样属性将被假设它的缺省值匹配那个可选项。
(set_attr_alternative name [value1 value2 ...])cond的简化形式。
(set (attr name) value)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提供了一种机制,
用来指定赋予insn的属性是由asm语句产生的。其形式为:
(define_asm_attributes [attr-sets])
其中attr-sets为与define_insn和define_peephole中的相同。
这些值通常为“最坏情况”属性值。例如,它们可能指示条件码将被破坏(clobbered)。
为length属性赋值,将被特殊处理。
计算asm insn长度的方式是将表达式define_asm_attributes中指定的长度
乘以在asm语句中指定的机器指令个数。
指令个数通过计算字符串中分号和换行符的个数来决定。因此,
在define_asm_attributes中指定的length属性值应该为单个机器指令的
最大可能长度。