【问题标题】:What is a "move" opcode in LLVM IR?LLVM IR 中的“移动”操作码是什么?
【发布时间】:2021-06-23 07:21:05
【问题描述】:

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

这是一个简单的案例:

move %eax, %ebx

但是,看了herehere的资料后,并没有找到对应的mov操作码。

所以我的问题是:

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

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

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

【问题讨论】:

    标签: llvm llvm-ir llc


    【解决方案1】:

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

    不清楚模拟 x86 指令是什么意思,但如果它适合您,您可以在堆栈上为每个寄存器的局部变量分配内存(使用 alloca 指令),并使用 load 和 @ 987654325@ 指令在它们之间复制值。

    【讨论】:

      【解决方案2】:

      如果您需要将一个 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-26
        • 2012-04-07
        相关资源
        最近更新 更多