【发布时间】:2017-04-25 06:34:37
【问题描述】:
我的 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 因违反断言而崩溃。
问题:
- 语法或语义有问题吗?
- 或者我是否超出了可以匹配的理论限制?也许模式中的三个层次太多了?
- 还是看起来不错,我应该尝试将 tablegen 更新到最新版本?
【问题讨论】: