Next: RTL Template, Previous: Patterns, Up: Machine Desc
define_insn的例子 (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。后面将会解释它的含义。