我是LLVM IR
的新手,我正在尝试在LLVM IR
中模拟一些x86指令。
这是一个简单的案例:
move %eax, %ebx
但是,在查看here和here处的资料后,我没有找到任何相应的mov
操作码。
所以我的问题是:
如果我想使用LLVM IR模拟mov
操作码?我该怎么办?
我是LLVM IR
的新手,可能我会在这个“模拟”工作上花费很长时间,关于LLVM IR的最佳参考应该是什么?
如果有人能给我一些帮助,我真的很感激。谢谢!
答案 0 :(得分:5)
没有与mov
指令等效的内容。 LLVM IR位于SSA (Static Single Assignment) form,这意味着每个寄存器只分配一次值。有无限数量的(虚拟)寄存器 - 每个操作都会根据需要创建一个新的寄存器。
通过模拟x86指令不清楚你的意思,但如果它适合你,你可以在堆栈上为每个寄存器的局部变量分配内存(使用alloca
指令),并使用load
和store
指令可在它们之间复制值。
答案 1 :(得分:0)
如果您需要将一个 LLVM IR 寄存器的值移动到另一个,您可以使用 bitcast
指令:
; %a contains 64bit integer value
%a = i64 ...
; Copy / move the value of %a into %b
%b = bitcast i64 %a to i64
有关详细信息,请参阅:https://llvm.org/docs/LangRef.html#bitcast-to-instruction