如何使用 LLVM 库编写汇编程序

How to use the LLVM library to write an assembler

本文关键字:汇编程序 何使用 LLVM      更新时间:2023-10-16

我想为 x86/arm 编写一个简单的汇编程序。由于实现所有指令会很麻烦,因此我认为我可以在不使用LLVM IR的情况下使用LLVM项目。

LLVM-MC似乎正是具有该功能:

$ echo "addl %eax, %ebx" | llvm-mc -show-encoding -show-inst

但是,我找不到任何解释如何在C++代码中使用MC的资源。 我本来会期望类似于:

MCBuilder builder = X86::MCBuilder::create(rwx_memory_loc);
builder.AddInst("add", EAX, ECX);
builder.AddInst("mov", RAX, RDX);
...

作为替代方案,我可能会使用模块内联程序集。

汇编程序是后端的一部分。因此,您可能需要查看lib/Target/ARM子目录。这是LLVM中相当复杂的部分,但可以在此处找到一些指导。

我怀疑,您有兴趣修改/添加一些asm指令吗?看看*InstrInfo.td文件。