ARM® コンパイラツールチェーン コンパイラの使用

バージョン 5.01


List of Topics

表記規則とフィードバック
コンパイラの概要
コンパイラ
コンパイラのソース言語モード
C ライブラリと C++ ライブラリ
コンパイラの使い方
コンパイラのコマンドライン構文
コンパイラコマンドラインオプションのグループ別一覧
コンパイラのデフォルトの動作
コンパイラコマンドラインオプションの順序
stdin を使用したコンパイラへのソースコードの入力
stdout への出力の転送
コンパイラで認識されるファイル名の接尾文字
コンパイラ出力ファイル
コンパイラによるヘッダファイルの検索に影響を与える要因
コンパイラコマンドラインオプションと検索パス
コンパイラの検索規則と現在の場所
ARMCCnINC 環境変数
別々にコンパイルおよびアセンブルしたモジュールとのコードの互換性
コンパイル中のリンカフィードバック
アプリケーションをビルドする場合の GCC フォールバックの使用
未使用の関数コード
コンパイル中に未使用の関数を削除してコードサイズを最小化する
インターワークに必要なコンパイルを削減してコードサイズを最小化する
コンパイルビルド時間
コンパイルビルド時間を短縮する方法
armcc の 1 回の呼び出しでコンパイルビルド時間を短縮する
コンパイルビルド時間に対する --multifile の影響
並列の make 処理を使用してコンパイルビルド時間を短縮する
コンパイルビルド時間とオペレーティングシステムの選択
NEON ベクトル化コンパイラの使用
NEON テクノロジ
NEON ユニット
NEON のコードの記述方法
C または C++ コードからの NEON 命令の生成
NEON の C 拡張機能
自動ベクトル化
ベクトル化可能なループ内のデータ参照
ストライドパターンとデータアクセス
NEON ベクトル化によるパフォーマンスに影響を与える要因
NEON ベクトル化によるパフォーマンスの目標
ベクトル化のために推奨されるループ構造
コードをベクトル化するときのデータの依存関係による競合
キャリーアラウンドスカラ変数とベクトル化
ベクタのスカラへの縮退
ポインタを含むループのベクトル化
ポインタおよび間接アドレス指定を含むループの非ベクトル化
条件付き終了の非ベクトル化
ベクトル化可能なループ繰り返し回数
__promise(expr) によるコンパイラへのループ繰り返し回数の指定
構造体のベクトル化可能な使用法とベクトル化不可能な使用法
ベクトル化のための構造体のグループ化使用
struct メンバの長さとベクトル化
ループ内からの非インライン関数への関数呼び出しの非ベクトル化
条件付きステートメントと効率的なベクトル化
ベクトル化診断を使用してコードを調整し、パフォーマンスを改善する
ベクトル化可能なコードの例
DSP のベクトル化可能なコードの例
自動ベクトル化を制限または抑制する要因
コンパイラの機能
コンパイラ組み込み関数
コンパイラ組み込み関数のパフォーマンス上の利点
コンパイラによってサポートされている ARM アセンブラ命令の組み込み関数
コンパイラによってサポートされている汎用の組み込み関数
IRQ 割り込みと FIQ 割り込みの制御のためのコンパイラ組み込み関数
最適化バリアの挿入のためのコンパイラ組み込み関数
ネイティブ命令の挿入のためのコンパイラ組み込み関数
デジタル信号処理(DSP)のためのコンパイラ組み込み関数
European Telecommunications Standards Institute(ETSI)の基本操作
European Telecommunications Standards Institute(ETSI)の基本操作に対するコンパイラサポート
C および C++ コードのオーバーフローおよびキャリーステータスフラグ
C コードの最適化のための Texas Instruments(TI)C55x コンパイラ組み込み関数
コンパイラで提供される NEON 組み込み関数
NEON コンパイラ組み込み関数の使用
名前付きレジスタ変数を使用したレジスタへのアクセスに対するコンパイラサポート
コンパイラで認識されるプラグマ
ビットバンディングに対するコンパイラおよびプロセッササポート
__attribute__((bitband)) コンパイラ型属性
--bitband コンパイラコマンドラインオプション
ビットバンド領域の外に配置されたビットバンドオブジェクトをコンパイラが処理する方法
スレッドローカルストレージに対するコンパイラサポート
コンパイラの 8 バイト境界整列機能
シンボルバージョンに対するコンパイラおよびリンカサポートの使用
プリコンパイルヘッダ(PCH)ファイル
プリコンパイルヘッダ(PCH)ファイルの自動処理
プリコンパイルヘッダ(PCH)ファイル処理とヘッダストップポイント
プリコンパイルヘッダ(PCH)ファイルの作成要件
複数のプリコンパイルヘッダ(PCH)ファイルを使用したコンパイル
廃止されたプリコンパイルヘッダ(PCH)ファイル
プリコンパイルヘッダ(PCH)ファイルのファイル名と場所の手動による指定
プリコンパイルヘッダ(PCH)ファイル処理の選択的な適用
プリコンパイルヘッダ(PCH)ファイル処理の抑止
プリコンパイルヘッダ(PCH)処理中のメッセージ出力
プリコンパイルヘッダ(PCH)ファイルのパフォーマンスに関する問題点
最適化レベルの影響を受けるデフォルトのコンパイラオプション
コンパイラのコーディング慣行
最適化コンパイラとしてのコンパイラ
コンパイラによるサイズの最適化と処理速度の最適化
コンパイラ最適化レベルとデバッグビュー
コンパイル時のターゲット CPU の選択
C コードのループ終了の最適化
C コードのループの展開
コンパイラの最適化と volatile キーワード
コードメトリック
コードサイズとデータサイズの測定用コードメトリック
C および C++ のスタックの使用
オブジェクトおよびライブラリにおけるデバッグ情報を削減するメリット
オブジェクトおよびライブラリにおけるデバッグ情報を削減する方法
ヘッダファイルの複数のインクルードに対する保護
関数のパラメータ受け渡しに伴うオーバーヘッドを最小化するための方法
レジスタを介して複数の値を返す関数
同じ引数を使用して呼び出されたときに同じ結果を返す関数
純関数と非純関数の比較
関数を ARM 関数修飾子で修飾するときの後置構文に関する推奨事項
インライン関数
関数のインライン展開に関するコンパイラによる決定
関数の自動インライン展開とスタティック関数
インライン関数と、リンク時における未使用のアウトオブライン関数の削除
関数の自動インライン展開とマルチファイルのコンパイル
関数のインライン展開に関するコンパイラの決定をオーバーライドすることの制限
コンパイラモードとインライン関数
C++ および C90 モードでのインライン関数
C99 モードでのインライン関数
インライン関数とデバッグ
データ境界整列のタイプ
自然なデータ境界整列のメリット
コンパイラによる自然なバイト境界整列でのデータオブジェクトの格納
コンパイル時の自然なデータ境界整列の関連性
C および C++ コードでの非境界整列データアクセス
C および C++ コードでの __packed 修飾子と非境界整列型のデータアクセス
構造体に含まれる非境界整列型フィールド
構造体全体を packed として宣言する場合のパフォーマンスの低下
C および C++ コードでの非境界整列ポインタ
コンパイラによって生成される非境界整列型レジスタロード(LDR)命令
パックされていない struct、パックされた struct、フィールドが個々にパックされた struct の比較と、パックされた struct と #pragma pack でパックされた struct の比較
浮動小数点演算に対するコンパイラサポート
デフォルトで選択されるハードウェアまたはソフトウェアによる浮動小数点サポート
浮動小数点演算に関するハードウェアサポートとソフトウェアサポートの違いの例
ベクタ浮動小数点(VFP)アーキテクチャ
浮動小数点演算のハードウェアによる処理に関する制限
ベクタ浮動小数点(VFP)サポートコードの実装
半精度浮動小数点数に対するコンパイラおよびライブラリサポート
半精度浮動小数点数の形式
浮動小数点計算と浮動小数点リンケージに対するコンパイラサポート
浮動小数点リンケージの種類
浮動小数点リンケージと浮動小数点計算のコンパイラオプション
C コードのゼロによる整数除算エラー
__aeabi_idiv0() を使用したゼロによる整数除算エラーのトラップについて
__rt_raise() を使用したゼロによる整数除算エラーのトラップについて
C コードのゼロによる整数除算エラーの識別
C コードでゼロによる整数除算エラーが発生した場合のパラメータの検証
C コードのソフトウェアでのゼロによる浮動小数点除算エラー
ソフトウェアでのゼロによる浮動小数点除算エラーのトラップについて
ソフトウェアでのゼロによる浮動小数点除算エラーの識別
ソフトウェアでのゼロによる浮動小数点除算エラーのデバッグ
C99 の新しい言語機能
C99 の新しいライブラリ機能
C99 および C90 の // コメント
C99 の複合リテラル
C99 の指定済みのイニシャライザ
C99 の 16 進浮動小数点数
C99 のフレキシブル配列メンバ
C99 の __func__ 定義済み識別子
C99 の inline 関数
C99 および C90 の long long データ型
C99 の使用する引数の数が一定でないマクロ
C99 の宣言とステートメントの混合
C99 の選択および反復ステートメントの新しいブロック有効範囲
C99 の _Pragma 処理命令
C99 の制限付きポインタ
C99 の <math.h> の追加の数学ライブラリ関数
C99 の複素数
C99 のブール型と <stdbool.h>
C99 の <inttypes.h> および <stdint.h> の拡張整数型と関数
C99 の <fenv.h> 浮動小数点環境アクセス
C99 の <stdio.h> の snprintf 関数ファミリ
C99 の <tgmath.h> の型汎用数学マクロ
C99 の <wchar.h> のワイド文字 I/O 関数
未初期化データがゼロで初期化されないようにする方法
コンパイラ診断メッセージ
コンパイラ診断メッセージについて
コンパイラ診断メッセージの重大度
コンパイラ診断メッセージの重大度を変更するオプション
コンパイラ診断メッセージの接頭文字
コンパイラ終了ステータスコードと終了メッセージ
コンパイラデータフロー警告
ARM コンパイラのインラインアセンブラと組み込みアセンブラの使用
インラインアセンブリ言語に対するコンパイラサポート
コンパイラでのインラインアセンブラのサポート
コンパイラでのインラインアセンブラのサポートに対する制限
C および C++ の __asm キーワードを使用したインラインアセンブリ言語構文
C++ の asm キーワードを使用したインラインアセンブリ言語構文
__asm および asm コンパイラキーワードのインラインアセンブラ規則
C および C++ コードのインラインアセンブリ演算の制限
C および C++ コードのインラインアセンブラのレジスタの制限
C および C++ コードのインラインアセンブラのプロセッサモードの制限
C および C++ コードのインラインアセンブラの Thumb 命令セットの制限
C および C++ コードのインラインアセンブラのベクタ浮動小数点(VFP)の制限
C および C++ コードのインラインアセンブラの命令の制限
C および C++ コードのその他のインラインアセンブラの制限
C および C++ コードのインラインアセンブラおよびレジスタアクセス
C および C++ コードのインラインアセンブラおよび # 定数式指定子
C および C++ コードのインラインアセンブラおよび命令の展開
定数を使用するインラインアセンブラ命令の展開
インラインアセンブラのロード/ストア命令の展開
C および C++ コードのプロセッサ条件フラグに対するインラインアセンブラの効果
C および C++ コードのインラインアセンブラのオペランド
C および C++ コードのインラインアセンブラの式オペランド
C および C++ コードのインラインアセンブラのレジスタリストのオペランド
C および C++ コードのインラインアセンブラのイミディエートオペランド
C および C++ コードのインラインアセンブラの関数呼び出しと分岐
C および C++ コードのオプションリストが省略された BL および SVC の動作
C および C++ コードのインラインアセンブラの BL および SVC の入力パラメータリスト
C および C++ コードのインラインアセンブラの BL および SVC の出力値リスト
インラインアセンブラの BL および SVC の破壊レジスタリスト
C および C++ コードのインラインアセンブラの分岐とラベル
インラインアセンブラと仮想レジスタ
コンパイラでの組み込みアセンブラのサポート
C および C++ の組み込みアセンブラ構文
コンパイラの ARM ステートおよび Thumb ステートの組み込みアセンブラに対する影響
C および C++ コードの組み込みアセンブリ言語関数の制限
コンパイラによる組み込みアセンブリ言語関数の生成
組み込みアセンブラからの C および C++ のコンパイル時の定数式へのアクセス
組み込みアセンブラと C/C++ との式の相違点
組み込みアセンブラの手動による多重定義の解決
組み込みアセンブラの関連ベースクラスの __offsetof_base キーワード
組み込みアセンブラのクラスメンバ関数を呼び出すためのコンパイラでサポートされているキーワード
__mcall_is_virtual(D, f)
__mcall_is_in_vbase(D, f)
__mcall_offsetof_vbase(D, f)
__mcall_this_offset(D, f)
__vcall_offsetof_vfunc(D, f)
組み込みアセンブラの非スタティックメンバ関数の呼び出し
非仮想メンバ関数の呼び出し
仮想メンバ関数の呼び出し
sp、lr、または pc にアクセスする従来のインラインアセンブラ
従来のコードでの sp(r13)、lr(r14)、および pc(r15)へのアクセス
インラインアセンブリコードと組み込みアセンブリコードのコンパイラサポートにおける相違点
『コンパイラの使用』に対する改訂

