RealView ® CompilationTools コンパイラリファレンスガイド

バージョン 3.1


Table of Contents

序章
本書について
対象読者
本書の構成
表記規則
参考資料
フィードバック
RealView Compilation Tools に関するフィードバック
本書に関するフィードバック
1. はじめに
1.1. ARM コンパイラについて
1.2. ソース言語モード
1.2.1. ISO C90
1.2.2. ISO C99
1.2.3. ISO C++
1.3. 言語の拡張と言語への準拠
1.3.1. 言語拡張機能
1.3.2. 言語標準の準拠
1.4. C ライブラリと C++ ライブラリ
2. コンパイラのコマンドラインオプション
2.1. コマンドラインオプション
2.1.1. -Aopt
2.1.2. --[no_]alternative_tokens
2.1.3. --[no_]anachronisms
2.1.4. --apcs=qualifer ...qualifier
2.1.5. --arm
2.1.6. --asm
2.1.7. --[no_]autoinline
2.1.8. --bi gend
2.1.9. --[no_]brief_diagnostics
2.1.10. --bss_threshold=num
2.1.11. -c
2.1.12. -C
2.1.13. --c90
2.1.14. --c99
2.1.15. --[no_]code_gen
2.1.16. --[no_]compile_all_input
2.1.17. --cpp
2.1.18. --cpu=list
2.1.19. --cpu=name
2.1.20. --create_pch=filename
2.1.21. -Dname [(parm-list )][=def ]
2.1.22. --[no_]data_reorder
2.1.23. --[no_]debug
2.1.24. --[no_]debug_macros
2.1.25. --default_extension=ext
2.1.26. --[no_]dep_name
2.1.27. --depend=filename
2.1.28. --depend_format=string
2.1.29. --[no_]depend_system_headers
2.1.30. --diag_error=tag [,tag ,...]
2.1.31. --diag_remark=tag [,tag ,... ]
2.1.32. --diag_style={arm|ide|gnu}
2.1.33. --diag_suppress=tag [,tag ,...]
2.1.34. --diag_suppress=optimizations
2.1.35. --diag_warning=tag [,tag ,...]
2.1.36. --diag_warning=optimizations
2.1.37. --[no_]dllexport_all
2.1.38. --[no_]dllimport_runtime
2.1.39. --[no_]dollar
2.1.40. --dwarf2
2.1.41. --dwarf3
2.1.42. -E
2.1.43. --enum_is_int
2.1.44. --errors=filename
2.1.45. --[no_]exceptions
2.1.46. --[no_]exceptions_unwind
2.1.47. --[no_]export_all_vtbl
2.1.48. --[no_]export_defs_implicitly
2.1.49. --[no_]extended_initializers
2.1.50. --feedback=filename
2.1.51. --[no_]force_new_nothrow
2.1.52. --forceinline
2.1.53. --fpmode=model
2.1.54. --fpu=list
2.1.55. --fpu=name
2.1.56. --[no_]friend_injection
2.1.57. --gnu
2.1.58. --[no_]guiding_decls
2.1.59. --help
2.1.60. --[no_]hide_all
2.1.61. -Idir [,dir ,...]
2.1.62. --[no_]implicit_include
2.1.63. --[no_]implicit_include_searches
2.1.64. --[no_]implicit_typename
2.1.65. --info=totals
2.1.66. --[no_]inline
2.1.67. --interleave
2.1.68. -Jdir [,dir ,...]
2.1.69. --kandr_include
2.1.70. -Lopt
2.1.71. --library_interface=lib
2.1.72. --library_type=lib
2.1.73. --list
2.1.74. --li ttleend
2.1.75. --locale=lang_country
2.1.76. --loose_implicit_cast
2.1.77. --[no_]lower_ropi
2.1.78. --[no_]lower_rwpi
2.1.79. -M
2.1.80. --md
2.1.81. --message_locale=lang_country [.codepage ]
2.1.82. --min_array_alignment=opt
2.1.83. --[no_]multibyte_chars
2.1.84. --[no_]multifile
2.1.85. --[no_]nonstd_qualifier_deduction
2.1.86. -o filename
2.1.87. -Onum
2.1.88. --[no_]old_specializations
2.1.89. -Ospace
2.1.90. -Otime
2.1.91. --[no_]parse_templates
2.1.92. --pch
2.1.93. --pch_dir=dir
2.1.94. --[no_]pch_messages
2.1.95. --[no_]pch_verbose
2.1.96. --pending_instantiations=n
2.1.97. --pointer_alignment=num
2.1.98. --[no_]project=filename
2.1.99. --preinclude=filename
2.1.100. --[no_]reduce_paths
2.1.101. --reinitialize_workdir
2.1.102. --remarks
2.1.103. --[no_]restrict
2.1.104. --[no_]rtti
2.1.105. -S
2.1.106. --[un]signed_bitfields
2.1.107. --[un]signed_chars
2.1.108. --show_cmdline
2.1.109. --split_ldm
2.1.110. --split_sections
2.1.111. --[no_]strict
2.1.112. --strict_warnings
2.1.113. --sys_include
2.1.114. --thumb
2.1.115. -Uname
2.1.116. --[no_]unaligned_access
2.1.117. --use_pch=filename
2.1.118. --[no_]using_std
2.1.119. --[no_]vectorize
2.1.120. --[no_]vfe
2.1.121. --via=filename
2.1.122. --[no_]vla
2.1.123. --vsn
2.1.124. -W
2.1.125. --wchar16
2.1.126. --wchar32
2.1.127. --workdir=directory
2.1.128. --[no_]wrap_diagnostics
3. 言語拡張機能
3.1. プリプロセッサ拡張機能
3.1.1. #assert
3.1.2. #include_next
3.1.3. #unassert
3.1.4. #warning
3.2. C90 で使用可能な C99 言語機能
3.2.1. // コメント
3.2.2. 構造体への添字の付加
3.2.3. フレキシブル配列メンバ
3.3. C++ および C90 で使用可能な C99 言語機能
3.3.1. 可変個引数マクロ
3.3.2. long long
3.3.3. restrict
3.3.4. 16 進浮動小数点数
3.4. 標準の C 言語の拡張機能
3.4.1. 定数式
3.4.2. 配列とポインタの拡張機能
3.4.3. block-scope 関数の宣言
3.4.4. 識別子内のドル記号
3.4.5. トップレベルの宣言
3.4.6. 有用な再宣言
3.4.7. 外部エンティティ
3.4.8. 関数のプロトタイプ
3.5. 標準の C++ 言語の拡張機能
3.5.1. ? 演算子
3.5.2. クラスメンバの宣言
3.5.3. friend
3.5.4. 読み出し/書き込み定数
3.5.5. スカラ型定数
3.5.6. 型変換
3.6. 標準 C および標準 C++ 言語の拡張機能
3.6.1. レジスタ変数のアドレス
3.6.2. 関数の引数
3.6.3. 匿名クラス、匿名構造体、匿名共用体
3.6.4. アセンブララベル
3.6.5. 空の宣言
3.6.6. 16 進数浮動小数点定数
3.6.7. 不完全な enum 型
3.6.8. 整数型の拡張機能
3.6.9. ラベルの定義
3.6.10. long float
3.6.11. 非スタティックローカル変数
3.6.12. 構造体、共用体、列挙型、ビットフィールドの拡張機能
3.7. GNU 言語拡張機能
3.7.1. 代替キーワード
3.7.2. asm keyword
3.7.3. case の範囲
3.7.4. 共用体のキャスト
3.7.5. 文字エスケープシーケンス
3.7.6. 複合リテラル
3.7.7. 指定済みのイニシャライザ
3.7.8. 条件付きステートメント
3.7.9. イニシャライザ
3.7.10. インライン
3.7.11. 拡張左辺値
3.7.12. ポインタ算術演算
3.7.13. ステートメント式
3.7.14. 無名のフィールド
4. コンパイラ固有の機能
4.1. キーワードと演算子
4.1.1. __align
4.1.2. __alignof__
4.1.3. __ALIGNOF__
4.1.4. __asm
4.1.5. __forceinline
4.1.6. __global_reg
4.1.7. __inline
4.1.8. __int64
4.1.9. __INTADDR__
4.1.10. __irq
4.1.11. __packed
4.1.12. __pure
4.1.13. __smc
4.1.14. __softfp
4.1.15. __svc
4.1.16. __svc_indirect
4.1.17. __svc_indirect_r7
4.1.18. __value_in_regs
4.1.19. __weak
4.1.20. __writeonly
4.2. __declspec 属性
4.2.1. __declspec(dllexport)
4.2.2. __declspec(dllimport)
4.2.3. __declspec(noinline )
4.2.4. __declspec(noreturn )
4.2.5. __declspec(nothrow)
4.2.6. __declspec(notshared)
4.2.7. __declspec(thread)
4.3. 関数属性
4.3.1. __attribute__((alias))
4.3.2. __attribute__((always_inline))
4.3.3. __attribute__((const))
4.3.4. __attribute__((deprecated))
4.3.5. __attribute__((malloc))
4.3.6. __attribute__((noinline))
4.3.7. __attribute__((noreturn))
4.3.8. __attribute__((pure))
4.3.9. __attribute__((section))
4.3.10. __attribute__((unused))
4.3.11. __attribute__((used))
4.3.12. __attribute__((weak))
4.4. 型属性
4.4.1. __attribute__((aligned))
4.4.2. __attribute((packed))
4.4.3. __attribute__((transparent_union))
4.5. 変数属性
4.5.1. __attribute__((alias))
4.5.2. __attribute__((at(address )))
4.5.3. __attribute__((aligned))
4.5.4. __attribute__((deprecated))
4.5.5. __attribute__((packed))
4.5.6. __attribute__((section))
4.5.7. __attribute__((transparent_union))
4.5.8. __attribute__((unused))
4.5.9. __attribute__((used))
4.5.10. __attribute__((weak))
4.5.11. __attribute__((zero_init))
4.6. プラグマ
4.6.1. #pragma [no_]anon_unions
4.6.2. #pragma arm
4.6.3. #pragma arm section [section_sort_list ]
4.6.4. #pragma diag_default tag[,tag,...]
4.6.5. #pragma diag_error tag[,tag,...]
4.6.6. #pragma diag_remark tag[,tag,...]
4.6.7. #pragma diag_suppress tag[,tag,...]
4.6.8. #pragma diag_warning tag[,tag, ...]
4.6.9. #pragma [no_]exceptions_unwind
4.6.10. #pragma hdrstop
4.6.11. #pragma import symbol_name
4.6.12. #pragma [no_]inline
4.6.13. #pragma no_pch
4.6.14. #pragma Onum
4.6.15. #pragma once
4.6.16. #pragma Ospace
4.6.17. #pragma Otime
4.6.18. #pragma pop
4.6.19. #pragma push
4.6.20. #pragma [no_]softfp_linkage
4.6.21. #pragma unroll [(n )]
4.6.22. #pragma unroll_completely
4.6.23. #pragma thumb
4.7. 命令コンパイラ組み込み関数
4.7.1. __breakpoint
4.7.2. __builtin_clz
4.7.3. __builtin_constant_p
4.7.4. __builtin_expect
4.7.5. __builtin_frame_address
4.7.6. __builtin_return_address
4.7.7. __builtin_popcount
4.7.8. __cdp
4.7.9. __clrex
4.7.10. __clz
4.7.11. __current_pc
4.7.12. __current_sp
4.7.13. __disable_fiq
4.7.14. __disable_irq
4.7.15. __enable_fiq
4.7.16. __enable_irq
4.7.17. __fabs
4.7.18. __fabsf
4.7.19. __force_stores
4.7.20. __ldrex
4.7.21. __ldrt
4.7.22. __memory_changed
4.7.23. __nop
4.7.24. __pld
4.7.25. __pli
4.7.26. __qadd
4.7.27. __qdbl
4.7.28. __qsub
4.7.29. __rbit
4.7.30. __rev
4.7.31. __return_address
4.7.32. __ror
4.7.33. __schedule_barrier
4.7.34. __semihost
4.7.35. __sev
4.7.36. __sqrt
4.7.37. __sqrtf
4.7.38. __ssat
4.7.39. __strex
4.7.40. __strt
4.7.41. __swp
4.7.42. __usat
4.7.43. __wfe
4.7.44. __wfi
4.7.45. __yield
4.7.46. ARMv6 SIMD コンパイラ組み込み関数
4.7.47. ETSI の基本操作
4.7.48. C55x コンパイラ組み込み関数
4.7.49. 名前付きレジスタ変数
4.8. コンパイラによって以下が事前定義されます。
4.8.1. 定義済みマクロ
4.8.2. 関数名
5. C および C++ の実装に関する詳細
5.1. C および C++ の実装に関する詳細
5.1.1. 文字セットと識別子
5.1.2. 基本データ型
5.1.3. 基本データ型の演算
5.1.4. 構造体、共用体、列挙型、ビットフィールド
5.2. C++ の実装に関する詳細
5.2.1. ::operator new 関数の使用
5.2.2. 仮配列
5.2.3. C++ 関数での旧方式の C パラメータ
5.2.4. アナクロニズム
5.2.5. テンプレートのインスタンス生成
5.2.6. ネームスペース
5.2.7. C++ の例外処理
5.2.8. Extern インライン関数
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.2. ISO C 標準で定義されていない動作
C. 標準 C++ の実装定義
C.1. 整数変換
C.2. 純仮想関数の呼び出し
C.3. サポートされている主な言語機能
C.4. 標準 C++ ライブラリの実装定義
D. C および C++ コンパイラの実装に関する制限
D.1. C++ ISO/IEC 標準に関する制限
D.2. 整数値に関する制限
D.3. 浮動小数点数に関する制限
E. NEON サポートの使用
E.1. はじめに
E.2. ベクタのデータ型
E.3. コンパイラ組み込み関数
E.3.1. 加算
E.3.2. 乗算
E.3.3. 減算
E.3.4. 比較
E.3.5. 絶対差
E.3.6. 最大 / 最小
E.3.7. 対加算
E.3.8. 最大値の畳み込み
E.3.9. 最小値の畳み込み
E.3.10. 逆数 / 平方根
E.3.11. 符号付き変数によるシフト
E.3.12. 定数によるシフト
E.3.13. シフトして挿入
E.3.14. 単一ベクタのロードとストア
E.3.15. N 要素構造体のロードとストア
E.3.16. ベクタからのレーンの抽出
E.3.17. ベクタ内のレーンの設定
E.3.18. ビットパターンからのベクタの初期化
E.3.19. すべてのレーンを同じ値に設定
E.3.20. ベクタの結合
E.3.21. ベクタの分割
E.3.22. ベクタの変換
E.3.23. テーブル検索
E.3.24. 拡張テーブル検索のコンパイラ組み込み関数
E.3.25. スカラ値での演算
E.3.26. ベクタ抽出
E.3.27. ベクタ要素の反転(エンディアン方式のスワップ)
E.3.28. その他の単一オペランドの算術演算
E.3.29. 論理演算
E.3.30. 転置操作
E.3.31. ベクタの再解釈キャスト操作

