[英]Where in the GCC source code does it compile to the different assembly languages?
GCC 源代碼中實際為不同架構構建程序集的代碼在哪里?
想知道它編譯成多少種不同的匯編語言,以及它實際上是如何做到的(通過查看源代碼)。
它是在某個地方的 gcc 存儲庫中,還是在另一個存儲庫中? 我開始四處尋找,但沒有找到任何東西。
https://github.com/gcc-mirror/gcc
例如,這里是一些 V8 中的匯編生成代碼:
https://github.com/v8/v8-git-mirror/tree/master/src/x64
GCC 有什么等價的嗎?
我想知道因為 GCC 如何做到這一點是個謎,這將是了解編譯器如何實際實現到匯編級別的好方法。
GCC 的實際源代碼最容易從這里訪問:
該軟件可通過源代碼控制系統 SVN (subversion) 訪問。 這將安裝在許多版本的 Linux/UNIX 上,但如果不在您的平台上,您可以安裝 svn 工具包,然后使用以下命令獲取源代碼:
svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir
GCC 很復雜,需要豐富的經驗才能理解應用程序實際編譯到不同體系結構的本質。
簡而言之,GCC 具有三個主要組件——前端、中台和后端處理。 前端處理器具有語言解析組件,用於理解語言(如 C、C++、Objective-C 等)的語法。 前端將代碼解構為可移植的構造,然后將其傳遞給后端以編譯到目標環境。
中間部分執行代碼分析和優化,嘗試對代碼進行優先級排序,以在整個流程結束時生成最佳輸出。 從技術上講,由於在分析過程中發現了模式,因此可以在流程的任何部分進行優化。
后端處理器將代碼編譯為樹形輸出格式(實際上不是最終的可執行代碼)。 根據預期輸出的設計,“偽代碼”針對使用寄存器、位大小、字節序等進行了優化。 然后在匯編階段生成最終代碼,將后端代碼轉換為機器可執行指令。
重要的是要注意,編譯器有許多選項來處理輸出格式,因此您可以為許多體系結構類創建輸出,通常是開箱即用的。 對於交叉編譯和目標編譯器選項,請嘗試查看此鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.