2015-07-01 32 views
0

這聽起來很愚蠢,但有沒有一個優化的彙編編譯器?像gcc或MSVC會優化C.或者至少是否有一個可用的反編譯器生成可編譯的C?代碼不需要可讀。我只想要asm -> c -> gcc -O3 -> ELF/PE。注1:也許我應該解釋爲什麼我需要這個,看到downvote後。所以有一個FreeBASIC編譯器可以直接生成可執行文件,但是編譯器不能很好地進行優化。我不知道他們爲什麼不選擇C作爲中間代表。也許我可以重寫編譯器來生成C,但現在不是真的。至少在Linux中從可執行文件生成程序集是微不足道的,所以我想也許有一種方法可以自動優化它。是否有優化的組件編譯器?

+1

你的實際問題是什麼?你的彙編代碼來自哪裏? – dlask

+1

看起來像[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem);請**編輯您的問題以改進它**並說出動機和背景。 –

+0

什麼是您的FreeBASIC源代碼?它的大小是多少? –

回答

2

不,它在一般情況下可能不存在(但它可能存在,並且在過去的-1990s中確實存在 - 對於某些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 ...... ;今天)

它看起來像FreeBASIC-1.02.1-source/(由FreeBASIC-1.02.1-source.tar.gz歸檔提供)包含inc/llvm-c.bi &一個src/compiler/ir-llvm.bas文件,因此可能已經有一些工作產生BASIC現有生活源代碼庫並不大LLVM。你應該調查(並要求LLVM進一步優化)。

請注意,我從來沒有使用FreeBASIC,可能永遠不會。但我確實有看過免費軟件源代碼的習慣,你也應該習慣這種習慣......

+0

這確實存在,請參閱我的答案。 – fuz

+0

我提到並解釋了*一般情況* –

+0

我沒有看到它在*一般情況下不能如何工作。* Plan 9彙編器相當一般,不會限制你編寫程序集的方式。 – fuz

3

是的。計劃9操作系統的編譯器基礎結構使用的彙編器和其做通常由編譯器等執行的各種優化的任務的接頭:

  • 指令選擇(不支持的指令仿真)
  • 寄存器分配(部分地)
  • 死代碼消除
  • 一些窺孔優化

爲引入計劃的去味見here 9裝配。