RealView® 编译工具 《编译器用户指南》

4.0 版


Table of Contents

1. 前言
关于本手册
适用对象
使用本手册
印刷约定
更多参考出版物
反馈
对 RealView 编译工具的反馈
关于本手册的反馈
1. 简介
1.1. 关于 ARM 编译器
1.2. 关于 NEON 向量化编译器
1.3. 源语言模式
1.4. C 和 C++ 库
2. ARM 编译器使用入门
2.1. 使用命令行选项
2.1.1. 调用 ARM 编译器
2.1.2. 命令行选项排序
2.1.3. 使用环境变量指定命令行选项
2.1.4. 自动完成命令行选项
2.1.5. 从文件读取编译器选项
2.1.6. 指定 stdin 输入
2.2. 文件命名约定
2.2.1. 可移植性
2.2.2. 输出文件
2.3. 头文件
2.3.1. 当前位置
2.3.2. RVCT40INC 环境变量
2.3.3. 搜索路径
2.3.4. TMP 和 TMPDIR 环境变量
2.4. 预编译的头文件
2.4.1. 自动 PCH 处理
2.4.2. 手动 PCH 处理
2.4.3. 控制 PCH 处理期间的消息输出
2.4.4. 性能问题
2.5. 指定目标处理器或体系结构
2.5.1. NEON 技术
2.6. 指定过程调用标准 (AAPCS)
2.6.1. 交互操作限定符
2.6.2. 位置无关限定符
2.7. 使用链接器反馈
2.7.1. 删除未使用的函数
2.7.2. 减少进行交互操作所需的编译
2.8. 添加符号版本
3. 使用 NEON 向量化编译器
3.1. NEON 单元
3.2. 编写用于 NEON 的代码
3.2.1. NEON C 扩展
3.2.2. 自动向量化
3.2.3. 性能目标
3.3. 使用自动向量化
3.3.1. 自动向量化概述
3.3.2. 向量化概念
3.3.3. 影响向量化性能的因素
3.3.4. 改善性能
3.4. 示例
4. 编译器功能
4.1. 内在函数
4.1.1. 关于内在函数
4.1.2. 指令内在函数
4.1.3. ETSI 基本运算
4.1.4. TI C55x 内在函数
4.1.5. 已命名的寄存器变量
4.1.6. NEON 内在函数
4.2. 编译指示
4.3. 位处理操作
4.3.1. 使用 __attribute__((bitband))
4.3.2. 使用命令行上的 --bitband
4.3.3. 限制
4.4. 线程局部存储
4.5. 8 字节对齐功能
5. 编程惯例
5.1. 优化代码
5.1.1. 大小与速度的优化
5.1.2. 优化级别和调试视图
5.1.3. 选择目标 CPU
5.1.4. 优化循环
5.1.5. 使用 volatile
5.2. 代码度量
5.2.1. 测量代码和数据大小
5.2.2. 测量堆栈使用
5.2.3. 减少对象文件和库中的调试信息
5.3. 函数
5.3.1. 将参数传递开销最小化
5.3.2. __value_in_regs
5.3.3. __pure
5.3.4. 放置 ARM 函数限定符
5.4. 函数内联
5.4.1. 编译器如何确定内联
5.4.2. 什么时候才适合编译器执行内联?
5.4.3. 管理内联
5.4.4. 自动内联
5.4.5. C++、C90、C99 和 GNU C90 编译器模式之间的行为差异
5.4.6. 链接器内联
5.4.7. 调试数据和 --no_inline 及 --inline 命令行选项
5.4.8. 将函数标记为静态
5.4.9. 在 ROM 映像中为内联函数设置断点
5.5. 对齐数据
5.5.1. 数据对齐的类型
5.5.2. 未对齐的数据访问
5.5.3. __packed 限定符和未对齐的数据访问
5.5.4. __packed 结构与单个 __packed 字段
5.6. 使用浮点算法
5.6.1. 浮点运算的支持
5.6.2. VFP 体系结构
5.6.3. VFP 支持
5.6.4. 半精度浮点数支持
5.6.5. 浮点计算和链接
5.7. 捕获和标识除零错误
5.7.1. 整数除零
5.7.2. (软件)浮点除法
5.8. C99 的新功能
5.8.1. 语言功能
5.8.2. 库功能
6. 诊断消息
6.1. 重定向诊断
6.2. 诊断消息的严重性
6.3. 控制诊断消息的输出
6.4. 更改诊断消息的严重性
6.5. 禁止显示诊断消息
6.6. 诊断消息中的前缀字母
6.7. 使用 -W 禁止显示警告消息
6.8. 退出状态代码和终止消息
6.8.1. 信号反应
6.8.2. 退出状态
6.9. 数据流警告
7. 使用内联汇编器和嵌入式汇编器
7.1. 内联汇编器
7.1.1. 内联汇编器支持
7.1.2. 内联汇编器语法
7.1.3. 内联汇编操作的限制
7.1.4. 虚拟寄存器
7.1.5. 常数
7.1.6. 指令扩展
7.1.7. 条件标记
7.1.8. 操作数
7.1.9. 函数调用和跳转
7.1.10. 标签
7.1.11. 与先前版本 ARM C/C++ 编译器的差异
7.2. 嵌入式汇编器
7.2.1. 嵌入式汇编器语法
7.2.2. 嵌入式汇编程序的限制
7.2.3. 嵌入式汇编表达式和 C 或 C++ 表达式之间的差异
7.2.4. 嵌入式汇编函数的生成
7.2.5. __cpp 关键字
7.2.6. 手动解决重载
7.2.7. 相关基类的关键字
7.2.8. 成员函数类的关键字
7.2.9. 调用非静态成员函数
7.3. 访问 sp、lr 或 pc 的旧内联汇编器
7.3.1. 访问旧代码中的 sp (r13)、lr (r14) 和 pc (r15)
7.4. 内联汇编代码与嵌入式汇编代码之间的差异

