Next: , Previous: Contributing, Up: Top


2 GCC与可移植性

GCC自身的目标是可以移植到任何 int 类型最小为32位的机器上。它是针对具有平坦(不是分段的)字节寻址的数据地址空间的目标机器(代码地址空间可以单独分开)。目标机器的ABI可以具有8,16,32或者64位的 int 类型。 char 可以大于8位。

GCC通过机器描述来获得目标机器的大部分信息。机器描述给出了每条机器指令的代数方程式表示。这是一种非常整洁的描述目标机器的方法。但是当编译器所需要的信息难以通过这种形式来表示的时候,便需要为机器描述定义一些临时的(ad-hoc)参数。可移植性的目的是为了减少编译器的总的工作量,对本身没有什么用处。

GCC不含有机器相关的代码,但是它确实含有依赖于机器参数的代码,例如大小端(在一个字中,最高有效位是位于地址最高的字节中还是最低的字节中)以及是否可以自动递增寻址。在RTL生成过程,经常需要有多种策略来针对特定类别的语法树生成代码。策略适用于不同的参数组合。通常,并不是所有可能的情况都会被覆盖到,而只是最常见的一些或者是已经遇到的一些。这样的话,一个新的目标机可能需要额外的策略。当这种情况发生时,编译器便会调用 abort。幸运的是一个新的策略可以通过机器无关的方式添加,并且只会影响到需要它们的目标机器。