Next: Expressions, Up: Insn Attributes
表达式 define_attr
用于定义目标机所需要的每个属性。其形式为:
(define_attr name list-of-values default)
name 为一个字符串,指定了被定义的属性名。
list-of-values 或者为一个字符串,指定了可以赋予属性的逗号分隔 的值的列表,或者为一个空字符串,表示属性接受一个数字值。
default 为一个属性表达式,给出了匹配指令模式,但指令模式定义中 没有显式包含该属性值的insns,所应具有的属性值。关于更多处理缺省值的 信息,参见Attr Example。关于不依赖于任何特定insn的属性, 参见Constant Attributes。
对于每个定义的属性,都有许多定义被写入 insn-attr.h 文件。对于 显式指定了属性取值集合的情况,下列将被定义:
例如,如果在 md 文件中存在下列定义:
(define_attr "type" "branch,fp,load,store,arith" ...)
则下面的行将被写入文件 insn-attr.h 中。
#define HAVE_ATTR_type enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, TYPE_STORE, TYPE_ARITH}; extern enum attr_type get_attr_type ();
如果属性接受数字值,则不会定义enum
类型,并且获得属性值的函数将
返回int
。
有些属性被赋予特定的含义。这些属性不能随便用于其它目的:
length
length
属性用于计算每输出的代码块的长度。这尤其在验证分支距离的时候特别重要。参见Insn Lengths.
enabled
enabled
属性可以被定义,用来在代码生成过程中,阻止insn定义中的特定的可选项。参见Disable Insn Alternatives.