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

时间:2014-12-21 08:09:22

标签: c gcc assembly compiler-construction

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

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

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

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

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

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

GCC有什么相同的东西吗?

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

2 个答案:

答案 0 :(得分:11)

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

GCC是一个非常复杂的计划。 documentation of GCC MELT包含几个有趣的链接和幻灯片,特别是指的是印度语GCC Resource Center

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

海湾合作委员会的回购是SVN repository

另请参阅this answer,特别是其中的图片。

答案 1 :(得分:4)

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