ARM® コンパイラ armcc ユーザガイド

バージョン 5.04


目次

序章
本書について
本書の構成
表記規則
Feedback
本製品に関するフィードバック
内容に関するフィードバック
1 コンパイラの概要
1.1 コンパイラ
1.2 コンパイラのソース言語モード
1.3 ISO C90
1.4 ISO C99
1.5 ISO C++
1.6 言語拡張機能
1.7 言語標準の準拠
1.8 C ライブラリと C++ ライブラリ
2 コンパイラの使い方
2.1 コンパイラのコマンドライン構文
2.2 コンパイラコマンドラインオプションのグループ別一覧
2.3 コンパイラのデフォルトの動作
2.4 コンパイラコマンドラインオプションの順序
2.5 stdin を使用したコンパイラへのソースコードの入力
2.6 stdout への出力の転送
2.7 コンパイラで認識されるファイル名の接尾文字
2.8 コンパイラ出力ファイル
2.9 コンパイラによるヘッダファイルの検索に影響を与える要因
2.10 コンパイラコマンドラインオプションと検索パス
2.11 コンパイラの検索規則と現在の場所
2.12 ARMCC5INC 環境変数
2.13 別々にコンパイルおよびアセンブルしたモジュールとのコードの互換性
2.14 アプリケーションをビルドする場合の GCC フォールバックの使用
2.15 コンパイル中のリンカフィードバック
2.16 未使用の関数コード
2.17 コンパイル中に未使用の関数を削除してコードサイズを最小化する
2.18 コンパイルビルド時間
2.19 コンパイルビルド時間を短縮する
2.20 armcc の 1 回の呼び出しでコンパイルビルド時間を短縮する
2.21 コンパイルビルド時間に対する --multifile の影響
2.22 並列の make 処理を使用してコンパイルビルド時間を短縮する
2.23 コンパイルビルド時間とオペレーティングシステムの選択
3 NEON ベクトル化コンパイラの使用
3.1 NEON テクノロジ
3.2 NEON ユニット
3.3 NEON のコードの記述方法
3.4 C または C++ コードからの NEON 命令の生成
3.5 NEON の C 拡張機能
3.6 自動ベクトル化
3.7 ベクトル化可能なループ内のデータ参照
3.8 ストライドパターンとデータアクセス
3.9 NEON ベクトル化によるパフォーマンスに影響を与える要因
3.10 NEON ベクトル化によるパフォーマンスの目標
3.11 ベクトル化のために推奨されるループ構造
3.12 コードをベクトル化するときのデータの依存関係による競合
3.13 キャリーアラウンドスカラ変数とベクトル化
3.14 ベクタのスカラへの縮退
3.15 ポインタを含むループのベクトル化
3.16 ポインタおよび間接アドレス指定を含むループの非ベクトル化
3.17 条件付き終了の非ベクトル化
3.18 ベクトル化可能なループ繰り返し回数
3.19 __promise(expr) によるコンパイラへのループ繰り返し回数の指定
3.20 ベクトル化のための構造体へのアクセスのグループ化
3.21 ベクトル化と struct メンバの長さ
3.22 ループ内からの非インライン関数への関数呼び出しの非ベクトル化
3.23 条件付きステートメントと効率的なベクトル化
3.24 ベクトル化診断を使用してコードを調整し、パフォーマンスを改善する
3.25 ベクトル化可能なコードの例
3.26 DSP のベクトル化可能なコードの例
3.27 自動ベクトル化を制限または抑制する要因
4 コンパイラの機能
4.1 コンパイラ組み込み関数
4.2 コンパイラ組み込み関数のパフォーマンス上の利点
4.3 ARM アセンブラ命令の組み込み
4.4 汎用のコンパイラ組み込み関数
4.5 IRQ 割り込みと FIQ 割り込みの制御のためのコンパイラ組み込み関数
4.6 最適化バリアの挿入のためのコンパイラ組み込み関数
4.7 ネイティブ命令の挿入のためのコンパイラ組み込み関数
4.8 デジタル信号処理(DSP)のためのコンパイラ組み込み関数
4.9 European Telecommunications Standards Institute(ETSI)の基本操作に対するコンパイラサポート
4.10 C および C++ コードのオーバーフローおよびキャリーステータスフラグ
4.11 C コードの最適化のための Texas Instruments(TI)C55x コンパイラ組み込み関数
4.12 コンパイラで提供される NEON 組み込み関数
4.13 NEON コンパイラ組み込み関数の使用
4.14 名前付きレジスタ変数を使用したレジスタへのアクセスに対するコンパイラサポート
4.15 コンパイラで認識されるプラグマ
4.16 ビットバンディングに対するコンパイラおよびプロセッササポート
4.17 __attribute__((bitband)) コンパイラ型属性
4.18 --bitband コンパイラコマンドラインオプション
4.19 ビットバンド領域の外に配置されたビットバンドオブジェクトをコンパイラが処理する方法
4.20 スレッドローカルストレージに対するコンパイラサポート
4.21 リテラルプールに対するコンパイラサポート
4.22 コンパイラの 8 バイト境界整列機能
4.23 シンボルバージョンに対するコンパイラおよびリンカサポートの使用
4.24 プリコンパイルヘッダ(PCH)ファイル
4.25 プリコンパイルヘッダ(PCH)ファイルの自動処理
4.26 プリコンパイルヘッダ(PCH)ファイル処理とヘッダストップポイント
4.27 プリコンパイルヘッダ(PCH)ファイルの作成要件
4.28 複数のプリコンパイルヘッダ(PCH)ファイルを使用したコンパイル
4.29 廃止されたプリコンパイルヘッダ(PCH)ファイル
4.30 プリコンパイルヘッダ(PCH)ファイルのファイル名と場所の手動による指定
4.31 プリコンパイルヘッダ(PCH)ファイル処理の選択的な適用
4.32 プリコンパイルヘッダ(PCH)ファイル処理の抑止
4.33 プリコンパイルヘッダ(PCH)処理中のメッセージ出力
4.34 プリコンパイルヘッダ(PCH)ファイルのパフォーマンスに関する問題点
4.35 最適化レベルの影響を受けるデフォルトのコンパイラオプション
5 コンパイラのコーディング慣行
5.1 最適化コンパイラとしてのコンパイラ
5.2 コンパイラによるサイズの最適化と処理速度の最適化
5.3 コンパイラ最適化レベルとデバッグビュー
5.4 コンパイル時のターゲットプロセッサの選択
5.5 ベアメタル用の NEON および FPU の有効化
5.6 C コードのループ終了の最適化
5.7 C コードのループの展開
5.8 コンパイラの最適化と volatile キーワード
5.9 コードメトリック
5.10 コードサイズとデータサイズの測定用コードメトリック
5.11 C および C++ のスタックの使用
5.12 オブジェクトおよびライブラリにおけるデバッグ情報を削減するメリット
5.13 オブジェクトおよびライブラリにおけるデバッグ情報を削減する方法
5.14 ヘッダファイルの複数のインクルードに対する保護
5.15 関数のパラメータ受け渡しに伴うオーバーヘッドを最小化するための方法
5.16 レジスタを介した関数からの構造体の復帰
5.17 同じ引数を使用して呼び出されたときに同じ結果を返す関数
5.18 純関数と非純関数の比較
5.19 関数を ARM 関数修飾子で修飾するときの後置構文に関する推奨事項
5.20 インライン関数
5.21 関数のインライン展開に関するコンパイラによる決定
5.22 関数の自動インライン展開とスタティック関数
5.23 インライン関数と、リンク時における未使用のアウトオブライン関数の削除
5.24 関数の自動インライン展開とマルチファイルのコンパイル
5.25 関数のインライン展開に関するコンパイラの決定をオーバーライドすることの制限
5.26 コンパイラモードとインライン関数
5.27 C++ および C90 モードでのインライン関数
5.28 C99 モードでのインライン関数
5.29 インライン関数とデバッグ
5.30 データ境界整列のタイプ
5.31 自然なデータ境界整列のメリット
5.32 コンパイラによる自然なバイト境界整列でのデータオブジェクトの格納
5.33 コンパイル時の自然なデータ境界整列の関連性
5.34 C および C++ コードでの非境界整列データアクセス
5.35 C および C++ コードでの __packed 修飾子と非境界整列型のデータアクセス
5.36 構造体に含まれる非境界整列型フィールド
5.37 構造体全体を packed として宣言する場合のパフォーマンスの低下
5.38 C および C++ コードでの非境界整列ポインタ
5.39 コンパイラによって生成される非境界整列型レジスタロード(LDR)命令
5.40 パックされていない struct、__packed struct、個々の __packed フィールドを使用した struct の比較と、__packed struct と #pragma でパックされた struct の比較
5.41 浮動小数点演算に対するコンパイラサポート
5.42 デフォルトで選択されるハードウェアまたはソフトウェアによる浮動小数点サポート
5.43 浮動小数点演算に関するハードウェアサポートとソフトウェアサポートの違いの例
5.44 ベクタ浮動小数点(VFP)アーキテクチャ
5.45 浮動小数点演算のハードウェアによる処理に関する制限
5.46 ベクタ浮動小数点(VFP)サポートコードの実装
5.47 半精度浮動小数点数に対するコンパイラおよびライブラリサポート
5.48 半精度浮動小数点数の形式
5.49 浮動小数点計算と浮動小数点リンケージに対するコンパイラサポート
5.50 浮動小数点リンケージの種類
5.51 浮動小数点リンケージと浮動小数点計算のコンパイラオプション
5.52 コンパイラオプションの浮動小数点リンケージと浮動小数点計算の要件
5.53 プロセッサおよび暗黙の浮動小数点ユニット(FPU)
5.54 C コードのゼロによる整数除算エラー
5.55 __aeabi_idiv0() を使用したゼロによる整数除算エラーのトラップについて
5.56 __rt_raise() を使用したゼロによる整数除算エラーのトラップについて
5.57 C コードのゼロによる整数除算エラーの識別
5.58 C コードでゼロによる整数除算エラーが発生した場合のパラメータの検証
5.59 C コードのソフトウェアでのゼロによる浮動小数点除算エラー
5.60 ソフトウェアでのゼロによる浮動小数点除算エラーのトラップについて
5.61 ソフトウェアでのゼロによる浮動小数点除算エラーの識別
5.62 ソフトウェアでのゼロによる浮動小数点除算エラーのデバッグ
5.63 C99 の新しい言語機能
5.64 C99 の新しいライブラリ機能
5.65 C99 および C90 の // コメント
5.66 C99 の複合リテラル
5.67 C99 の指定済みのイニシャライザ
5.68 C99 の 16 進浮動小数点数
5.69 C99 のフレキシブル配列メンバ
5.70 C99 の __func__ 定義済み識別子
5.71 C99 の inline 関数
5.72 C99 および C90 の long long データ型
5.73 C99 の使用する引数の数が一定でないマクロ
5.74 C99 の宣言とステートメントの混合
5.75 C99 の選択および反復ステートメントの新しいブロック有効範囲
5.76 C99 の _Pragma 処理命令
5.77 C99 の制限付きポインタ
5.78 C99 の <math.h> の追加の数学ライブラリ関数
5.79 C99 の複素数
5.80 C99 のブール型と <stdbool.h>
5.81 C99 の <inttypes.h> および <stdint.h> の拡張整数型と関数
5.82 C99 の <fenv.h> 浮動小数点環境アクセス
5.83 C99 の <stdio.h> の snprintf 関数ファミリ
5.84 C99 の <tgmath.h> の型汎用数学マクロ
5.85 C99 の <wchar.h> のワイドキャラクタ I/O 関数
5.86 未初期化データがゼロで初期化されないようにする方法
6 コンパイラ診断メッセージ
6.1 コンパイラ診断メッセージの重大度
6.2 コンパイラ診断メッセージの重大度を変更するオプション
6.3 プラグマを使用したコンパイラの診断メッセージの制御
6.4 コンパイラ診断メッセージの接頭文字
6.5 コンパイラ終了ステータスコードと終了メッセージ
6.6 コンパイラデータフロー警告
7 ARM コンパイラのインラインアセンブラと組み込みアセンブラの使用
7.1 インラインアセンブリ言語に対するコンパイラサポート
7.2 コンパイラでのインラインアセンブラのサポート
7.3 コンパイラでのインラインアセンブラのサポートに対する制限
7.4 C および C++ の __asm キーワードを使用したインラインアセンブリ言語構文
7.5 C++ の asm キーワードを使用したインラインアセンブリ言語構文
7.6 __asm および asm コンパイラキーワードのインラインアセンブラ規則
7.7 C および C++ コードのインラインアセンブリ演算の制限
7.8 C および C++ コードのインラインアセンブラのレジスタの制限
7.9 C および C++ コードのインラインアセンブラのプロセッサモードの制限
7.10 C および C++ コードのインラインアセンブラの Thumb 命令セットの制限
7.11 C および C++ コードのインラインアセンブラのベクタ浮動小数点(VFP)の制限
7.12 C および C++ コードのインラインアセンブラの命令の制限
7.13 C および C++ コードのその他のインラインアセンブラの制限
7.14 C および C++ コードのインラインアセンブラおよびレジスタアクセス
7.15 C および C++ コードのインラインアセンブラおよび # 定数式指定子
7.16 C および C++ コードのインラインアセンブラおよび命令の展開
7.17 定数を使用するインラインアセンブラ命令の展開
7.18 インラインアセンブラのロード/ストア命令の展開
7.19 C および C++ コードのプロセッサ条件フラグに対するインラインアセンブラの効果
7.20 C および C++ コードのインラインアセンブラの式オペランド
7.21 C および C++ コードのインラインアセンブラのレジスタリストのオペランド
7.22 C および C++ コードのインラインアセンブラのイミディエートオペランド
7.23 C および C++ コードのインラインアセンブラの関数呼び出しと分岐
7.24 C および C++ コードのインラインアセンブラの分岐とラベル
7.25 インラインアセンブラと仮想レジスタ
7.26 コンパイラでの組み込みアセンブラのサポート
7.27 C および C++ の組み込みアセンブラ構文
7.28 コンパイラの ARM ステートおよび Thumb ステートの組み込みアセンブラに対する影響
7.29 C および C++ コードの組み込みアセンブリ言語関数の制限
7.30 コンパイラによる組み込みアセンブリ言語関数の生成
7.31 組み込みアセンブラからの C および C++ のコンパイル時の定数式へのアクセス
7.32 組み込みアセンブラと C/C++ との式の相違点
7.33 組み込みアセンブラの手動による多重定義の解決
7.34 組み込みアセンブラの関連ベースクラスの __offsetof_base キーワード
7.35 組み込みアセンブラのクラスメンバ関数を呼び出すためのコンパイラでサポートされているキーワード
7.36 __mcall_is_virtual(D, f)
7.37 __mcall_is_in_vbase(D, f)
7.38 __mcall_offsetof_vbase(D, f)
7.39 __mcall_this_offset(D, f)
7.40 __vcall_offsetof_vfunc(D, f)
7.41 組み込みアセンブラの非スタティックメンバ関数の呼び出し
7.42 非仮想メンバ関数の呼び出し
7.43 仮想メンバ関数の呼び出し
7.44 sp(r13)、lr(r14)、および pc(r15)へのアクセス
7.45 インラインアセンブリコードと組み込みアセンブリコードのコンパイラサポートにおける相違点
8 コンパイラのコマンドラインオプション
8.1 -Aopt
8.2 --allow_fpreg_for_nonfpdata、--no_allow_fpreg_for_nonfpdata
8.3 --allow_null_this、--no_allow_null_this
8.4 --alternative_tokens、--no_alternative_tokens
8.5 --anachronisms、--no_anachronisms
8.6 --apcs=qualifier...qualifier
8.7 --arm
8.8 --arm_linux
8.9 --arm_linux_config_file=path
8.10 --arm_linux_configure
8.11 --arm_linux_paths
8.12 --arm_only
8.13 --asm
8.14 --asm_dir=directory_name
8.15 --autoinline、--no_autoinline
8.16 --bigend
8.17 --bitband
8.18 --branch_tables、--no_branch_tables
8.19 --brief_diagnostics、--no_brief_diagnostics
8.20 --bss_threshold=num
8.21 -c
8.22 -C
8.23 --c90
8.24 --c99
8.25 --code_gen、--no_code_gen
8.26 --compatible=name
8.27 --compile_all_input、--no_compile_all_input
8.28 --conditionalize、--no_conditionalize
8.29 --configure_cpp_headers=path
8.30 --configure_extra_includes=paths
8.31 --configure_extra_libraries=paths
8.32 --configure_gas=path
8.33 --configure_gcc=path
8.34 --configure_gcc_version=version
8.35 --configure_gld=path
8.36 --configure_sysroot=path
8.37 --cpp
8.38 --cpu=list
8.39 --cpu=name コンパイラオプション
8.40 --create_pch=filename
8.41 -Dname[(parm-list)][=def]
8.42 --data_reorder、--no_data_reorder
8.43 --debug、--no_debug
8.44 --debug_macros、--no_debug_macros
8.45 --default_definition_visibility=visibility
8.46 --default_extension=ext
8.47 --dep_name、--no_dep_name
8.48 --depend=filename
8.49 --depend_dir=directory_name
8.50 --depend_format=string
8.51 --depend_single_line、--no_depend_single_line
8.52 --depend_system_headers、--no_depend_system_headers
8.53 --depend_target=target
8.54 --device=list
8.55 --device=name
8.56 --diag_error=tag[,tag,...]
8.57 --diag_remark=tag[,tag,...]
8.58 --diag_style=arm|ide|gnu コンパイラオプション
8.59 --diag_suppress=tag[,tag,...]
8.60 --diag_suppress=optimizations
8.61 --diag_warning=tag[,tag,...]
8.62 --diag_warning=optimizations
8.63 --dllexport_all、--no_dllexport_all
8.64 --dllimport_runtime、--no_dllimport_runtime
8.65 --dollar、--no_dollar
8.66 --dwarf2
8.67 --dwarf3
8.68 -E
8.69 --echo
8.70 --emit_frame_directives、--no_emit_frame_directives
8.71 --enum_is_int
8.72 --errors=filename
8.73 --exceptions、--no_exceptions
8.74 --exceptions_unwind、--no_exceptions_unwind
8.75 --execstack、--no_execstack
8.76 --execute_only
8.77 --export_all_vtbl、--no_export_all_vtbl
8.78 --export_defs_implicitly、--no_export_defs_implicitly
8.79 --extended_initializers、--no_extended_initializers
8.80 --feedback=filename
8.81 --float_literal_pools、--no_float_literal_pools
8.82 --force_new_nothrow、--no_force_new_nothrow
8.83 --forceinline
8.84 --fp16_format=format
8.85 --fpmode=model
8.86 --fpu=list
8.87 --fpu=name コンパイラオプション
8.88 --friend_injection、--no_friend_injection
8.89 -g
8.90 --global_reg=reg_name[,reg_name,...]
8.91 --gnu
8.92 --gnu_defaults
8.93 --gnu_instrument、--no_gnu_instrument
8.94 --gnu_version=version
8.95 --guiding_decls、--no_guiding_decls
8.96 --help
8.97 --hide_all、--no_hide_all
8.98 -Idir[,dir,...]
8.99 --ignore_missing_headers
8.100 --implicit_include、--no_implicit_include
8.101 --implicit_include_searches、--no_implicit_include_searches
8.102 --implicit_key_function、--no_implicit_key_function
8.103 --implicit_typename、--no_implicit_typename
8.104 --import_all_vtbl
8.105 --info=totals
8.106 --inline、--no_inline
8.107 --integer_literal_pools, --no_integer_literal_pools
8.108 --interface_enums_are_32_bit
8.109 --interleave
8.110 -Jdir[,dir,...]
8.111 --kandr_include
8.112 -Lopt
8.113 --library_interface=lib
8.114 --library_type=lib
8.115 --licretry
8.116 --link_all_input、--no_link_all_input
8.117 --list
8.118 --list_dir=directory_name
8.119 --list_macros
8.120 --littleend
8.121 --locale=lang_country
8.122 --long_long
8.123 --loop_optimization_level=opt
8.124 --loose_implicit_cast
8.125 --lower_ropi、--no_lower_ropi
8.126 --lower_rwpi、--no_lower_rwpi
8.127 -M
8.128 --md
8.129 --message_locale=lang_country[.codepage]
8.130 --min_array_alignment=opt
8.131 --mm
8.132 --multibyte_chars、--no_multibyte_chars
8.133 --multifile, --no_multifile
8.134 --multiply_latency=cycles
8.135 --narrow_volatile_bitfields
8.136 --nonstd_qualifier_deduction、--no_nonstd_qualifier_deduction
8.137 -o filename
8.138 -Onum
8.139 --old_specializations、--no_old_specializations
8.140 --old_style_preprocessing
8.141 -Ospace
8.142 -Otime
8.143 --output_dir=directory_name
8.144 -P
8.145 --parse_templates、--no_parse_templates
8.146 --pch
8.147 --pch_dir=dir
8.148 --pch_messages、--no_pch_messages
8.149 --pch_verbose、--no_pch_verbose
8.150 --pending_instantiations=n
8.151 --phony_targets
8.152 --pointer_alignment=num
8.153 --preinclude=filename
8.154 --preprocess_assembly
8.155 --preprocessed
8.156 --protect_stack、--no_protect_stack
8.157 --reassociate_saturation、--no_reassociate_saturation
8.158 --reduce_paths、--no_reduce_paths
8.159 --relaxed_ref_def、--no_relaxed_ref_def
8.160 --remarks
8.161 --remove_unneeded_entities、--no_remove_unneeded_entities
8.162 --restrict、--no_restrict
8.163 --retain=option
8.164 --rtti、--no_rtti
8.165 --rtti_data、--no_rtti_data
8.166 -S
8.167 --shared
8.168 --show_cmdline
8.169 --signed_bitfields、--unsigned_bitfields
8.170 --signed_chars、--unsigned_chars
8.171 --split_ldm
8.172 --split_sections
8.173 --strict、--no_strict
8.174 --strict_warnings
8.175 --string_literal_pools、--no_string_literal_pools
8.176 --sys_include
8.177 --thumb
8.178 --translate_g++
8.179 --translate_gcc
8.180 --translate_gld
8.181 --trigraphs、--no_trigraphs
8.182 --type_traits_helpers、--no_type_traits_helpers
8.183 -Uname
8.184 --unaligned_access、--no_unaligned_access
8.185 --use_frame_pointer
8.186 --use_gas
8.187 --use_pch=filename
8.188 --using_std、--no_using_std
8.189 --vectorize、--no_vectorize
8.190 --version_number
8.191 --vfe、--no_vfe
8.192 --via=filename
8.193 --visibility_inlines_hidden
8.194 --vla、--no_vla
8.195 --vsn
8.196 -W
8.197 -Warmcc,option[,option,...]
8.198 -Warmcc,--gcc_fallback
8.199 --wchar、--no_wchar
8.200 --wchar16
8.201 --wchar32
8.202 --whole_program
8.203 --wrap_diagnostics、--no_wrap_diagnostics
9 言語拡張機能
9.1 プリプロセッサ拡張機能
9.2 #assert
9.3 #include_next
9.4 #unassert
9.5 #warning
9.6 C90 で使用可能な C99 言語機能
9.7 // コメント
9.8 構造体への添字の付加
9.9 フレキシブル配列メンバ
9.10 C++ および C90 で使用可能な C99 言語機能
9.11 可変個引数マクロ
9.12 long long
9.13 restrict
9.14 16 進浮動小数点数
9.15 標準の C 言語の拡張機能
9.16 定数式
9.17 配列とポインタの拡張機能
9.18 block-scope 関数の宣言
9.19 識別子内のドル記号
9.20 トップレベルの宣言
9.21 有用な再宣言
9.22 外部エンティティ
9.23 関数のプロトタイプ
9.24 標準の C++ 言語の拡張機能
9.25 ?演算子
9.26 クラスメンバの宣言
9.27 friend
9.28 読み出し/書き込み定数
9.29 スカラ型定数
9.30 非メンバ関数テンプレートの特殊化
9.31 型変換
9.32 標準 C および標準 C++ 言語の拡張機能
9.33 レジスタ変数のアドレス
9.34 関数の引数
9.35 匿名クラス、匿名構造体、匿名共用体
9.36 アセンブララベル
9.37 空の宣言
9.38 16 進数浮動小数点定数
9.39 不完全な列挙型
9.40 整数型の拡張機能
9.41 ラベルの定義
9.42 long float
9.43 非スタティックローカル変数
9.44 構造体、共用体、列挙型、ビットフィールドの拡張機能
9.45 C および C++ 言語に対する GNU 拡張機能
10 コンパイラ固有の機能
10.1 キーワードと演算子
10.2 __align
10.3 __ALIGNOF__
10.4 __alignof__
10.5 __asm
10.6 __forceinline
10.7 __global_reg
10.8 __inline
10.9 __int64
10.10 __INTADDR__
10.11 __irq
10.12 __packed
10.13 __pure
10.14 __smc
10.15 __softfp
10.16 __svc
10.17 __svc_indirect
10.18 __svc_indirect_r7
10.19 __value_in_regs
10.20 __weak
10.21 __writeonly
10.22 __declspec 属性
10.23 __declspec(dllexport)
10.24 __declspec(dllimport)
10.25 __declspec(noinline)
10.26 __declspec(noreturn)
10.27 __declspec(nothrow)
10.28 __declspec(notshared)
10.29 __declspec(thread)
10.30 関数属性
10.31 __attribute__((alias)) 関数属性
10.32 __attribute__((always_inline)) 関数属性
10.33 __attribute__((const)) 関数属性
10.34 __attribute__((constructor[(priority)])) 関数属性
10.35 __attribute__((deprecated)) 関数属性
10.36 __attribute__((destructor[(priority)])) 関数属性
10.37 __attribute__((format_arg(string-index))) 関数属性
10.38 __attribute__((malloc)) 関数属性
10.39 __attribute__((noinline)) 関数属性
10.40 __attribute__((no_instrument_function)) 関数属性
10.41 __attribute__((nomerge)) 関数属性
10.42 __attribute__((nonnull)) 関数属性
10.43 __attribute__((noreturn)) 関数属性
10.44 __attribute__((notailcall)) 関数属性
10.45 __attribute__((pcs("calling_convention"))) 関数属性
10.46 __attribute__((pure)) 関数属性
10.47 __attribute__((section("name"))) 関数属性
10.48 __attribute__((sentinel)) 関数属性
10.49 __attribute__((unused)) 関数属性
10.50 __attribute__((used)) 関数属性
10.51 __attribute__((visibility("visibility_type"))) 関数属性
10.52 __attribute__((weak)) 関数属性
10.53 __attribute__((weakref("target"))) 関数属性
10.54 型属性
10.55 __attribute__((bitband)) 型属性
10.56 __attribute__((aligned)) 型属性
10.57 __attribute__((packed)) 型属性
10.58 __attribute__((transparent_union)) 型属性
10.59 変数属性
10.60 __attribute__((alias)) 変数属性
10.61 __attribute__((at(address))) 変数属性
10.62 __attribute__((aligned)) 変数属性
10.63 __attribute__((deprecated)) 変数属性
10.64 __attribute__((noinline)) 定数変数属性
10.65 __attribute__((packed)) 変数属性
10.66 __attribute__((section("name"))) 変数属性
10.67 __attribute__((transparent_union)) 変数属性
10.68 __attribute__((unused)) 変数属性
10.69 __attribute__((used)) 変数属性
10.70 __attribute__((visibility("visibility_type"))) 変数属性
10.71 __attribute__((weak)) 変数属性
10.72 __attribute__((weakref("target"))) 変数属性
10.73 __attribute__((zero_init)) 変数属性
10.74 プラグマ
10.75 #pragma anon_unions、#pragma no_anon_unions
10.76 #pragma arm
10.77 #pragma arm section [section_type_list]
10.78 #pragma diag_default tag[,tag,...]
10.79 #pragma diag_error tag[,tag,...]
10.80 #pragma diag_remark tag[,tag,...]
10.81 #pragma diag_suppress tag[,tag,...]
10.82 #pragma diag_warning tag[, tag, ...]
10.83 #pragma exceptions_unwind、#pragma no_exceptions_unwind
10.84 #pragma GCC system_header
10.85 #pragma hdrstop
10.86 #pragma import symbol_name
10.87 #pragma import(__use_full_stdio)
10.88 #pragma import(__use_smaller_memcpy)
10.89 #pragma inline、#pragma no_inline
10.90 #pragma no_pch
10.91 #pragma Onum
10.92 #pragma once
10.93 #pragma Ospace
10.94 #pragma Otime
10.95 #pragma pack(n)
10.96 #pragma pop
10.97 #pragma push
10.98 #pragma softfp_linkage、#pragma no_softfp_linkage
10.99 #pragma thumb
10.100 #pragma unroll [(n)]
10.101 #pragma unroll_completely
10.102 #pragma weak symbol、#pragma weak symbol1 = symbol2
10.103 命令のコンパイラ組み込み関数
10.104 __breakpoint コンパイラ組み込み関数
10.105 __cdp コンパイラ組み込み関数
10.106 __clrex コンパイラ組み込み関数
10.107 __clz コンパイラ組み込み関数
10.108 __current_pc コンパイラ組み込み関数
10.109 __current_sp コンパイラ組み込み関数
10.110 __disable_fiq コンパイラ組み込み関数
10.111 __disable_irq コンパイラ組み込み関数
10.112 __enable_fiq コンパイラ組み込み関数
10.113 __enable_irq コンパイラ組み込み関数
10.114 __fabs コンパイラ組み込み関数
10.115 __fabsf コンパイラ組み込み関数
10.116 __force_stores コンパイラ組み込み関数
10.117 __ldrex コンパイラ組み込み関数
10.118 __ldrexd コンパイラ組み込み関数
10.119 __ldrt コンパイラ組み込み関数
10.120 __memory_changed コンパイラ組み込み関数
10.121 __nop コンパイラ組み込み関数
10.122 __pld コンパイラ組み込み関数
10.123 __pldw コンパイラ組み込み関数
10.124 __pli コンパイラ組み込み関数
10.125 __promise コンパイラ組み込み関数
10.126 __qadd コンパイラ組み込み関数
10.127 __qdbl コンパイラ組み込み関数
10.128 __qsub コンパイラ組み込み関数
10.129 __rbit コンパイラ組み込み関数
10.130 __rev コンパイラ組み込み関数
10.131 __return_address コンパイラ組み込み関数
10.132 __ror コンパイラ組み込み関数
10.133 __schedule_barrier コンパイラ組み込み関数
10.134 __semihost コンパイラ組み込み関数
10.135 __sev コンパイラ組み込み関数
10.136 __sqrt コンパイラ組み込み関数
10.137 __sqrtf コンパイラ組み込み関数
10.138 __ssat コンパイラ組み込み関数
10.139 __strex コンパイラ組み込み関数
10.140 __strexd コンパイラ組み込み関数
10.141 __strt コンパイラ組み込み関数
10.142 __swp コンパイラ組み込み関数
10.143 __usat コンパイラ組み込み関数
10.144 __wfe コンパイラ組み込み関数
10.145 __wfi コンパイラ組み込み関数
10.146 __yield コンパイラ組み込み関数
10.147 ARMv6 SIMD コンパイラ組み込み関数
10.148 ETSI の基本操作
10.149 C55x コンパイラ組み込み関数
10.150 VFP ステータスコンパイラ組み込み関数
10.151 __vfp_status コンパイラ組み込み関数
10.152 FMA(Fused Multiply Add)コンパイラ組み込み関数
10.153 名前付きレジスタ変数
10.154 GNU 組み込み関数
10.155 定義済みマクロ
10.156 組み込み関数名変数
11 C および C++ の実装に関する詳細
11.1 ARM C および C++ の文字セットと識別子
11.2 ARM C および C++ の基本データ型
11.3 ARM C および C++ での基本データ型の演算
11.4 ARM C および C++ での構造体、共用体、列挙型、ビットフィールド
11.5 ARM C++ での ::operator new 関数の使用
11.6 ARM C++ での仮配列
11.7 ARM C++ 関数での旧方式の C パラメータ
11.8 ARM C++ でアナクロニズム
11.9 ARM C++ でのテンプレートのインスタンス化
11.10 ARM C++ でのネームスペース
11.11 ARM C++ での C++ の例外処理
11.12 ARM C++ の Extern インライン関数
12 ARMv6 SIMD 命令のコンパイラ組み込み関数
12.1 ARMv6 SIMD コンパイラ組み込み関数(接頭文字別)
12.2 ARMv6 SIMD 組み込み関数、要約説明、バイトレーン、影響を受けるフラグ
12.3 ARMv6 SIMD コンパイラ組み込み関数、互換性のあるプロセッサおよびアーキテクチャ
12.4 ARMv6 SIMD 命令の組み込み関数と APSR GE フラグ
12.5 __qadd16 コンパイラ組み込み関数
12.6 __qadd8 コンパイラ組み込み関数
12.7 __qasx コンパイラ組み込み関数
12.8 __qsax コンパイラ組み込み関数
12.9 __qsub16 コンパイラ組み込み関数
12.10 __qsub8 コンパイラ組み込み関数
12.11 __sadd16 コンパイラ組み込み関数
12.12 __sadd8 コンパイラ組み込み関数
12.13 __sasx コンパイラ組み込み関数
12.14 __sel コンパイラ組み込み関数
12.15 __shadd16 コンパイラ組み込み関数
12.16 __shadd8 コンパイラ組み込み関数
12.17 __shasx コンパイラ組み込み関数
12.18 __shsax コンパイラ組み込み関数
12.19 __shsub16 コンパイラ組み込み関数
12.20 __shsub8 コンパイラ組み込み関数
12.21 __smlad コンパイラ組み込み関数
12.22 __smladx コンパイラ組み込み関数
12.23 __smlald コンパイラ組み込み関数
12.24 __smlaldx コンパイラ組み込み関数
12.25 __smlsd コンパイラ組み込み関数
12.26 __smlsdx コンパイラ組み込み関数
12.27 __smlsld コンパイラ組み込み関数
12.28 __smlsldx コンパイラ組み込み関数
12.29 __smuad コンパイラ組み込み関数
12.30 __smuadx コンパイラ組み込み関数
12.31 __smusd コンパイラ組み込み関数
12.32 __smusdx コンパイラ組み込み関数
12.33 __ssat16 コンパイラ組み込み関数
12.34 __ssax コンパイラ組み込み関数
12.35 __ssub16 コンパイラ組み込み関数
12.36 __ssub8 コンパイラ組み込み関数
12.37 __sxtab16 コンパイラ組み込み関数
12.38 __sxtb16 コンパイラ組み込み関数
12.39 __uadd16 コンパイラ組み込み関数
12.40 __uadd8 コンパイラ組み込み関数
12.41 __uasx コンパイラ組み込み関数
12.42 __uhadd16 コンパイラ組み込み関数
12.43 __uhadd8 コンパイラ組み込み関数
12.44 __uhasx コンパイラ組み込み関数
12.45 __uhsax コンパイラ組み込み関数
12.46 __uhsub16 コンパイラ組み込み関数
12.47 __uhsub8 コンパイラ組み込み関数
12.48 __uqadd16 コンパイラ組み込み関数
12.49 __uqadd8 コンパイラ組み込み関数
12.50 __uqasx コンパイラ組み込み関数
12.51 __uqsax コンパイラ組み込み関数
12.52 __uqsub16 コンパイラ組み込み関数
12.53 __uqsub8 コンパイラ組み込み関数
12.54 __usad8 コンパイラ組み込み関数
12.55 __usada8 コンパイラ組み込み関数
12.56 __usat16 コンパイラ組み込み関数
12.57 __usax コンパイラ組み込み関数
12.58 __usub16 コンパイラ組み込み関数
12.59 __usub8 コンパイラ組み込み関数
12.60 __uxtab16 コンパイラ組み込み関数
12.61 __uxtb16 コンパイラ組み込み関数
13 via ファイルの構文
13.1 via ファイルの概要
13.2 via ファイルの構文規則
14 GNU 言語拡張機能の概要の表
14.1 サポートされている GNU 拡張機能
15 標準 C の実装定義
15.1 実装定義
15.2 変換
15.3 環境
15.4 識別子
15.5 文字
15.6 整数
15.7 浮動小数点
15.8 配列とポインタ
15.9 レジスタ
15.10 構造体、共用体、列挙型、ビットフィールド
15.11 修飾子
15.12 式の評価
15.13 プリプロセッシングディレクティブ
15.14 ライブラリ関数
15.15 ISO C 標準で定義されていない動作
16 標準 C++ の実装定義
16.1 整数変換
16.2 純仮想関数の呼び出し
16.3 サポートされている主な言語機能
16.4 標準 C++ ライブラリの実装定義
17 C および C++ コンパイラの実装に関する制限
17.1 C++ ISO/IEC 標準に関する制限
17.2 整数値に関する制限
17.3 浮動小数点数に関する制限
18 NEON サポートの使用
18.1 NEON 組み込み関数の概要
18.2 ベクタのデータ型
18.3 NEON コンパイラ組み込み関数
18.4 加算用 NEON 組み込み関数
18.5 乗算の NEON コンパイラ組み込み関数
18.6 減算の NEON 組み込み関数
18.7 比較の NEON 組み込み関数
18.8 絶対差のための NEON コンパイラ組み込み関数
18.9 最大値と最小値の NEON 組み込み関数
18.10 対加算のための NEON 組み込み関数
18.11 最大値の畳み込みのための NEON コンパイラ組み込み関数
18.12 最小値の畳み込みのための NEON 組み込み関数
18.13 逆数と平方根の NEON 組み込み関数
18.14 符号付き変数によるシフトの NEON 組み込み関数
18.15 定数によるシフトの NEON コンパイラ組み込み関数
18.16 シフトして挿入する NEON 組み込み関数
18.17 単一ベクタまたはレーンのロードの NEON 組み込み関数
18.18 単一ベクタまたはレーンのストア用 NEON 組み込み関数
18.19 n 要素構造体のロードの NEON 組み込み関数
18.20 ベクタからのレーンの抽出のための NEON コンパイラ組み込み関数とレジスタへの挿入
18.21 リテラルからの単一のベクタレーンのロードの NEON 組み込み関数
18.22 リテラルビットパターンからベクタを生成する NEON 組み込み関数
18.23 すべてのレーンを同じ値に設定する NEON 組み込み関数
18.24 ベクタ結合の NEON 組み込み関数
18.25 ベクタ分割のための NEON コンパイラ組み込み関数
18.26 ベクタ変換のための NEON コンパイラ組み込み関数
18.27 テーブル検索の NEON 組み込み関数
18.28 拡張テーブル検索のための NEON コンパイラ組み込み関数
18.29 スカラ値での演算の NEON 組み込み関数
18.30 ベクタ抽出のための NEON 組み込み関数
18.31 ベクタ要素反転のための NEON コンパイラ組み込み関数(エンディアン方式のスワップ)
18.32 その他の単一オペランドの算術演算の NEON 組み込み関数
18.33 論理演算の NEON 組み込み関数
18.34 転置操作の NEON 組み込み関数
18.35 ベクタのキャスト操作用 NEON 組み込み関数
18.36 同等のコンパイラ組み込み関数のない NEON 命令
A コンパイラドキュメントに対する改訂
A.1 『armcc コンパイラユーザガイド』に対する改訂

