我是新手LLVM IR
,我正在尝试模拟一些 x86 指令LLVM IR
。
这是一个简单的案例:
move %eax, %ebx
但是,我在查看here和heremov
的资料后并没有找到任何对应的操作码。
所以我的问题是:
如果我想
mov
使用 LLVM IR 模拟操作码?我该怎么办?我是新手
LLVM IR
,可能我会在这个“模拟”工作上花费很长时间,关于 LLVM IR 的最佳参考应该是什么?
如果有人能给我一些帮助,我真的很感激。谢谢!
我是新手LLVM IR
,我正在尝试模拟一些 x86 指令LLVM IR
。
这是一个简单的案例:
move %eax, %ebx
但是,我在查看here和heremov
的资料后并没有找到任何对应的操作码。
所以我的问题是:
如果我想mov
使用 LLVM IR 模拟操作码?我该怎么办?
我是新手LLVM IR
,可能我会在这个“模拟”工作上花费很长时间,关于 LLVM IR 的最佳参考应该是什么?
如果有人能给我一些帮助,我真的很感激。谢谢!
没有等效的mov
指令。LLVM IR 采用SSA (Static Single Assignment) 形式,这意味着每个寄存器只分配一个值一次。有无限数量的(虚拟)寄存器——每个操作都会根据需要创建一个新的。
目前尚不清楚模拟 x86 指令的含义,但如果它适合您,您可以在堆栈上为每个寄存器的局部变量分配内存(使用alloca
指令),并使用load
andstore
指令在它们之间复制值。
如果您需要将一个 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