List of Tables

1. コンパイラで認識されるファイル名の接尾文字
2. インクルードファイルの検索パス
3. 配列 A
4. 配列 B
5. 結果
6. ベクトル化可能なループとベクトル化不可能なループ
7. 自動ベクトル化を制限または抑制する要因
8. インクリメントループとデクリメントループを表す C コード
9. インクリメントループとデクリメントループを表す C 逆アセンブリコード
10. 未展開および展開されたビットカウントループを表す C コード
11. 未展開および展開されたビットカウントループを表す逆アセンブリコード
12. 非揮発バッファループと揮発バッファループを表す C コード
13. 非揮発バッファループと揮発バッファループを表す逆アセンブリコード
14. 純関数および非純関数を表す C コード
15. 純関数および非純関数を表す逆アセンブリコード
16. コンパイラによるバイト境界整列でのデータオブジェクトの格納
17. パックされていない struct、パックされた struct、および個々のフィールドがパックされた struct を表す C コード
18. パックされていない struct、パックされた struct、および個々のフィールドがパックされた struct を表す逆アセンブリコード
19. パックされた struct とプラグマパックされた struct の C コード
20. 浮動小数点リンケージと浮動小数点計算のコンパイラオプション
21. 診断メッセージの重大度
22. 診断メッセージの識別
23. インラインアセンブラと組み込みアセンブラの相違点
24. 発行 F と発行 G の相違点
25. 発行 D と発行 F の相違点
26. 発行 C と発行 D の相違点
27. 発行 B と発行 C の相違点
28. 発行 A と発行 B の相違点

著作権

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

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

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

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

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

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

機密保持ステータス

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

製品ステータス

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

Revision History
Revision A2010 年 5 月 28 日ARM コンパイラツールチェーン v4.1 リリース
Revision B2010 年 9 月 30 日ARM コンパイラツールチェーン v4.1 のアップデート 1
Revision C2011 年 1 月 28 日ARM コンパイラツールチェーン v4.1 パッチ 3 のアップデート 2
Revision D2011 年 4 月 30 日ARM コンパイラツールチェーン v5.0 リリース
Revision E2011 年 7 月 29 日ARM コンパイラツールチェーン v5.0 のアップデート 1
Revision F2011 年 9 月 30 日ARM コンパイラツールチェーン v5.01 リリース
Revision G2012 年 2 月 29 日ARM コンパイラツールチェーン v5.01 リリースマニュアルの更新
Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0472GJ
Non-ConfidentialID051612