我的PIC24处理器提供寄存器+偏移量寻址。要存储我添加的值
def MOV_reg2offset : InstReg2Offset<0b10011, (outs), (ins GPR:$Wd, GPR:$Ws, Slit10W:$Offset),
"mov\t$Ws, [$Wd + $Offset]",
[(store GPR:$Ws, (add GPR:$Wd, Slit10W:$Offset) )]>;
其中GPR是16位寄存器类,Slit10W是偶数,有符号10位字面值。效果很好!
现在我尝试了相同的加载指令:
def MOV_offset2reg : InstReg2Offset<0b10010, (outs), (ins GPR:$Wd, GPR:$Ws, Slit10W:$Offset),
"mov\t[$Ws + $Offset], $Wd",
[(set GPR:$Wd, (load (add GPR:$Ws, Slit10W:$Offset) ))]>;
但是tablegen因断言违规而崩溃。
答案 0 :(得分:0)
解决:简单的复制和粘贴错误 - GPR:$ Wd需要从'ins'移动到'outs'。
现在'register + offset'寻址适用于读写,无需任何C ++代码。酷!