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

バージョン 4.0


Table of Contents

1. 序章
本書について
対象読者
本書の構成
表記規則
参考資料
フィードバック
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. --allow_null_this, --no_allow_this
2.1.3. ‑‑alternative_tokens, --no_alternative_tokens
2.1.4. --anachronisms, --no_anachronisms
2.1.5. --apcs=qualifer...qualifier
2.1.6. ‑‑arm
2.1.7. ‑‑arm_linux
2.1.8. ‑‑arm_linux_config_file=path
2.1.9. ‑‑arm_linux_configure
2.1.10. ‑‑arm_linux_paths
2.1.11. ‑‑arm_only
2.1.12. ‑‑asm
2.1.13. ‑‑autoinline, --no_autoinline
2.1.14. ‑‑bigend
2.1.15. --bitband
2.1.16. ‑‑brief_diagnostics, --no_brief_diagnostics
2.1.17. --bss_threshold=num
2.1.18. ‑c
2.1.19. ‑C
2.1.20. ‑‑c90
2.1.21. ‑‑c99
2.1.22. ‑‑code_gen, --no_code_gen
2.1.23. ‑‑compatible=name
2.1.24. --compile_all_input, --no_compile_all_input
2.1.25. ‑‑configure_cpp_headers=path
2.1.26. ‑‑configure_extra_includes=paths
2.1.27. ‑‑configure_extra_libraries=paths
2.1.28. ‑‑configure_gcc=path
2.1.29. ‑‑configure_gld=path
2.1.30. ‑‑configure_sysroot=path
2.1.31. ‑‑cpp
2.1.32. ‑‑cpu=list
2.1.33. ‑‑cpu=name
2.1.34. ‑‑create_pch=filename
2.1.35. ‑Dname[(parm-list)][=def]
2.1.36. ‑‑data_reorder, --no_data_reorder
2.1.37. ‑‑debug, --no_debug
2.1.38. ‑‑debug_macros, --no_debug_macros
2.1.39. ‑‑default_extension=ext
2.1.40. ‑‑dep_name, --no_dep_name
2.1.41. ‑‑depend=filename
2.1.42. ‑‑depend_format=string
2.1.43. --depend_system_headers, --no_depend_system_headers
2.1.44. --depend_target=target
2.1.45. ‑‑device=list
2.1.46. ‑‑device=name
2.1.47. ‑‑diag_error=tag[,tag,...]
2.1.48. ‑‑diag_remark=tag[,tag,... ]
2.1.49. ‑‑diag_style={arm|ide|gnu}
2.1.50. ‑‑diag_suppress=tag[,tag,...]
2.1.51. --diag_suppress=optimizations
2.1.52. ‑‑diag_warning=tag[,tag,...]
2.1.53. --diag_warning=optimizations
2.1.54. ‑‑dllexport_all, --no_dllexport_all
2.1.55. ‑‑dllimport_runtime, --no_dllimport_runtime
2.1.56. ‑‑dollar, --no_dollar
2.1.57. ‑‑dwarf2
2.1.58. ‑‑dwarf3
2.1.59. ‑E
2.1.60. --emit_frame_directives, --no_emit_frame_directives
2.1.61. ‑‑enum_is_int
2.1.62. ‑‑errors=filename
2.1.63. ‑‑exceptions, --no_exceptions
2.1.64. ‑‑exceptions_unwind, --no_exceptions_unwind
2.1.65. ‑‑export_all_vtbl, --no_export_all_vtbl
2.1.66. ‑‑export_defs_implicitly, --no_export_defs_implicitly
2.1.67. --extended_initializers, --no_extended_initializers
2.1.68. ‑‑feedback=filename
2.1.69. --force_new_nothrow, --no_force_new_nothrow
2.1.70. ‑‑forceinline
2.1.71. ‑‑fp16_format=format
2.1.72. ‑‑fpmode=model
2.1.73. ‑‑fpu=list
2.1.74. ‑‑fpu=name
2.1.75. ‑‑friend_injection, --no_friend_injection
2.1.76. ‑g
2.1.77. --global_reg=reg_name[,reg_name,...]
2.1.78. ‑‑gnu
2.1.79. --gnu_instrument, --no_gnu_instrument
2.1.80. ‑‑gnu_version=version
2.1.81. ‑‑guiding_decls, --no_guiding_decls
2.1.82. ‑‑help
2.1.83. ‑‑hide_all, --no_hide_all
2.1.84. ‑Idir[,dir,...]
2.1.85. --ignore_missing_headers
2.1.86. ‑‑implicit_include, --no_implicit_include
2.1.87. --implicit_include_searches, --no_implicit_include_searches
2.1.88. ‑‑implicit_typename, --no_implicit_typename
2.1.89. ‑‑info=totals
2.1.90. ‑‑inline, --no_inline
2.1.91. ‑‑interface_enums_are_32_bit
2.1.92. ‑‑interleave
2.1.93. ‑Jdir[,dir,...]
2.1.94. ‑‑kandr_include
2.1.95. ‑Lopt
2.1.96. --library_interface=lib
2.1.97. --library_type=lib
2.1.98. ‑‑licretry
2.1.99. ‑‑list
2.1.100. --list_macros
2.1.101. ‑‑littleend
2.1.102. ‑‑locale=lang_country
2.1.103. ‑‑loose_implicit_cast
2.1.104. ‑‑lower_ropi, --no_lower_ropi
2.1.105. ‑‑lower_rwpi, --no_lower_rwpi
2.1.106. ‑‑ltcg
2.1.107. ‑M
2.1.108. ‑‑md
2.1.109. ‑‑message_locale=lang_country[.codepage]
2.1.110. ‑‑min_array_alignment=opt
2.1.111. --mm
2.1.112. ‑‑multibyte_chars, --no_multibyte_chars
2.1.113. ‑‑multifile, --no_multifile
2.1.114. --multiply_latency=cycles
2.1.115. ‑‑nonstd_qualifier_deduction, --no_nonstd_qualifier_deduction
2.1.116. ‑o filename
2.1.117. ‑Onum
2.1.118. ‑‑old_specializations, --no_old_specializations
2.1.119. ‑Ospace
2.1.120. ‑Otime
2.1.121. ‑‑parse_templates, --no_parse_templates
2.1.122. ‑‑pch
2.1.123. ‑‑pch_dir=dir
2.1.124. ‑‑pch_messages, --no_pch_messages
2.1.125. ‑‑pch_verbose, --no_pch_verbose
2.1.126. ‑‑pending_instantiations=n
2.1.127. --phony_targets
2.1.128. ‑‑pointer_alignment=num
2.1.129. ‑‑preinclude=filename
2.1.130. --preprocessed
2.1.131. ‑‑profile=filename
2.1.132. --project=filename, --no_project=filename
2.1.133. --reassociate-saturation
2.1.134. --reduce_paths, --no_reduce_paths
2.1.135. --reinitialize_workdir
2.1.136. ‑‑relaxed_ref_def, --no_relaxed_ref_def
2.1.137. ‑‑remarks
2.1.138. ‑‑restrict, --no_restrict
2.1.139. ‑‑retain=option
2.1.140. ‑‑rtti, --no_rtti
2.1.141. ‑S
2.1.142. --shared
2.1.143. ‑‑show_cmdline
2.1.144. ‑‑signed_bitfields, --unsigned_bitfields
2.1.145. ‑‑signed_chars, --unsigned_chars
2.1.146. ‑‑split_ldm
2.1.147. ‑‑split_sections
2.1.148. ‑‑strict, --no_strict
2.1.149. ‑‑strict_warnings
2.1.150. ‑‑sys_include
2.1.151. ‑‑thumb
2.1.152. ‑‑translate_g++
2.1.153. ‑‑translate_gcc
2.1.154. ‑‑translate_gld
2.1.155. ‑‑trigraphs, --no_trigraphs
2.1.156. ‑Uname
2.1.157. ‑‑unaligned_access, --no_unaligned_access
2.1.158. ‑‑use_pch=filename
2.1.159. ‑‑using_std, --no_using_std
2.1.160. ‑‑vectorize, --no_vectorize
2.1.161. ‑‑vfe, --no_vfe
2.1.162. ‑‑via=filename
2.1.163. --vla, --no_vla
2.1.164. ‑‑vsn
2.1.165. ‑W
2.1.166. --wchar, --no_wchar
2.1.167. --wchar16
2.1.168. ‑‑wchar32
2.1.169. --whole_program
2.1.170. --workdir=directory
2.1.171. ‑‑wrap_diagnostics, --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.5.7. 型変換
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. ステートメント式
3.7.15. 無名のフィールド
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__((no_instrument_function))
4.3.8. __attribute__((nomerge))
4.3.9. __attribute__((nonnull))
4.3.10. __attribute__((noreturn))
4.3.11. __attribute__((notailcall))
4.3.12. __attribute__((pure))
4.3.13. __attribute__((section("name")))
4.3.14. __attribute__((unused))
4.3.15. __attribute__((used))
4.3.16. __attribute__((visibility("visibility_type")))
4.3.17. __attribute__((weak))
4.4. 型属性
4.4.1. __attribute__((bitband))
4.4.2. __attribute__((aligned))
4.4.3. __attribute((packed))
4.4.4. __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("name")))
4.5.7. __attribute__((transparent_union))
4.5.8. __attribute__((unused))
4.5.9. __attribute__((used))
4.5.10. __attribute__((visibility("visibility_type")))
4.5.11. __attribute__((weak))
4.5.12. __attribute__((zero_init))
4.6. プラグマ
4.6.1. #pragma anon_unions, #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 exceptions_unwind, #pragma no_exceptions_unwind
4.6.10. #pragma hdrstop
4.6.11. #pragma import symbol_name
4.6.12. #pragma import(__use_full_stdio)
4.6.13. #pragma inline, #pragma no_inline
4.6.14. #pragma no_pch
4.6.15. #pragma Onum
4.6.16. #pragma once
4.6.17. #pragma Ospace
4.6.18. #pragma Otime
4.6.19. #pragma pack(n)
4.6.20. #pragma pop
4.6.21. #pragma push
4.6.22. #pragma softfp_linkage, #pragma no_softfp_linkage
4.6.23. #pragma unroll [(n)]
4.6.24. #pragma unroll_completely
4.6.25. #pragma thumb
4.7. 命令コンパイラ組み込み関数
4.7.1. __breakpoint
4.7.2. __cdp
4.7.3. __clrex
4.7.4. __clz
4.7.5. __current_pc
4.7.6. __current_sp
4.7.7. __disable_fiq
4.7.8. __disable_irq
4.7.9. __enable_fiq
4.7.10. __enable_irq
4.7.11. __fabs
4.7.12. __fabsf
4.7.13. __force_stores
4.7.14. __ldrex
4.7.15. __ldrexd
4.7.16. __ldrt
4.7.17. __memory_changed
4.7.18. __nop
4.7.19. __pld
4.7.20. __pldw
4.7.21. __pli
4.7.22. __promise
4.7.23. __qadd
4.7.24. __qdbl
4.7.25. __qsub
4.7.26. __rbit
4.7.27. __rev
4.7.28. __return_address
4.7.29. __ror
4.7.30. __schedule_barrier
4.7.31. __semihost
4.7.32. __sev
4.7.33. __sqrt
4.7.34. __sqrtf
4.7.35. __ssat
4.7.36. __strex
4.7.37. __strexd
4.7.38. __strt
4.7.39. __swp
4.7.40. __usat
4.7.41. __wfe
4.7.42. __wfi
4.7.43. __yield
4.7.44. ARMv6 SIMD コンパイラ組み込み関数
4.7.45. ETSI の基本操作
4.7.46. C55x コンパイラ組み込み関数
4.7.47. 名前付きレジスタ変数
4.8. VFP ステータス組み込み関数
4.8.1. __vfp_status
4.9. GNU 組み込み関数
4.9.1. 標準以外の関数
4.9.2. C99 の関数
4.9.3. C90 予約済み名前空間の C99 の関数
4.9.4. C94 の関数
4.9.5. C90 の関数
4.9.6. C99 の浮動小数点関数
4.9.7. その他の組み込み関数
4.10. コンパイラによる事前定義
4.10.1. 定義済みマクロ
4.10.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. 互換性のあるプロセッサまたはアーキテクチャの組み合わせ
2.3. サポートされている ARM アーキテクチャとプロセッサの例
2.4. ---interleave オプションを使用したコンパイル
2.5. -o オプションを使用したコンパイル
2.6. -o オプションを使用しないコンパイル
4.1. ARM コンパイラによってサポートされているキーワード拡張
4.2. コンパイラでサポートされる __declspec 属性および同等属性
4.3. コンパイラでサポートされる関数属性および同等属性
4.4. コンパイラによってサポートされている型属性および同等属性
4.5. コンパイラによってサポートされている変数属性および同等変数
4.6. コンパイラでサポートされるプラグマ
4.7. ARM コンパイラによってサポートされている命令コンパイラ組み込み関数
4.8. __ldrex コンパイラ組み込み関数によってサポートされるアクセス幅
4.9. __ldrex コンパイラ組み込み関数によってサポートされるアクセス幅
4.10. __ldrt コンパイラ組み込み関数によってサポートされるアクセス幅
4.11. __strex コンパイラ組み込み関数によってサポートされるアクセス幅
4.12. __strexd コンパイラ組み込み関数によってサポートされるアクセス幅
4.13. __strt コンパイラ組み込み関数によってサポートされるアクセス幅
4.14. __swp コンパイラ組み込み関数によってサポートされるアクセス幅
4.15. RVCT でサポートされる ETSI の基本操作
4.16. RVCT で公開された ETSI ステータスフラグ
4.17. RVCT でサポートされている TI C55x コンパイラ組み込み関数
4.18. ARM アーキテクチャベースのプロセッサで使用可能な名前付きレジスタ
4.19. VFP を持つターゲットで使用可能な名前付きレジスタ
4.20. 定義済みマクロ
4.21. Thumb アーキテクチャバージョンと ARM アーキテクチャバージョンの関連
4.22. 組み込み変数
5.1. 文字エスケープコード
5.2. データ型のサイズと境界整列
C.1. サポートされている主な言語機能
D.1. 実装に関する制限
D.2. 整数の範囲
D.3. 浮動小数点数に関する制限
D.4. 浮動小数点数に関するその他の特性
E.1. ベクタのデータ型

著作権

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

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

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

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

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

機密保持ステータス

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

アクセス制限は、ARM 社内による分類です。

製品ステータス

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

Revision History
Revision A2007 年 3 月RealView Development Suite v3.1 向けリリース 3.1
Revision B2008 年 9 月RealView Development Suite v4.0 向けリリース 4.0
Revision B2009 年 1 月 23 日RealView Development Suite v4.0 マニュアルの更新
Revision B2009 年 3 月 2 日RealView Development Suite v4.0 マニュアルの更新 2
Copyright © 2007-2009 ARM Limited. All rights reserved.ARM DUI 0348BJ
Non-ConfidentialID100419