List of Tables

2.1. --asm オプションを使用したコンパイル
2.2. サポートされている ARM アーキテクチャ
2.3. ---interleave オプションを使用したコンパイル
2.4. -o オプションを使用したコンパイル
2.5. -o オプションを使用しないコンパイル
4.1. ARM コンパイラによってサポートされているキーワード拡張
4.2. コンパイラでサポートされる __declspec 属性および同等属性
4.3. コンパイラでサポートされる関数属性および同等属性
4.4. コンパイラによってサポートされている型属性および同等属性
4.5. コンパイラによってサポートされている変数属性および同等変数
4.6. コンパイラでサポートされるプラグマ
4.7. ARM コンパイラによってサポートされている命令コンパイラ組み込み関数
4.8. __ldrex コンパイラ組み込み関数によってサポートされるアクセス幅
4.9. __ldrt コンパイラ組み込み関数によってサポートされるアクセス幅
4.10. __strex コンパイラ組み込み関数によってサポートされるアクセス幅
4.11. __strt コンパイラ組み込み関数によってサポートされるアクセス幅
4.12. __swp コンパイラ組み込み関数によってサポートされるアクセス幅
4.13. RVCT でサポートされる ETSI の基本操作
4.14. RVCT で公開された ETSI ステータスフラグ
4.15. RVCT でサポートされている TI C55x コンパイラ組み込み関数
4.16. ARM アーキテクチャベースのプロセッサで使用可能な名前付きレジスタ
4.17. VFP を持つターゲットで使用可能な名前付きレジスタ
4.18. 定義済みマクロ
4.19. 組み込み変数
5.1. 文字エスケープコード
5.2. データ型のサイズと境界整列
C.1. サポートされている主な言語機能
D.1. 実装に関する制限
D.2. 整数の範囲
D.3. 浮動小数点数に関する制限
D.4. 浮動小数点数に関するその他の特性
E.1. ベクタのデータ型

著作権

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

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

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

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

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

機密保持ステータス

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

製品ステータス

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

Revision History
Revision A 2007年 3 月 RVDS v3.1 リリース(第 3.1 版)
Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AJ
Non-Confidential