Next: , Previous: Patterns, Up: Machine Desc


16.3 有关define_insn的例子

这个指令模式的例子来自68000/68020中。

     (define_insn "tstsi"
       [(set (cc0)
             (match_operand:SI 0 "general_operand" "rm"))]
       ""
       "*
     {
       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
         return \"tstl %0\";
       return \"cmpl #0,%0\";
     }")

还可以写成如下形式:

     (define_insn "tstsi"
       [(set (cc0)
             (match_operand:SI 0 "general_operand" "rm"))]
       ""
     {
       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
         return "tstl %0";
       return "cmpl #0,%0";
     })

这是一条根据通用操作数来设置条件代码的指令。这个模式不需要条件(条件为空字符串) ,所以任何insn,如果RTL描述的形式相符,则可以根据这个模式来处理。名字 ‘tstsi’ 表示“test a SImode value”,并且告诉了RTL生成过程,当其需要测 试这样的值时,可以使用这个模式来构造一条指令。

输出控制字符串是一部分C代码,用来根据操作数的类别和CPU的特定类型选择输出模版。

"rm"’ 是一个操作数constraint。后面将会解释它的含义。