RealView ® CompilationTools コンパイラユーザガイド

バージョン 3.1


Table of Contents

序章
本書について
対象読者
本書の構成
表記規則
参考資料
フィードバック
RealView Compilation Tools に関するフィードバック
本書に関するフィードバック
1. はじめに
1.1. ARM コンパイラについて
1.2. ソース言語モード
1.3. C ライブラリと C++ ライブラリ
1.4. C99 の新機能
1.4.1. 言語機能のサポート
1.4.2. ライブラリ機能
2. ARM コンパイラの使い方
2.1. コマンドラインオプションの使用
2.1.1. ARM コンパイラの起動
2.1.2. コマンドラインオプションの順序
2.1.3. 環境変数を使用したコマンドラインオプションの指定
2.1.4. コマンドラインオプションの自動補完
2.1.5. ファイルからのコンパイラオプションの読み出し
2.1.6. キーボード入力の指定
2.2. ファイル命名規則
2.2.1. 移植性
2.2.2. 出力ファイル
2.3. インクルードファイル
2.3.1. 現在の場所
2.3.2. RVCT31INC 環境変数
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 Technology
2.6. 使用するプロシージャコール標準(AAPCS)の指定
2.6.1. インターワーク修飾子
2.6.2. 位置非依存修飾子
2.7. リンカのフィードバックの使用
2.8. シンボルバージョンの追加
2.9. スレッドローカル記憶域
2.10. 8 バイト境界整列機能
3. コンパイラの機能
3.1. コンパイラ組み込み関数
3.1.1. コンパイラ組み込み関数について
3.1.2. 命令コンパイラ組み込み関数
3.1.3. ETSI の基本操作
3.1.4. TI C55x コンパイラ組み込み関数
3.1.5. 名前付きレジスタ変数
3.1.6. NEON コンパイラ組み込み関数
3.2. プラグマ
4. コーディング慣行
4.1. コードの最適化
4.1.1. サイズの最適化と処理速度の最適化
4.1.2. 最適化レベルとデバッグビュー
4.1.3. ターゲット CPU の選択
4.1.4. ループの最適化
4.1.5. volatile の使用
4.2. コードメトリック
4.2.1. コードサイズとデータサイズの測定
4.2.2. スタック使用量の測定
4.2.3. オブジェクトおよびライブラリにおけるデバッグ情報の削減
4.3. 関数
4.3.1. パラメータ受け渡しに伴うオーバーヘッドの最小化
4.3.2. __value_in_regs
4.3.3. __pure
4.3.4. ARM 関数修飾子の配置
4.4. インライン展開
4.4.1. コンパイラがインライン展開の是非を決定する仕組み
4.4.2. コンパイラによるインライン展開はどのような場合に実際的か?
4.4.3. インライン展開の管理
4.4.4. 複数のファイルにまたがった関数のインライン展開
4.4.5. データと --[no]_inline キーワードのデバッグ
4.4.6. 関数の static 化
4.4.7. ROM イメージのインライン関数へのブレークポイントの設定
4.5. データの境界整列
4.5.1. データの境界整列について
4.5.2. __packed 修飾子と非境界整列型のデータアクセス
4.5.3. パック構造体と個別パックフィールド
4.6. 浮動小数点演算の使用
4.6.1. 浮動小数点演算のサポート
4.6.2. VFP アーキテクチャ
4.6.3. --fpu オプション
4.6.4. 浮動小数点リンケージ
4.6.5. --fpmode オプション
4.6.6. --fpu オプションの使用
4.6.7. VFP サポート
4.7. ゼロ除算エラーのトラップと識別
4.7.1. 整数除算
4.7.2. (ソフトウェア)浮動小数点除算
4.8. ARM アーキテクチャバージョン 6 のサポート
4.8.1. 命令の生成
4.8.2. 境界整列のサポート
4.8.3. エンディアンのサポート
5. 診断メッセージ
5.1. 診断結果の転送
5.2. 診断メッセージの重大度
5.3. 診断メッセージの出力の制御
5.4. 診断メッセージの重大度の変更
5.5. 診断メッセージの非表示
5.6. 診断メッセージの接頭文字
5.7. -W オプションを使用した警告メッセージの非表示
5.8. 終了ステータスコードと終了メッセージ
5.8.1. 信号への応答
5.8.2. 終了ステータス
5.9. データフロー警告
6. インラインアセンブラと組み込みアセンブラの使用
6.1. インラインアセンブラ
6.1.1. インラインアセンブラ構文
6.1.2. インラインアセンブリ演算の制限
6.1.3. 仮想レジスタ
6.1.4. 定数
6.1.5. 命令の展開
6.1.6. 条件フラグ
6.1.7. オペランド
6.1.8. 関数呼び出しと分岐
6.1.9. ラベル
6.1.10. 旧バージョンの ARM C/C++ コンパイラとの相違点
6.2. 組み込みアセンブラ
6.2.1. 組み込みアセンブラ構文
6.2.2. 組み込みアセンブリの制限
6.2.3. 組み込みアセンブリと C/C++ との式の相違点
6.2.4. 組み込みアセンブリ関数の生成
6.2.5. __cpp キーワード
6.2.6. 手動による多重定義の解決
6.2.7. 関連ベースクラスのキーワード
6.2.8. メンバ関数クラスのキーワード
6.2.9. 非スタティックメンバ関数の呼び出し
6.2.10. 旧バージョンの ARM C/C++ コンパイラとの相違点
6.3. sp、lr、または pc にアクセスする従来のインラインアセンブラ
6.3.1. 従来のコードでの sp (r13)、lr (r14)、および pc(r15)へのアクセス
6.4. インラインアセンブリコードと組み込みアセンブリコードの相違点
A. 以前のコマンドラインオプションの使用
A.1. 旧ツール名を使用した ARM コンパイラの起動
A.2. ADS 1.2 からのコマンドラインオプションの移行
A.2.1. ADS 1.2 コンパイラオプションと新しいリリースとの対応
A.2.2. 新しいリリースでの ADS 1.2 の診断メッセージの制御
A.3. RVCT 2.2 および RVCT 3.0 からのコマンドラインオプションの移行
A.3.1. RVCT 2.2 コンパイラオプションと新しいリリースとの対応
A.3.2. RVCT 3.0 コンパイラオプションと新しいリリースとの対応
A.4. RVCT の旧オプションに関する警告メッセージ
A.5. 追加の詳細情報

