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")])