0

我是新手LLVM IR,我正在尝试模拟一些 x86 指令LLVM IR

这是一个简单的案例:

move %eax, %ebx

但是,我在查看hereheremov的资料后并没有找到任何对应的操作码。

所以我的问题是:

  1. 如果我想mov使用 LLVM IR 模拟操作码?我该怎么办?

  2. 我是新手LLVM IR,可能我会在这个“模拟”工作上花费很长时间,关于 LLVM IR 的最佳参考应该是什么?

如果有人能给我一些帮助,我真的很感激。谢谢!

4

2 回答 2

5

没有等效的mov指令。LLVM IR 采用SSA (Static Single Assignment) 形式,这意味着每个寄存器只分配一个值一次。有无限数量的(虚拟)寄存器——每个操作都会根据需要创建一个新的。

目前尚不清楚模拟 x86 指令的含义,但如果它适合您,您可以在堆栈上为每个寄存器的局部变量分配内存(使用alloca指令),并使用loadandstore指令在它们之间复制值。

于 2015-06-27T22:20:28.273 回答
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

于 2021-06-22T23:21:05.500 回答