有优化的汇编编译器吗?

时间:2015-07-01 07:28:45

标签: c assembly

这可能听起来很傻,但是有优化的汇编编译器吗?像gcc或MSVC一样会优化C。

或者至少有一个可用的反编译器产生可编译的C?代码不需要是可读的。我只想asm -> c -> gcc -O3 -> ELF/PE

注1:也许我应该在看到一个downvote后解释为什么我需要这个。因此有一个FreeBASIC编译器可以直接生成可执行文件,但编译器不能很好地优化。我不知道他们为什么不选择C作为中间代表。也许我可以重写编译器来生成C,但现在不是。至少在Linux中从可执行文件生成程序集是微不足道的,所以我想也许有一种方法可以自动优化它。

2 个答案:

答案 0 :(得分:3)

是。 Plan 9操作系统的编译器基础结构使用汇编程序和链接器,它们执行通常由编译器执行的各种优化任务,如:

  • 指令选择(模拟不支持的指令)
  • 注册分配(部分)
  • 死码消除
  • 一些窥视孔优化

请参阅here,了解Plan 9程序集的Go风格。

答案 1 :(得分:2)

不,它可能不存在于一般情况下(但它可能存在,并且在过去的1990年代确实存在 - 对于某些MIPS或Sparc工作站,如果汇编代码以某种方式受到限制)。您可能尝试使用一些decompiler(但是这些不能可靠地处理每个代码,特别是因为并非每个汇编代码都可以在C中表达,并且因为编译器正在从其源代码中丢失一些信息),然后重新编译优化反编译的C代码。

顺便说一句,你真的需要一些优化的FreeBASIC编译器(例如代码你的FreeBASIC到C - 或LLVM - 翻译器)。也许(如果你的FreeBasic程序不大)你可能会将你的FreeBASIC源代码转换(手动,也许在某些脚本的帮助下)。

最后,FreeBASICfree software(获得GPLv2许可)。您可以花费一些(数月或数年)的时间来改进它,并使其成为generate either C或LLVM代码,或使用LLVMGCCJIT即时编译库。 我个人认为这是不值得的,因为BASIC是一种几乎死的语言(并且有很多语言比BASIC更好:Ocaml,Haskell,Common Lisp,Clojure,Scala,Scheme,Go,D,.... ;而BASIC中现有的生存源代码库今天并不大;

看起来FreeBASIC-1.02.1-source/(由FreeBASIC-1.02.1-source.tar.gz存档提供)包含inc/llvm-c.bi&一个src/compiler/ir-llvm.bas个文件,所以可能已经有一些工作来生成LLVM。您应该调查(并要求LLVM进行更多优化)。

请注意,我从未使用FreeBASIC,也许永远不会。但我确实有寻找自由软件源代码的习惯,你也应该养成这个习惯......