LLVM 代码生成器部分的 MCInstrDesc
或 MachineInstr
类中的函数 getOpcode()
返回什么?我无法与机器的实际操作码联系起来。
例如,对于 x86
中的 RET
指令,getOpcode()
函数返回 2515
。然而,x86 中真正的操作码是 C3
(十进制的 195
)。
有什么关系?
最佳答案
MCInstrDesc 和 MachineInstr 上的 getOpcode() 成员函数返回枚举值,该值标识 X86InstrInfo.td
中的操作码。该指令代表。在其他后端中,编号对应于该后端的指令信息,通常是一个名为 [BACKEND]InstrInfo.td
的文件。
您可以找到在许多 X86 后端 channel 中使用的示例,例如 X86ExpandPseudo.cpp
中的以下代码处理尾调用返回。
switch (MI.getOpcode()) {
default:
return false;
case X86::TCRETURNdi:
case X86::TCRETURNdicc:
case X86::TCRETURNri:
case X86::TCRETURNmi:
case X86::TCRETURNdi64:
case X86::TCRETURNdi64cc:
case X86::TCRETURNri64:
case X86::TCRETURNmi64: {
/* ... */
}
/* ... */
}
关于assembly - LLVM 中的 getOpcode 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894012/