Next: Iterators, Previous: Conditional Execution, Up: Machine Desc
要克服该问题,你可以使用 define_constants
表达式。它包含了一个
“名字-值”成对向量。从定义处开始,任何出现在MD文件中的那些名字,都作为
相应的值被替换。你可以多次使用 define_constants
;每次都为表格中
增加更多的常量。使用不同的值来重新定义一个常量将会产生一个错误。
回到a29k加载乘的例子,对于
(define_insn "" [(match_parallel 0 "load_multiple_operation" [(set (match_operand:SI 1 "gpc_reg_operand" "=r") (match_operand:SI 2 "memory_operand" "m")) (use (reg:SI 179)) (clobber (reg:SI 179))])] "" "loadm 0,0,%1,%2")
你可以写成:
(define_constants [ (R_BP 177) (R_FC 178) (R_CR 179) (R_Q 180) ]) (define_insn "" [(match_parallel 0 "load_multiple_operation" [(set (match_operand:SI 1 "gpc_reg_operand" "=r") (match_operand:SI 2 "memory_operand" "m")) (use (reg:SI R_CR)) (clobber (reg:SI R_CR))])] "" "loadm 0,0,%1,%2")
使用define_constants定义的常量也在insn-codes.h头文件中作为#defines被输出。