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
属性值应该为单个机器指令的
最大可能长度。