assembly - LLVM 中的 getOpcode 是什么?

标签 assembly llvm code-generation opcode

LLVM 代码生成器部分的 MCInstrDescMachineInstr 类中的函数 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/

相关文章:

winapi - 学习32位汇编

c++ - LLVM 最大的好处是什么?

llvm - 如何从函数中获取调试信息?

macos - 如何在我的新 MacBook Pro(使用 Mac OS Catalina)上安装 openMP?

c++ - C++ 抽象语法树组合和代码生成库

ruby-on-rails - Node.js - 如何为 Express 编写脚手架生成器

gcc - 如何在 NASM 中导出符号

assembly - ARM - 如何将汇编代码转换为机器语言

memory - 低级编程: How to find data in a memory of another running process?

java - 是否有任何工具或库可以将 YAML 或 XML 文件转换为 Java 代码?