7.17 定数を使用するインラインアセンブラ命令の展開

命令で指定された定数オペランドは、その命令で許容されている値に制限されません。代わりに、コンパイラにより、命令は同等の効果がある命令のシーケンスに変換される可能性があります。

以下に例を示します。
ADD r0,r0,#1023
上記の命令は、以下のように変換されます。
ADD r0,r0,#1024
SUB r0,r0,#1
展開の別の例を示します。
MOV rn,0x12345678
コプロセッサ命令を除き、定数オペランドを伴うすべての ARM 命令は命令の展開をサポートします。また、MUL 命令は、第 3 オペランドが定数である場合、加算とシフトのシーケンスに展開できます。
展開した命令で CPSR を更新すると、以下の効果があります。
  • 算術命令で、NZCV フラグが正しく設定されます。
  • 論理命令で、以下のことが行われます。
    • NZ フラグが正しく設定されます。
    • V フラグが変更されません。
    • C フラグが壊されます。
関連する概念
7.16 C および C++ コードのインラインアセンブラおよび命令の展開
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.