図の一覧

2-1 GCC フォールバックプロセスの図
5-1 半精度浮動小数点形式
10-1 非パック構造体 S
10-2 パック構造体 SP
11-1 従来のパックされていない構造体の例
11-2 ビットフィールドの割り当て 1
11-3 ビットフィールドの割り当て 2
15-1 従来のパックされていない構造体の例
15-2 ビットフィールドの割り当て 1
15-3 ビットフィールドの割り当て 2

表の一覧

2-1 コンパイラで認識されるファイル名の接尾文字
2-2 インクルードファイルの検索パス
3-1 配列 A
3-2 配列 B
3-3 結果
3-4 ベクトル化可能なループとベクトル化不可能なループ
3-5 自動ベクトル化を制限または抑制する要因
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 パックされた struct とプラグマパックされた struct の C コード
5-13 浮動小数点リンケージと浮動小数点計算のコンパイラオプション
5-14 FPU オプションの機能と要件
5-15 プロセッサの暗黙の FPU
6-1 診断メッセージの重大度
6-2 診断メッセージの識別
7-1 インラインアセンブラと組み込みアセンブラの相違点
8-1 --asm オプションを使用したコンパイル
8-2 互換性のあるプロセッサまたはアーキテクチャの組み合わせ
8-3 サポートされている ARM アーキテクチャ
8-4 --interleave オプションを使用したコンパイル
8-5 -o オプションを使用したコンパイル
8-6 -o オプションを使用しないコンパイル
9-1 定数値のイニシャライザの動作(ISO 標準 C との比較)
10-1 ARM コンパイラがサポートするキーワード拡張
10-2 コンパイラがサポートする __declspec 属性および同等な属性
10-3 コンパイラがサポートする関数属性および同等のキーワード(または属性)
10-4 コンパイラがサポートしている型属性および同等のキーワード
10-5 コンパイラがサポートする変数属性および同等のキーワード
10-6 コンパイラがサポートするプラグマ
10-7 ARM コンパイラがサポートする命令の組み込み関数
10-8 __ldrex コンパイラ組み込み関数がサポートするアクセス幅
10-9 __ldrex コンパイラ組み込み関数がサポートするアクセス幅
10-10 __ldrt コンパイラ組み込み関数がサポートしているアクセス幅
10-11 __strex コンパイラ組み込み関数がサポートするアクセス幅
10-12 __strexd コンパイラ組み込み関数がサポートするアクセス幅
10-13 __strt コンパイラ組み込み関数がサポートするアクセス幅
10-14 __swp コンパイラ組み込み関数がサポートするアクセス幅
10-15 ARM Compilation Tools がサポートする ETSI の基本操作
10-16 ARM Compilation Tools で公開されている ETSI ステータスフラグ
10-17 コンパイルツールがサポートする TI C55x コンパイラ組み込み関数
10-18 FPSCR フラグの変更
10-19 ARM アーキテクチャベースのプロセッサで使用可能な名前付きレジスタ
10-20 浮動小数点ハードウェアを持つターゲットで使用可能な名前付きレジスタ
10-21 定義済みマクロ
10-22 Thumb アーキテクチャバージョンと ARM アーキテクチャバージョンの関連
10-23 組み込み変数
11-1 文字エスケープコード
11-2 データ型のサイズと境界整列
12-1 ARMv6 SIMD コンパイラ組み込み関数(接頭文字別)
12-2 ARMv6 SIMD 組み込み関数、要約説明、バイトレーン、影響を受けるフラグ
12-3 ARMv6 SIMD コンパイラ組み込み関数、互換性のあるプロセッサおよびアーキテクチャ
12-4 ARMv6 SIMD 命令の組み込み関数と APSR GE フラグ
14-1 サポートされている GNU 拡張機能
15-1 文字エスケープコード
16-1 サポートされている主な言語機能
17-1 実装に関する制限
17-2 整数の範囲
17-3 浮動小数点数に関する制限
17-4 浮動小数点数に関するその他の特性
18-1 ベクタのデータ型
18-2 同等のコンパイラ組み込み関数のない NEON 命令
A-1 発行 I と発行 J の相違点
A-2 発行 H と発行 I の相違点
A-3 発行 G と発行 H の相違点
A-4 発行 F と発行 G の相違点
A-5 発行 E と発行 F の相違点
A-6 発行 D と発行 E の相違点
A-7 発行 C と発行 D の相違点
A-8 発行 B と発行 C の相違点
A-9 発行 A と発行 B の相違点

