Next: , Up: Insn Attributes


16.19.1 定义属性以及它们的值

表达式 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.