List of Figures

5.1. 半精度浮点格式

所有权声明

除非本所有权声明在下面另有说明,否则带有 ®™ 标记的词语和徽标是 ARM® Limited 在欧盟和其他国家/地区的注册商标或商标。 此处提及的其他品牌和名称可能是其各自所有者的商标。

除非事先得到版权所有人的书面许可,否则不得以任何形式修改或复制本文档包含的部分或全部信息以及产品说明。

本文档描述的产品还将不断发展和完善。 ARM Limited 将如实提供本文档所述产品的所有特性及其使用方法。 但是,所有暗示或明示的担保,包括但不限于对特定用途适销性或适用性的担保,均不包括在内。

本文档的目的仅在于帮助读者使用产品。 对于因使用本文档中的任何信息、文档信息出现任何错误或遗漏或者错误使用产品造成的任何损失或损害,ARM 公司概不负责。

使用 ARM 一词时,它表示“ARM 或其任何相应的子公司”。

保密状态

本文档的内容是非保密的。 根据 ARM 与 ARM 将本文档交予的参与方的协议条款,使用、复制和公开本文档内容的权利可能会受到许可限制的制约。

受限访问是一种 ARM 内部分类。

产品状态

本文档的信息是开发的产品的最新信息。

Revision History
Revision A2002 年 8 月1.2 版
Revision B2003 年 1 月2.0 版
Revision C2003 年 9 月RealView Developer Suite v2.0 2.0.1 版
Revision D2004 年 1 月RealView Developer Suite v2.1 2.1 版
Revision E2004 年 12 月RealView Developer Suite v2.2 2.2 版
Revision F2005 年 5 月RealView Developer Suite v2.2 SP1 2.2 版
Revision G2006 年 3 月RealView Development Suite v3.0 3.0 版
Revision H2007 年 3 月RealView Development Suite v3.1 3.1 版
Revision I2008 年 9 月RealView Development Suite v4.0 4.0 版
Revision I2009 年 1 月 23 日RealView Development Suite 4.0 版的文档更新
Copyright © 2002-2009 ARM Limited. All rights reserved.ARM DUI 0205IC
Non-Confidential