List of Tables

2.1. ARM コンパイラで認識されるファイル名の接尾文字
2.2. インクルードファイルの検索パス
4.1. インクリメントループとデクリメントループを表す C コード
4.2. インクリメントループとデクリメントループを表す C 逆アセンブリコード
4.3. 未展開および展開されたビットカウントループを表す C コード
4.4. 未展開および展開されたビットカウントループを表す逆アセンブリコード
4.5. 非揮発バッファループと揮発バッファループを表す C コード
4.6. 非揮発バッファループと揮発バッファループを表す逆アセンブリコード
4.7. 純関数および非純関数を表す C コード
4.8. 純関数および非純関数を表す逆アセンブリコード
4.9. パックされていない struct、パックされた struct、および個々のフィールドがパックされた structを表す C コード
4.10. パックされていない struct、パックされた struct、および個々のフィールドがパックされた structを表す逆アセンブリコード
4.11. VFP コンパイラオプション
4.12. RVCT でサポートされている浮動小数点モデル
5.1. 診断メッセージの重大度
5.2. 診断メッセージの識別
6.1. インラインアセンブラと組み込みアセンブラの相違点
A.1. 旧ツール名に対応する起動コンフィグレーション
A.2. ADS 1.2 コンパイラオプションの対応
A.3. ADS 1.2 の診断メッセージの制御
A.4. RVCT 2.2 コンパイラオプションの対応
A.5. RVCT 3.0 コンパイラオプションの対応

著作権

® または ™ のマークが付いた語句およびロゴは、ARM Limited が所有する登録商標または商標です。本書に記載されている他の製品名は、各社の所有する商標です。

本書に記載されている情報の全部または一部、ならびに本書で紹介する製品は、著作権所有者の文書による事前の許可を得ない限り、転用・複製することを禁じます。

本書に記載されている製品は、今後も継続的に開発・改良の対象となります。 本書に含まれる製品およびその利用方法についての情報は、ARMが利用者の利益のために提供するものです。 したがって当社では、製品の市販性または利用の適切性を含め、暗示的・明示的に関係なく一切の責任を負いません。

本書は、本製品の利用者をサポートすることだけを目的としています。 本書に記載されている情報の使用、情報の誤りまたは省略、あるいは本製品の誤使用によって発生したいかなる損失・損傷についても、ARMLimited は一切責任を負いません。

ARM という用語が使用されている場合は、"ARM または必要に応じてその子会社"を指します。

機密保持ステータス

本書は非機密扱いであり、本書を使用、複製、および開示する権利は、ARMおよび ARM が本書を提供した当事者との間で締結した契約の条項に基づいたライセンスの制限により異なります。

製品ステータス

本書の情報は最終版であり、開発済み製品に対応しています。

Revision History
Revision A 2002年 8 月 第 1.2 版
Revision B 2003年 1 月 第 2.0 版
Revision C 2003年 9 月 RVDS v2.0 リリース(第 2.0.1 版)
Revision D 2004年 1 月 RVDS v2.1 リリース(第 2.1 版)
Revision E 2004年 12 月 RVDS v2.2 リリース(第 2.2 版)
Revision F 2005年 5 月 RVDS v2.2 SP1 リリース(第 2.2版)
Revision G 2006年 3 月 RVDS v3.0 リリース(第 3.0 版)
Revision H 2007年 3 月 RVDS v3.1 リリース(第 3.1 版)
Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0205HJ
Non-Confidential