在GCC源代码中,它编译为不同的汇编语言?

Lan*_*ard 5 c compiler-construction assembly gcc

GCC源代码中的代码实际构建了不同体系结构的程序集在哪里?

想知道它编译了多少种不同的汇编语言,以及它实际上是如何做到的(通过查看源代码).

是在某个地方的gcc回购中,还是在另一个回购中?我已经开始挖掘但没有找到任何东西.

https://github.com/gcc-mirror/gcc

例如,以下是V8中的一些程序集生成代码:

https://github.com/v8/v8-git-mirror/tree/master/src/x64

是否有与GCC相同的东西?

我想知道,因为GCC是如何做到的,这是一个谜,这将是一个了解编译器如何实际实现到汇编级别的好方法.

Bas*_*tch 11

.mdGCC源的(机器描述)文件包含生成组件的东西.GCC包含几个专门的C/C++代码生成器(其中一些代码生成器将.md文件转换为代码发送程序集).

GCC是一个非常复杂的计划.GCC MELT文档包含几个有趣的链接和幻灯片,特别是印度GCC资源中心

GCC中的大多数优化发生在中端(主要是独立于源语言或目标系统),特别是在Gimple表示中有许多传递.

GCC repo是SVN存储库.

另请参阅此答案,特别是其中的图片.


Don*_*rko 5

GCC 的实际源代码最容易从这里访问:

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

该软件可通过源代码控制系统 SVN (subversion) 访问。这将安装在许多版本的 Linux/UNIX 上,但如果不在您的平台上,您可以安装 svn 工具包,然后使用以下命令获取源:

svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir
Run Code Online (Sandbox Code Playgroud)

GCC 很复杂,需要丰富的经验才能理解应用程序实际编译到不同体系结构的本质。

简而言之,GCC 具有三个主要组件——前端、中台和后端处理。前端处理器具有语言解析组件,用于理解语言(如 C、C++、Objective-C 等)的语法。前端将代码解构为可移植的构造,然后将其传递给后端以编译到目标环境。

中间部分执行代码分析和优化,尝试对代码进行优先级排序,以在整个流程结束时生成最佳输出。从技术上讲,由于在分析过程中发现了模式,因此可以在流程的任何部分进行优化。

后端处理器将代码编译为树形输出格式(实际上不是最终的可执行代码)。根据预期输出的设计,“伪代码”针对使用寄存器、位大小、字节序等进行了优化。然后在汇编阶段生成最终代码,将后端代码转换为机器可执行指令。

需要注意的是,编译器有许多选项来处理输出格式,因此您可以创建输出到许多体系结构类,通常是开箱即用的。对于交叉编译和目标编译器选项,请尝试查看此链接:

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

  • 你忘记了 GCC 的中端部分,它比前端和后端加起来还要大! (3认同)