RealView ® CompilationTools コンパイラ/ライブラリガイド

バージョン 3.0


Table of Contents

序章
本書について
対象読者
本書の構成
表記規則
参考資料
フィードバック
RealView Compilation Tools に関するフィードバック
本書に関するフィードバック
1. はじめに
1.1. RVCT について
1.1.1. サンプルの使用方法
1.2. ARM コンパイラおよびライブラリ
1.2.1. ARM コンパイラ
1.2.2. C ライブラリと C++ ライブラリ
1.2.3. 従来のオブジェクトおよびライブラリとの互換性
2. ARM コンパイラの使用
2.1. ARM コンパイラについて
2.1.1. 標準と互換性
2.1.2. ARM コンパイラの起動
2.1.3. マルチファイルのコンパイル
2.1.4. リンカのフィードバック
2.1.5. インラインアセンブリ言語と組み込みアセンブリ言語
2.1.6. セミホスティング
2.1.7. ライブラリのサポート
2.2. ファイルの使用
2.2.1. 命名規則
2.2.2. インクルードファイル
2.2.3. プリコンパイルヘッダファイル
2.3. armcc コマンドの構文
2.3.1. コマンドラインオプション
2.3.2. ARM コンパイラの起動
2.3.3. ソース言語の設定
2.3.4. 検索パスの指定
2.3.5. PCH 処理に関するオプション
2.3.6. プリプロセッサオプションの設定
2.3.7. 構文チェック
2.3.8. C++ 言語のコンフィグレーションとオブジェクトの生成
2.3.9. 出力形式の指定
2.3.10. ターゲットプロセッサまたはアーキテクチャの指定
2.3.11. デバッグ情報の生成
2.3.12. コード生成の制御
2.3.13. シンボルバージョンの追加
2.3.14. デフォルトのオブジェクトの拡張子
2.3.15. オブジェクトに関連する情報
2.3.16. 診断メッセージ
2.3.17. AAPCS オプションの使用
3. ARM コンパイラに関する参考情報
3.1. コンパイラ固有の機能
3.1.1. プラグマ
3.1.2. weak 関数
3.1.3. 演算子
3.1.4. コンパイラ組み込み関数
3.1.5. 型修飾子
3.1.6. スレッドローカル記憶域
3.1.7. 8 バイト境界整列機能
3.2. C 言語と C++ 言語の拡張機能
3.2.1. C 言語と C++ 言語の拡張機能
3.2.2. C 言語の拡張機能
3.2.3. C++ 言語の拡張機能
3.3. ARM コンパイラの GNU 拡張機能
3.3.1. 境界整列
3.3.2. 代替キーワード
3.3.3. アセンブララベル
3.3.4. 属性の構文
3.3.5. 組み込み関数
3.3.6. C++ のコメント
3.3.7. case の範囲
3.3.8. 共用体のキャスト
3.3.9. 文字エスケープ
3.3.10. 複合リテラル
3.3.11. 条件付きステートメント
3.3.12. 指定済みのイニシャライザ
3.3.13. ドル記号
3.3.14. 関数属性
3.3.15. 関数名
3.3.16. 関数のプロトタイプ
3.3.17. 16 進浮動小数点数
3.3.18. 不完全な enum 型
3.3.19. イニシャライザ
3.3.20. インライン
3.3.21. ローカルラベル
3.3.22. long long
3.3.23. 左辺値
3.3.24. ポインタ算術演算
3.3.25. 復帰アドレスとフレームアドレス
3.3.26. ステートメント式
3.3.27. 構造体への添字の付加
3.3.28. 型属性
3.3.29. typeof
3.3.30. 無名のフィールド
3.3.31. 変数属性
3.3.32. 可変個引数マクロ
3.3.33. 長さがゼロの配列
3.4. 定義済みマクロ
3.5. C および C++ の実装に関する詳細
3.5.1. 文字セットと識別子
3.5.2. 基本データ型
3.5.3. 基本データ型の演算
3.5.4. 構造体、共用体、列挙型、ビットフィールド
3.5.5. 可変個引数マクロ
3.5.6. ::operator new 関数の使用
3.5.7. 仮配列
3.5.8. C++ 関数での旧方式の C パラメータ
3.5.9. アナクロニズム
3.5.10. テンプレートのインスタンス生成
3.5.11. ネームスペース
3.5.12. C++ の例外処理
3.5.13. Extern インライン関数
4. インラインアセンブラと組み込みアセンブラ
4.1. インラインアセンブラ
4.1.1. インラインアセンブラ構文
4.1.2. インラインアセンブリ演算の制限
4.1.3. 仮想レジスタ
4.1.4. 定数
4.1.5. 命令の展開
4.1.6. 条件フラグ
4.1.7. オペランド
4.1.8. 関数呼び出しと分岐
4.1.9. ラベル
4.1.10. 旧バージョンの ARM C/C++ コンパイラとの相違点
4.2. 組み込みアセンブラ
4.2.1. 組み込みアセンブラ構文
4.2.2. 組み込みアセンブリの制限
4.2.3. 組み込みアセンブリと C/C++ との式の相違点
4.2.4. 組み込みアセンブリ関数の生成
4.2.5. __cpp キーワード
4.2.6. 手動による多重定義の解決
4.2.7. 関連ベースクラスのキーワード
4.2.8. メンバ関数クラスのキーワード
4.2.9. 非スタティックメンバ関数の呼び出し
4.2.10. 旧バージョンの ARM C/C++ コンパイラとの相違点
4.3. sp、lr、または pc にアクセスする従来のインラインアセンブラ
4.3.1. 従来のコードでの sp (r13)、lr (r14)、および pc(r15) へのアクセス
4.4. インラインアセンブリコードと組み込みアセンブリコードの相違点
5. C と C++ のライブラリ
5.1. ランタイムライブラリについて
5.1.1. ABI for the ARM Architectureへの準拠
5.1.2. C および C++ ライブラリの機能
5.1.3. ネームスペース
5.1.4. ビルドオプションとライブラリバリアント
5.1.5. ライブラリのディレクトリ構造
5.1.6. VFP サポートライブラリの使用
5.1.7. Thumb C ライブラリ
5.2. 再入可能およびスレッドセーフコードの記述
5.2.1. 再入可能性とスレッドセーフティについて
5.2.2. C ライブラリでのスタティックデータの使用
5.2.3. __user_libspace スタティックデータ領域
5.2.4. マルチスレッドアプリケーションにおけるロックの管理
5.2.5. マルチスレッドアプリケーションでの ARM C ライブラリの使用
5.2.6. ARM C ライブラリでのスレッドセーフティ
5.2.7. ARM C++ ライブラリでのスレッドセーフティ
5.3. C ライブラリを使用したアプリケーションの作成
5.3.1. アプリケーションでのライブラリの使用
5.3.2. セミホスト環境向けのアプリケーションの作成
5.3.3. 非セミホスト環境向けのアプリケーションの作成
5.4. C ライブラリを使用しないアプリケーションの作成
5.4.1. 整数および FP ヘルパ関数
5.4.2. ベアマシン整数 C
5.4.3. 浮動小数点を使用したベアマシン C
5.4.4. C ライブラリの利用
5.4.5. スタンドアロン C ライブラリ関数
5.5. 新しい実行環境に合わせた C ライブラリのカスタマイズ
5.5.1. C/C++ プログラムでのライブラリ関数の使用方法
5.5.2. __rt_entry
5.5.3. プログラムからの終了処理
5.5.4. __rt_exit()
5.5.5. __rt_lib_init()
5.5.6. __rt_lib_shutdown()
5.6. スタティックデータアクセスのカスタマイズ
5.7. ロケールと CTYPE のカスタマイズ
5.7.1. リンク時におけるロケールの選択
5.7.2. 実行時におけるロケールの選択
5.7.3. マクロおよびユーティリティ関数
5.7.4. _get_lc_ctype()
5.7.5. _get_lc_collate()
5.7.6. _get_lc_monetary()
5.7.7. _get_lc_numeric()
5.7.8. _get_lc_time()
5.7.9. _get_lconv()
5.7.10. localeconv()
5.7.11. setlocale()
5.7.12. _findlocale()
5.7.13. __LC_CTYPE_DEF
5.7.14. __LC_COLLATE_DEF
5.7.15. __LC_TIME_DEF
5.7.16. __LC_NUMERIC_DEF
5.7.17. __LC_MONETARY_DEF
5.7.18. __LC_INDEX_END
5.7.19. lconv 構造体
5.8. エラー通知、エラー処理、プログラム終了処理のカスタマイズ
5.8.1. _sys_exit()
5.8.2. errno
5.8.3. __rt_errno_addr()
5.8.4. __raise()
5.8.5. __rt_raise()
5.8.6. __default_signal_handler()
5.8.7. _ttywrch()
5.8.8. __rt_fp_status_addr()
5.9. ストレージ管理のカスタマイズ
5.9.1. ARM で提供されるヒープおよびヒープを使用する関数の無効化
5.9.2. malloc のサポート
5.9.3. 独自のストレージ管理システムの作成
5.9.4. __Heap_Descriptor
5.9.5. __Heap_Initialize()
5.9.6. __Heap_DescSize()
5.9.7. __Heap_ProvideMemory()
5.9.8. __Heap_Alloc()
5.9.9. __Heap_Free()
5.9.10. __Heap_Realloc()
5.9.11. __Heap_Stats()
5.9.12. __Heap_Valid()
5.9.13. __Heap_Full()
5.9.14. __Heap_Broken()
5.10. ランタイムメモリモデルのカスタマイズ
5.10.1. メモリモデル
5.10.2. ランタイムメモリモデルの制御
5.10.3. 独自のメモリモデルの記述
5.10.4. __user_initial_stackheap()
5.10.5. __user_setup_stackheap()
5.10.6. __user_heap_extend()
5.10.7. __user_heap_extent()
5.10.8. __user_stack_cleanup_space()
5.10.9. __rt_stackheap_init()
5.10.10. __rt_stack_overflow()
5.10.11. __rt_heap_extend()
5.10.12. __rt_stack_postlongjmp()
5.10.13. __user_stack_slop()
5.11. 入出力関数のカスタマイズ
5.11.1. 低レベル関数への依存性
5.11.2. ターゲットに依存する I/O サポート関数
5.11.3. _sys_open()
5.11.4. _sys_close()
5.11.5. _sys_read()
5.11.6. _sys_write()
5.11.7. _sys_ensure()
5.11.8. _sys_flen()
5.11.9. _sys_seek()
5.11.10. _sys_istty()
5.11.11. _sys_tmpnam()
5.11.12. _sys_command_string()
5.12. その他の C ライブラリ関数のカスタマイズ
5.12.1. clock()
5.12.2. _clock_init()
5.12.3. time()
5.12.4. remove()
5.12.5. rename()
5.12.6. system()
5.12.7. getenv()
5.12.8. _getenv_init()
5.13. リアルタイム除算の選択
5.14. ISO 実装定義
5.14.1. ISO C ライブラリの実装定義
5.14.2. 標準 C++ ライブラリの実装定義
5.15. C ライブラリの拡張
5.15.1. atoll()
5.15.2. strtoll()
5.15.3. strtoull()
5.15.4. printf()
5.15.5. snprintf()
5.15.6. vsnprintf()
5.15.7. lldiv()
5.15.8. llabs()
5.15.9. wcstombs()
5.15.10. alloca()
5.15.11. strlcpy()
5.15.12. strlcat()
5.15.13. _fisatty()
5.15.14. __heapstats()
5.15.15. __heapvalid()
5.16. ライブラリの命名規則
5.16.1. ARM ライブラリの配置
5.16.2. ヘルパライブラリ
5.16.3. ライブラリのバリアントの識別
6. 浮動小数点サポート
6.1. 浮動小数点サポートについて
6.2. ソフトウェア浮動小数点ライブラリ fplib
6.2.1. 浮動小数点ライブラリ fplib の機能
6.2.2. 特定形式の数値に対する演算
6.2.3. float、double、int の間の変換
6.2.4. long long と他の数値形式との変換
6.2.5. 浮動小数点の比較
6.2.6. C99 の関数
6.3. 浮動小数点環境の制御
6.3.1. __ieee_status()
6.3.2. __fp_status()
6.3.3. __vfp_status()
6.3.4. Microsoft 互換関数
6.3.5. C99 互換関数
6.3.6. C99 インタフェースの ARM コンパイラ拡張
6.4. 数学ライブラリ mathlib
6.4.1. mathlib での範囲の縮小
6.4.2. 浮動小数点数の型を判断するマクロ(fpclassify)
6.4.3. 数値が有限かどうかを判断するマクロ(isfinite)
6.4.4. 数値が無限かどうかを判断するマクロ(isinf)
6.4.5. 数値が NaN かどうかを判断するマクロ(isnan)
6.4.6. 数値が正規かどうかを判断するマクロ(isnormal)
6.4.7. 数値の符号ビットを返すマクロ(signbit)
6.4.8. 符号コピー関数(copysign、copysignf)
6.4.9. 比較マクロ(isgreater、isgreaterequal、isless、islessequal、islessgreater、isunordered)
6.4.10. 逆双曲線関数(acosh、asinh、atanh)
6.4.11. 立方根(cbrt)
6.4.12. エラー関数(erf、erfc)
6.4.13. exp(x )- 1 を求める関数(expm1)
6.4.14. ガンマ関数(gamma、gamma_r)
6.4.15. 斜辺関数(hypot)
6.4.16. 第 1 種のベッセル関数(j0、j1、jn)
6.4.17. ガンマ関数の対数(lgamma、lgamma_r)
6.4.18. x + 1 の対数(log1p)
6.4.19. IEEE 754 剰余関数(remainder)
6.4.20. IEEE 整数への丸め演算(rint)
6.4.21. 数値の小数部を返す関数(significand)
6.4.22. 第 2 種のベッセル関数(y0、y1、yn)
6.4.23. (旧バージョン)数値の指数(ilogb、ilogbf、ilogbl)
6.4.24. (旧バージョン)数値が有限かどうかを判断する関数(finite)
6.4.25. (旧バージョン)数値が NaNかどうかを判断する関数(isnan)
6.5. IEEE 754 算術演算
6.5.1. 基本データ型
6.5.2. 算術演算と丸め
6.5.3. 例外
7. セミホスティング
7.1. セミホスティングについて
7.1.1. セミホスティングとは
7.1.2. セミホスティングインタフェース
7.2. セミホスティングの実装
7.2.1. RealView ARMulator ISS
7.2.2. RealView ICE
7.2.3. Multi-ICE
7.2.4. Instruction Set System Model
7.2.5. RealMonitor
7.3. セミホスティング SVC
7.3.1. SYS_OPEN(0x01)
7.3.2. SYS_CLOSE(0x02)
7.3.3. SYS_WRITEC(0x03)
7.3.4. SYS_WRITE0(0x04)
7.3.5. SYS_WRITE(0x05)
7.3.6. SYS_READ(0x06)
7.3.7. SYS_READC(0x07)
7.3.8. SYS_ISERROR(0x08)
7.3.9. SYS_ISTTY(0x09)
7.3.10. SYS_SEEK(0x0A)
7.3.11. SYS_FLEN(0x0C)
7.3.12. SYS_TMPNAM(0x0D)
7.3.13. SYS_REMOVE(0x0E)
7.3.14. SYS_RENAME(0x0F)
7.3.15. SYS_CLOCK(0x10)
7.3.16. SYS_TIME(0x11)
7.3.17. SYS_SYSTEM(0x12)
7.3.18. SYS_ERRNO(0x13)
7.3.19. SYS_GET_CMDLINE(0x15)
7.3.20. SYS_HEAPINFO(0x16)
7.3.21. SYS_ELAPSED(0x30)
7.3.22. SYS_TICKFREQ(0x31)
7.4. デバッグエージェントインタラクション SVC
7.4.1. angel_SWIreason_EnterSVC(0x17)
7.4.2. angel_SWIreason_ReportException(0x18)
A. via ファイルの構文
A.1. via ファイルの概要
A.1.1. via ファイルの評価
A.2. 構文
B. 標準 C の実装定義
B.1. 実装定義
B.1.1. 変換
B.1.2. 環境
B.1.3. 識別子
B.1.4. 文字
B.1.5. 整数
B.1.6. 浮動小数点
B.1.7. 配列とポインタ
B.1.8. レジスタ
B.1.9. 構造体、共用体、列挙型、ビットフィールド
B.1.10. 修飾子
B.1.11. 宣言子
B.1.12. ステートメント
B.1.13. プリプロセッシングディレクティブ
B.1.14. ライブラリ関数
C. 標準 C++ の実装定義
C.1. 整数変換
C.2. 純仮想関数の呼び出し
C.3. サポートされている主な言語機能
C.4. 標準 C++ ライブラリの実装定義
D. C および C++ コンパイラの実装に関する制限
D.1. C++ ISO/IEC 標準に関する制限
D.2. 内部制限
D.3. 整数値に関する制限
D.4. 浮動小数点数に関する制限
E. 旧オプションの使用
E.1. 旧ツール名を使用した ARM コンパイラの起動
E.2. 旧コンパイラオプションと新しいリリースとの対応
E.2.1. RVCT の警告メッセージ
E.2.2. その他の詳細情報
F. NEON コンパイラ組み込み関数
F.1. はじめに
F.2. ベクタのデータ型
F.2.1. ベクタ型の配列
F.3. コンパイラ組み込み関数
F.3.1. 加算
F.3.2. 乗算
F.3.3. 減算
F.3.4. 比較
F.3.5. 絶対差
F.3.6. 最大/最小/合計
F.3.7. 最大値の畳み込み
F.3.8. 最小値の畳み込み
F.3.9. 逆数/平方根
F.3.10. 符号付き変数によるシフト
F.3.11. 定数によるシフト
F.3.12. シフトして挿入
F.3.13. 単一ベクタのロードとストア
F.3.14. N 要素構造体のロードとストア
F.3.15. ベクタからのレーンの抽出
F.3.16. ベクタ内のレーンの設定
F.3.17. ビットパタンからのベクタの初期化
F.3.18. すべてのレーンを同じ値に設定
F.3.19. ベクタの結合
F.3.20. ベクタの分割
F.3.21. ベクタの変換
F.3.22. テーブル検索
F.3.23. 拡張テーブル検索のコンパイラ組み込み関数
F.3.24. スカラ値での演算
F.3.25. ベクタ抽出
F.3.26. ベクタ要素の反転(エンディアン方式のスワップ)
F.3.27. その他の単一オペランドの算術演算
F.3.28. 論理演算
F.3.29. 転置操作
F.3.30. ベクタの再解釈キャスト操作

