命令の組み込み関数、インラインアセンブラ、および組み込みアセンブラ

コンパイラには、C または C++ 言語から直接アクセスできないターゲットプロセッサの機能を使用するために、命令の組み込み関数、インラインアセンブラ、および組み込みアセンブラが組み込まれています。以下に例を示します。

命令の組み込み関数

命令の組み込み関数を使用すると、アセンブリ言語による複雑な実装手段をとらずに、C および C++ ソースコードにターゲットプロセッサの機能を簡単に組み込むことができます。命令の組み込み関数は、C または C++ の関数呼び出しのように見えますが、コンパイル時にアセンブリ言語の命令に置き換えられます。

Note

命令の組み込み関数は、ARM 命令セットに固有なので、その他のアーキテクチャには移植できません。

インラインアセンブラ

インラインアセンブラでは、C および C++ 言語とのインターワークがサポートされています。どのレジスタオペランドにも、任意の C または C++ のを使用できます。また、インラインアセンブラでは、複雑な命令を展開し、アセンブリ言語コードを最適化します。

Note

出力オブジェクトコードは、コンパイラによって最適化されるために入力と完全に一致しない場合があります。

組み込みアセンブラ

組み込みアセンブラを使用すると、アセンブラディレクティブを含む、すべての ARM アセンブラ命令セットを使用できます。組み込みアセンブリードは、C および C++ で記述されたコードとは別にアセンブルされます。コンパイルされたオブジェクトは、生成された後、C および C++ のソースコンパイルによって生成されたオブジェクトと結合されます。

以下の表は、命令の組み込み関数、インラインアセンブラ、および組み込みアセンブラの主な相違点について説明しています。

Table 12. 相違点

機能命令の組み込み関数インラインアセンブラ組み込みアセンブラ
命令セットARM および Thumb。ARM のみ。ARM および Thumb。
ARM アセンブラディレクティブサポートされていません。サポートされていません。すべてサポートされています。
C または C++ の式C または C++ のすべての式。C または C++ のすべての式。定数式のみ。
アセンブリコードの最適化完全に最適化されます。完全に最適化されます。最適化されません。
インライン展開自動的にインライン展開されます。自動的にインライン展開されます。正しいサイズとリンカのインライン展開が有効になっていると、リンカによってインライン展開できます。
レジスタへのアクセス物理レジスタ(PC、LR、および SP を含む)。

PC、LR、および SP 以外の仮想レジスタ。

物理レジスタ(PC、LR、および SP を含む)。
復帰命令自動的に生成されます。自動的に生成されます。BXBXJ、および BLX 命令はサポートされていません。コードに追加する必要があります。
BKPT 命令サポートされています。サポートされていません。サポートされています。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0471EJ
Non-ConfidentialID081711