Next: , Previous: Conditional Execution, Up: Machine Desc


16.21 常量定义

在指令模板中使用文字常量会减小可读性并会成为一个维护问题。

要克服该问题,你可以使用 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被输出。