C および C++ コードのインラインアセンブラの式オペランド

インラインアセンブリ言語命令のレジスタオペランドとして、関数の引数、C または C++ の変数、およびその他 C または C++ の式を指定できます。

ARM 整数レジスタの代わりに使用する式は、long long を除く整数型(charshortintlong のいずれか)、またはポインタ型にする必要があります。char 型または short 型に対する符号拡張は実行されません。そのため、この 2 つの型には、明示的に符号拡張を実行する必要があります。これらの式を評価してレジスタに割り当てるため、コンパイラによってコードが追加される場合があります。

デスティネーションとしてオペランドが使用されているとき、レジスタを修正する場合にオペランドとして使用する式は修正可能な左辺値でなけばなりません。例えば、デスティネーションレジスタまたはベースレジスタが更新されるベースレジスタがこれに当たります。

複数の式オペランドを含む命令において、式オペランドが評価される順序は決まっていません。

条件付き命令の式オペランドは、命令の条件が真である場合に限り評価されます。

インラインアセンブラのオペランドとして C または C++ の式を使用すると、1 つの命令が複数の命令に展開される場合があります。展開は、式の値が、『ARM アーキテクチャリファレンスマニュアル』に記載されている命令オペランドの制約を満たしていない場合に行われます。

オペランドとして使用される式により一時領域が作成され、そのレジスタを破棄する必要がある場合、インラインアセンブリ命令を実行した後で棄が行われます。これは、一時領域を破棄する C++ の規則に似ています。

単純式オペランドは以下のいずれかになります。

以下のいずれかを含む式は、単純式オペランドではありません。

Show/hide関連項目

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