7.45 インラインアセンブリコードと組み込みアセンブリコードのコンパイラサポートにおける相違点

インラインアセンブリと組み込みアセンブリではコンパイル方法が異なります。

特に、次のような違いがあります。
  • インラインアセンブリコードではハイレベルなプロセッサ抽象化が使用され、コード生成中に C および C++ コードに統合されます。そのため、コンパイラでは C および C++ コードとアセンブリコードが同時に最適化されます。
  • 組み込みアセンブリコードは、インラインアセンブリコードとは異なり、C および C++ コードとは別にアセンブルされます。生成されたコンパイル済みオブジェクトは、C または C++ ソースをコンパイルして生成されたオブジェクトと結合されます。
  • インラインアセンブリコードは、コンパイラによってインライン展開できますが、組み込みアセンブリコードは暗黙にも明示的にもインライン展開することはできません。
以下の表は、インラインアセンブラおよび組み込みアセンブラの主な相違点について説明しています。

表 7-1 インラインアセンブラと組み込みアセンブラの相違点

機能 組み込みアセンブラ インラインアセンブラ
命令セット ARM および Thumb。
すべてのプロセッサの ARM。
Thumb-2 テクノロジが用いられているプロセッサの Thumb。
ARM アセンブラディレクティブ すべてサポートされています。 サポートされていません。
ARMv6 命令 すべてサポートされています。
SETEND や 一部のシステム拡張機能などの一部の例外を除き、ほとんどの命令がサポートされています。また ARMv6 SIMD 命令の完全なセットがサポートされています。
ARMv7 命令 すべてサポートされています。 ほとんどの命令をサポートします。
VFP および NEON 命令 すべてサポートされています。 VFPv2 のみ。
C または C++ の式 定数式のみ。 C または C++ のすべての式。
アセンブリコードの最適化 最適化されません。 完全に最適化されます。
インライン展開 不可。 可。
レジスタへのアクセス 指定した物理レジスタが使用されます。PCLR、および SP も使用できます。
仮想レジスタを使用します。spr13)、lrr14)、および pcr15)を使用すると、エラーが発生します。
復帰命令 コードに追加する必要があります。 自動的に生成されます(BXBXJ、および BLX 命令はサポートされていません)。
BKPT 命令 直接サポートされています。 サポートされていません。
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.