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

バージョン 4.0


Table of Contents

1. 序章
本書について
対象読者
本書の構成
表記規則
参考資料
フィードバック
RealView Compilation Tools に関するフィードバック
本書に関するフィードバック
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 Technology
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. 関数の static 化
5.4.9. ROM イメージのインライン関数へのブレークポイントの設定
5.5. データの境界整列
5.5.1. データ境界整列の種類
5.5.2. 非境界整列データアクセス
5.5.3. __packed 修飾子と非境界整列型のデータアクセス
5.5.4. パック構造体と個別パックフィールド
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. 半精度浮動小数点形式

List of Tables

2.1. ARM コンパイラで認識されるファイル名の接尾文字
2.2. インクルードファイルの検索パス
3.1. 配列 A
3.2. 配列 B
3.3. 結果
5.1. インクリメントループとデクリメントループを表す C コード
5.2. インクリメントループとデクリメントループを表す C 逆アセンブリコード
5.3. 未展開および展開されたビットカウントループを表す C コード
5.4. 未展開および展開されたビットカウントループを表す逆アセンブリコード
5.5. 非揮発バッファループと揮発バッファループを表す C コード
5.6. 非揮発バッファループと揮発バッファループを表す逆アセンブリコード
5.7. 純関数および非純関数を表す C コード
5.8. 純関数および非純関数を表す逆アセンブリコード
5.9. コンパイラがバイト境界整列により、データオブジェクトを保存します
5.10. パックされていない struct、パックされた struct、および個々のフィールドがパックされた struct を表す C コード
5.11. パックされていない struct、パックされた struct、および個々のフィールドがパックされた struct を表す逆アセンブリコード
5.12. 浮動小数点リンケージと浮動小数点計算のコンパイラオプション
6.1. 診断メッセージの重大度
6.2. 診断メッセージの識別
7.1. インラインアセンブラと組み込みアセンブラの相違点

著作権

® または ™ のマークが付いた言葉およびロゴは、この著作権情報で別段に規定されている場合を除き、ARM® Limited の EU またはその他の国における登録商標および商標です。 本書に記載されている他の製品名は、各社の所有する商標です。

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

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

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

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 月RealView Development Suite v4.0 マニュアルの更新
Revision I2009 年 4 月 19 日RealView Development Suite v4.0 マニュアルの更新 2
Copyright © 2002-2010 ARM Limited. All rights reserved.ARM DUI 0205IJ
Non-ConfidentialID100419