首页 > 解决方案 > 反转 LLVM TableGen 指令表示中的位

问题描述

在向 LLVM 添加对不寻常 MIPS 指令集的支持时,我遇到了一个问题:假设我有一个与此类似的指令编码

class VFPU_C_FMT<bits<32> instr, dag outs, string name, list<dag> pattern>:
  InstSE<outs, (ins), !strconcat(name, "\t$rd"), pattern, II_MYITIN, FrmCustom>
{
  bits<7> rd;

  let Opcode      = instr{31-26};

  let Inst{25-7} = instr{25-7};
  let Inst{6-0}  = rd;
}

rd指令的寄存器操作数在哪里。现在假设一条特定指令要求将其操作数的第 6 位与其规范表示反转。我想表达的东西相当于

let Inst{5} = !not(Inst{5});

这实际上不是有效的 TableGen 代码。

标签: llvm

解决方案


推荐阅读