List of Tables

2.1. ファイル拡張子によって変更される起動時のコンフィグレーション
2.2. オーバーライドオプションによって変更される起動時のコンフィグレーション
2.3. コンフィグレーションの例
2.4. インクルードファイルの検索パス
2.5. 診断メッセージの重大度
2.6. 診断メッセージの識別
3.1. ARM コンパイラで認識されるプラグマ
3.2. サポートされている GNU 拡張機能
3.3. 定義済みマクロ
3.4. 最新リリースのマクロの値
3.5. 文字エスケープコード
3.6. データ型のサイズと境界整列
4.1. インラインアセンブラと組み込みアセンブラの相違点
5.1. スレッドセーフな関数
5.2. スレッドセーフではない関数
5.3. 直接セミホスト SVC 依存関数
5.4. 間接セミホスト SVC 依存関数
5.5. 最新の API 定義
5.6. C ライブラリの呼び出し
5.7. デフォルトの ISO8859-1 ロケール
5.8. デフォルトの Shift-JIS ロケールと UTF-8 ロケール
5.9. ロケールカテゴリの実装
5.10. ロケールブロックのマクロと関数
5.11. トラップおよびエラー処理
5.12. ヒープ関数
5.13. メモリモデルの初期化
5.14. メモリモデル関数
5.15. 入出力依存
5.16. I/O サポート関数
5.17. ISO C ライブラリ関数
5.18. 数学関数
5.19. 信号関数
5.20. perror() メッセージ
5.21. 標準 C++ ライブラリとの相違点
5.22. C ライブラリの拡張
6.1. 算術演算ルーチン
6.2. 数値形式変換ルーチン
6.3. long long 形式に関連するルーチンの変換
6.4. 浮動小数点比較ルーチン
6.5. C99 ルーチン
6.6. ステータスワードビットの修正
6.7. 丸めモードの制御
6.8. _controlfp の引数に使用されるマクロ
6.9. FE_EX_INTYPE_MASK オペランドの型フラグ
6.10. FE_EX_OUTTYPE_MASK オペランドの型フラグ
6.11. FE_EX_FN_MASK オペランドの演算の型フラグ
6.12. FE_EX_CMPRET_MASK の比較型フラグ
6.13. 比較マクロ
6.14. 単精度浮動小数点値のサンプル
6.15. 倍精度浮動小数点値のサンプル
7.1. セミホスティング SVC
7.2. モードの値
7.3. ハードウェアベクタ要因コード
7.4. ソフトウェア要因コード
C.1. サポートされている主な言語機能
D.1. 実装に関する制限
D.2. 内部制限
D.3. 整数の範囲
D.4. 浮動小数点数に関する制限
D.5. 浮動小数点数に関するその他の特性
E.1. 旧ツール名に対応する起動コンフィグレーション
E.2. コンパイラオプションの対応
E.3. 警告メッセージの制御
F.1. ベクタのデータ型

著作権

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

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

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

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

機密保持ステータス

本書は非機密扱いであり、本書を使用、複製、および開示する権利は、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 版)
Copyright © 2002-2006 ARM Limited. All rights reserved. ARM DUI 0205GJ
Non-Confidential