Gcc internals中文版
Shortcontents
简介
,,·,·,··,
1向GCC开发提供帮助::
::::::::::::
2GαC与可移植性:::::::::::::::::::
111
3GcC的输出接口:::::::::
4GCC低级运行时库
:::::2
5GCC中的语言前端∷::::::
::::45
6源目录结构和构建系统∷:::::
:::
:::45
7选项描述文件::::::
67
8编译器的Passes和相关文件::::::::::::::::::69
9Tres:C和C++前端使用的中间表示::::::::::79
10RTL表示:::::::::::::::::::::::108
11GENEric::::::::::
::::::::147
12GIMPLE
∴:::::::::::::
148
13分析和优化GIMPLE元组::::::::::::::::::178
14循环分析和表示::::::::::::::::::::::189
15控制流图::::::::::::::::::::::::195
16机器描述:::::::::
:::::::::::::::201
17目标机描述宏和函数:::::::::::::::::::282
18主机配置::::::::::::::::::::::::401
19Makefile片段::::::::::::::::::::::403
20collect2
:::::::
::405
21标准头文件目录::::::::::::::::::406
22内存管理和类型信息:::::::::::::::::::::407
资助自由软件∷::::::::::
::::::411
GNU项目和GNU/Linux:::::
::::412
GNU通用公共授权:::::::::::::::::::::::::412
GNU自由文档授权::::::::::::::::::::::423
GCC的贡献者:
::::::::::::430
选项索引::::::::::::
::445
概念索引∷:::::::::::
::;:::445
GNU编译器内部实现
Tableofcontents
简介
1向GCC开发提供帮助:::::
:::;::::
2GCC与可移植性:::::::::::::::::::::1
GCC的输出接口
2
4GCC低级运行时库::::::::::::::::
4.1整数算术例程
411算术函数
4.1.2比较函数
4
413可产生异常的算术函数
4.1.4位运算:::::
4.2浮点模拟例程:::
4.21算术函数:::
42.2转换函数
4.2.3比较函数
4.24其它浮点函数:
445568999
4.3十进制浮点模拟例程:::::::
43.1算术函数
4.3.2转换函数:::
10
43.3比较函数::
13
4.4定点小数模拟例程
::14
441算术函数
14
442比较函数
;:
:::21
44.3转换函数
11
4.5语言无关的异常处理例程
::44
4.6其它运行时库例程:
45
4.61Cache控制函数:
45
5GCC中的语言前端::::
45
6源目录结构和构建系统::::::::::∷:::::::::45
61配置术语和历史::::::::::::::::::
45
6.2顶层源文件目录
46
63gcc'子目录:::
:47
631gcc的子目录
:::::47
632gcc目录下的配置:::::
::::::47
6321configure'使用的脚本::::::
48
6.3.2.2config.build',config.host'和config.gcc‘文件
48
6323由configure创建的文件
48
6.33gcc目录下的构建系统:::::
49
6.34Makefile工作目标::
49
635在gcc'目录下的库源文件和头文件:
51
636GCC安装的头文件
51
6.37构建文档::::
51
63.7.1Texinfo手册
52
63.7.2生成ManPage::::
52
63.7.3其它文档
53
6.38语言前端剖析
53
6381前端language'目录
:::::54
6.38.2前端config-lang.in文件
56
6.39目标机后端剖析:
56
64测试包:
:::
57
641测试包代码中使用的习惯用法
57
642Dejagnu测试中使用的指令
58
643Ada语言测试包:
62
644C语言测试包
:;::::
:::62
6.4.5Java库测试包
64
6.46对gcov测试的支持
:64
647对profile-directed优化测试的支持::
65
648对二进制兼容性测试的支持::::::::::
65
6.49对使用多个选项进行-torture测试的支持:::::::
66
7选项描述文件∷:::::::::::::
67
71选项文件格式:::::::::::::
::::67
7.2选项属性
::::::68
8编译器的Passes和相关文件
:::69
81语法分析过程
69
82Simplification过程
70
8.3过程管理器
70
84Tree-SSA过程
71
8.5RTL过程
76
9Trees:C和C++前端使用的中间表示::::::::::79
91不足之处::::::
:::79
9.2概述::::
9.2.1Trees
80
9.22标识符::
::::80
92.3容器
81
9.3类型
:::81
9.4作用域
85
9.41命名空间::::
85
9.4.2类
86
9.5声明
87
9.5.1关于声明的操作::::
:::
87
GNU编译器内部实现
9.52内部结构::
89
9.52.1目前的结构层次
::89
9.52.2添加新的DECL节点类型
90
9.6函数
:91
9.61函数基础
91
9.6.2函数体
::94
9.62.1语句
94
9.7树中的属性::::
:97
9.8表达式
a7
10RTL表示::::::::::::::::
::108
101RTL对象类型
108
10.2RT类别和格式
:109
10.3访问操作数
:::
111
104访问特殊操作数:
111
105RTL表达式中的标记
113
10.6机器模式
118
107常量表达式类型::
122
108寄存器和内存:::
123
109RTL算术运算表达式
128
10.10比较运算::::::
:131
1011位域
132
1012向量运算
::::
::::132
1013转换:::::
::133
10.14声明
134
1015副作用表达式:::::::::::
134
10.16地址中嵌入的副作用::::
138
1017作为表达式的汇编指令:
139
10.18Insns
::::139
1019函数调用nsns的RT表示:::
::145
10.20结构共享假设
146
1021读取RTL
::::146
11GENERIC:::::::::::::::::::::::147
11.1语句
147
111.1块:
::::147
111.2语句序列
147
11.13空语句:::
::::::::::::::147
11.1.4跳转
148
11.1.5清除::::::::::::
::148
12gimple:::::::
:::::148
121元组表
149
12.1.1gimple-statementbase(gsbase
::149
12.1.2gimpl
t_with_ops
150
12.1.3gimple_____ops
150
122GIMPLE指令集::::::
151
123异常处理
152
12.4Temporaries
153
125操作数
153
125.1复合表达式:
153
12.52复合左值:::::
153
1253条件表达式
153
12.54逻辑运算符:
154
125.5操作操作数:
:154
12.56操作数向量分配
:::154
125.7操作数有效性:
::::155
12.58语句有效性
155
126操作GIMPLE语句:::::::::::
156
12.6.1通用访问方法
::156
127元组特定访问方法
:::158
12.7.1GIMPLEASM
垂垂
::158
12.7.2GIMPLE_ASSIGN
159
12.73GIMPLEBIND
160
12.7.4GIMPLECALL
::::161
12.75GIMPLECATCH
::162
127.6GIMPLECHANGEDYNAMICTYPE
163
12.7.7GIMPLECOND
163
127.8GIMPLEEHFILTER
164
127.9GIMPLELABEL
::165
12.7.10GIMPLE_NOP
165
12.7.11GIMPLE_OMPATOMIC_LOAD::
:::165
12.7.12GIMPLE_OMP_ATOMIC_STORE
165
12.7.13GIMPLEOMPCONTINUE:::::::::::::::::::::
166
12.7.14GIMPLEOMPCRITICAL
166
12.7.15GIMPLEOMPFOR
:166
12.7.16GIMPLE_OMPMASTER
::168
12.7.17GIMPLEOMPORDERED
::168
12.7.18GIMPLEOMPPARALLEL
::168
12.7.19GIMPLE_OMP_RETURN
169
12.7,20GIMPLEOMPSECTION
:::::::::169
12.7,21GIMPLE_OMPSECTIONS
::::169
12.7.22GIMPLEOMPSINGLE
:::::::::::170
12.7.23GIMPLEPHI:::::::::::
170
12,7.24GIMPLERESX
171
12.7.25GIMPLERETURN
::::::::::::::::::::171
12.7.26GIMPLESWITCH
171
12.7.27GIMPLE_TRY
:::172
12.7.28GIMPLEWITHCLEANUPEXPR
172
GNU编译器内部实现
128GIMPLE序列:
:173
129序列迭代器:::::::::::
::::::174
1210增加一个新的GIMPLE语句代码::
177
12.11语句和操作数遍历::
177
13分析和优化GIMPLE元组:::::::::::::::178
13.1Annotations
178
132SSA操作数::
178
13.2.1操作数迭代器和访问例程
179
1322立即使用:::::::
:;:::
181
13.3静态单赋值:::::::::
::::::183
1331保持SSA形式::::::::::
184
13.32保持虚SSA形式:::::
185
1333检验SSANAM节点:::::::::
185
13.34遍历use-def链::
186
133.5遍历支配树
::186
3.4别名分析
186
14循环分析和表示::::::::::::::::::189
141循环表示:
189
142循环查询:
190
143循环操作::
191
144循环封闭的SSA飛式
:192
145标量演化
192
146RTL上的ⅣV分析
193
147迭代次数分析
148数据依赖分析:::
:
193
194
149线性循环转换框架:::
::195
14.10Omega一种对线性规划问题的求解
195
15控制流图::::::::::::::::::::
195
15.1基本块
196
152边:::
197
153Profile信息:::::
199
154维护CFG
:::200
15.5活跃信息::::::::::::::
201
16机器描述::::::::::::::::::::::::::201
161概述机器描述是如何被使用的:
202
162指令模式的方方面面
::202
163有关define_insn的例子
203
164RTL模板:
::203
16.5输岀模板和操作数替换∷:::
:::
206
166用于汇编输出的C语句
207
16.7断言
::;:
:::208
167.1机器无关的predicate
209
1672定义机器特定的predicate
::::::210
168操作数的约束:
212
168.1简单约束::::
::::::::212
1682多个可选的约束
215
1683寄存器类别优先选择
:215
1684constrain修饰符
216
168.5机器特定的约束:::::::
217
1686使用enabled属性来禁止insn可选项
232
168.7定义机器特定的约束:::
233
1688从C中测试约束
234
169用于生成的标准指令模式名
:::::::235
1610指令模式的顺序问题:
253
1611指令模式的相互依赖性:
:254
1612定义跳转指令模式
254
1613定义循环指令模式
::::255
1614指令规范化
257
1615为代码生成定义RTL序列::::
:258
1616定义如何拆分指令
260
1617在机器描述中包含指令模式
262
1617.1用于目录搜索的RTL生成工具选项::::::::::
263
1618机器特定的窥孔优化
263
16181RTL到文本的窥孔优化器
::::::263
1618.2RTL到RTL的窥孔优化器
265
1619指令属性
266
16191定义属性以及它们的值
266
1619.2属性表达式
::::267
16193给Insns赋予属性值::
:269
16194关于属性说明的例子:
::::::::270
16195计算一个Insn的长度::::
:
271
1619.6常量属性
272
16197延迟槽调度
272
16198处理器流水线描述:::::::
273
1620条件执行
277
1621常量定义::::::
::278
16.22迭代器
:::::279
16221机器模式迭代器::::::
279
16.22.1.1定义机器模式迭代器::
279
1622.1.2机器模式迭代器中的替换
279
1622.1.3有关机器模式迭代器的例子
280
v
GNU编译器内部实现
16222代码迭代器
281
17目标机描述宏和函数:::::::::::::::::282
17.1全局变量target
::::282
17.2控制编译驱动器,gcc'::::::
:282
173运行时的target指定
:;::
289
174为基于每个函数的信息定义数据结构
291
17.5存储布局::::::
291
17.6源语言的数据类型布局
:298
177寄存器的用法::::::
:::
::
302
17.7.1寄存器的基本特征
303
17.7.2寄存器的分配顺序::::::
::::304
1773如何使值适合寄存器
305
1774处理叶子函数::::::::
:::::306
17.7.5形成栈的寄存器
307
178寄存器类别
307
17.9废弃的定义约束的宏::
::::::314
17.10栈布局和调用约定:
315
17.10.1基本的帧布局
315
17.10.2对异常处理的支持:
318
17.10.3指定如何进行栈检查::::::::
320
17.104用于栈帧寻址的寄存器::
::321
17.105消除帧指针和参数指针
323
1710.6在栈上传递函数参数
:324
17.10.7在寄存器中传递参数
325
17.10.8标量函数值如何被返回
;:::::
329
17.10.9如何返回大的值
330
17.10.10调用者保存的寄存器分配:
:331
17.1011函数入口和出口
331
17.1012为profiling生成代码
334
17.1013允许尾调用
334
17.1014栈冲突保护
335
1711实现Varargs宏
335
17.12嵌套函数的蹦床::
:::337
1713库例程的隐式调用:::
338
17.14寻址模式
340
17.15锚定的地址
343
17.16条件代码状态:
::
:::344
17.17描述操作的相对代价:::
346
17.18调整指令调度器:::::::
:::349
1719将输出划分到section中(Texts,Data,,.)
353
17.20位置独立代码::::
357
17.21定义汇编语言输出
357
17.211汇编文件的总体框架
358
17.21.2数据的输出
360
17.21.3未初始化变量的输出
::
:::362
17.214标号的生成和输出
::363
17.21.5如何处理初始化函数:::::::::::::::::::::::::368
暂无评论