リリース情報

ドキュメント履歴
発行 日付 機密保持ステータス 変更点
A 28 5 月 2010 非機密扱い ARM コンパイラ v4.1 リリース
B 30 9 月 2010 非機密扱い ARM コンパイラ v4.1 のアップデート 1
C 28 1 月 2011 非機密扱い ARM コンパイラ v4.1 パッチ 3 のアップデート 2
D 30 4 月 2011 非機密扱い ARM コンパイラ v5.0 リリース
E 29 7 月 2011 非機密扱い ARM コンパイラ v5.0 のアップデート 1
F 30 9 月 2011 非機密扱い ARM コンパイラ v5.01 リリース
G 29 2 月 2012 非機密扱い ARM コンパイラ v5.01 リリースマニュアルの更新 1
H 27 7 月 2012 非機密扱い ARM コンパイラ v5.02 リリース
I 31 1 月 2013 非機密扱い ARM コンパイラ v5.03 リリース
J 16 12 月 2013 非機密扱い ARM コンパイラ v5.04 リリース

著作権

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

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

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

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

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

本書の一部の情報は、『IEEE 754 - 1985 IEEE Standard for Binary Floating-Point Arithmetic』 に基づいています。記載されている方法による配置と使用から生じる責任 または義務を IEEE では一切放棄しています。

機密保持ステータス

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

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

製品ステータス

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

Web アドレス

非機密扱いPDF file icon PDF 版ARM DUI0472JJ
Copyright © 2010-2013 ARM.All rights reserved.