簡體   English   中英

它在 GCC 源代碼中的哪個位置編譯為不同的匯編語言?

[英]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 源代碼的.md (機器描述)文件包含生成程序集的內容。 GCC 包含幾個專門的 C/C++ 代碼生成器(其中一些將.md文件轉換為代碼生成程序集)。

GCC是一個非常復雜的程序。 GCC MELT (一個過時的項目)的文檔包含幾個有趣的鏈接和幻燈片,特別是參考印度GCC 資源中心

GCC 中的大部分優化都發生在中端(主要獨立於源語言或目標系統),特別是在 Gimple 表示上進行了許多優化。

GCC存儲庫是一個SVN 存儲庫

另請參閱此答案,尤其是其中的圖片。

GCC 的實際源代碼最容易從這里訪問:

https://gcc.gnu.org/svn.html

該軟件可通過源代碼控制系統 SVN (subversion) 訪問。 這將安裝在許多版本的 Linux/UNIX 上,但如果不在您的平台上,您可以安裝 svn 工具包,然后使用以下命令獲取源代碼:

svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir

GCC 很復雜,需要豐富的經驗才能理解應用程序實際編譯到不同體系結構的本質。

簡而言之,GCC 具有三個主要組件——前端、中台和后端處理。 前端處理器具有語言解析組件,用於理解語言(如 C、C++、Objective-C 等)的語法。 前端將代碼解構為可移植的構造,然后將其傳遞給后端以編譯到目標環境。

中間部分執行代碼分析和優化,嘗試對代碼進行優先級排序,以在整個流程結束時生成最佳輸出。 從技術上講,由於在分析過程中發現了模式,因此可以在流程的任何部分進行優化。

后端處理器將代碼編譯為樹形輸出格式(實際上不是最終的可執行代碼)。 根據預期輸出的設計,“偽代碼”針對使用寄存器、位大小、字節序等進行了優化。 然后在匯編階段生成最終代碼,將后端代碼轉換為機器可執行指令。

重要的是要注意,編譯器有許多選項來處理輸出格式,因此您可以為許多體系結構類創建輸出,通常是開箱即用的。 對於交叉編譯和目標編譯器選項,請嘗試查看此鏈接:

https://gcc.gnu.org/install/configure.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM