Next: Machine Constraints, Previous: Modifiers, Up: Constraints
enabled属性来禁止insn可选项
insn属性enabled,可以出于机器特定的原因,用来禁止特定的insn的可选项。这用于,当为现有的指令模式,增加新的指令,且其只用于使用-march=选项指定的特定cpu体系结构级别。
如果insn的可选项被禁止,则其将不被使用。编译器将被禁止的可选项的约束视为不被满足。
为了能够使用enabled属性,后端必须在机器描述文件中增加:
enabled insn属性的定义。该属性通常使用define_attr命令来定义。该定义应该基于其它insn属性以及/或者目标机标记。enabled属性为数字属性,并且对于被启用的可选项应该求值为(const_int 1),否则为(const_int 0)。
cpu_facility。
例如,下面两个指令模式可以容易的使用enabled属性合并在一起:
(define_insn "*movdi_old"
[(set (match_operand:DI 0 "register_operand" "=d")
(match_operand:DI 1 "register_operand" " d"))]
"!TARGET_NEW"
"lgr %0,%1")
(define_insn "*movdi_new"
[(set (match_operand:DI 0 "register_operand" "=d,f,d")
(match_operand:DI 1 "register_operand" " d,d,f"))]
"TARGET_NEW"
"@
lgr %0,%1
ldgr %0,%1
lgdr %0,%1")
合并成:
(define_insn "*movdi_combined"
[(set (match_operand:DI 0 "register_operand" "=d,f,d")
(match_operand:DI 1 "register_operand" " d,d,f"))]
""
"@
lgr %0,%1
ldgr %0,%1
lgdr %0,%1"
[(set_attr "cpu_facility" "*,new,new")])