是否可以输入 x86 32 位代码来运行 LLVM 编译器?有一个巨大的算法,我没有源代码,我想让它在相同的硬件上运行得更快。我可以通过优化将其从 x86 转换回 x86 吗?
这段代码运行时间很长,所以我想对其进行静态重新编译。另外,我可以对其进行运行时分析,并向 LLVM 提供提示,哪些分支更有可能。
原始代码是为 x86 + x87 编写的,并且不使用 SSE/MMX/SSE2。重新编译后它有机会使用x86_64和/或SSE3。此外,代码将以更优化的方式重新生成给硬件解码器。
Thanks.
LLVM 无法开箱即用地执行此操作。您必须编写 x86 二进制文件到 LLVM 中间表示 (IR) 转换器。这将是一项非常重要的任务。如果 x86 代码足够简单,它可能会非常接近地映射到 IR,但某些 x86 指令不会直接映射,例如堆栈指针操作。
编辑:
您还可以考虑尝试类似于 QEMU 所做的方法。 QEMU 动态翻译二进制文件,当我运行 PowerPC 代码时,每个基本块在执行之前都会被翻译为 X86 代码。您可以弄清楚如何将目标文件分解为基本块并为每个块生成 LLVM IR,丢弃一些内容(例如参数传递等)并将其替换为直接 LLVM IR。
不过,这仍然是一项艰巨的工作。从头开始重写算法可能更容易。
这个确切的过程描述于“使用 QEMU 将 x86 动态转换为 LLVM” http://infoscience.epfl.ch/record/149975/files/x86-llvm-translator-chipounov_2.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)