cmov


-

デバイスのcmov命令は次の形式です。

-

CMOV cccc, reg1, reg2, reg3

-

CMOV cccc, imm5, reg2, reg3

 

-

asrhでは,上記に加えて,次の形式も指定できます。

-

cmovcond reg1, reg2, reg3

-

cmovcond imm, reg2, reg3

 

condに指定できる記述,および意味はsetf命令と同じです。詳細は「表 5.27 setfcond命令」を参照してください。

 

-

“cmov cccc, imm, reg2, reg3”,または“cmovcond imm, reg2, reg3”の形式でimmに次のものを指定した場合,アセンブラでは,命令展開が行われ,複数個の機械語命令が生成されます。

(a)

-16〜+15の範囲を越え,-32768〜+32767の範囲の絶対値式

cmov    imm4, imm16, reg2, reg3
movea   imm16, r0, r1
cmov    imm4, r1, reg2, reg3

(b)

-32768〜+32767の範囲を越える絶対値式

immの値の下位16ビットがすべて0の場合

cmov    imm4, imm, reg2, reg3
movhi   HIGHW(imm), r0, r1
cmov    imm4, r1, reg2, reg3

 

上記以外の場合

cmov    imm4, imm, reg2, reg3
mov     imm, r1
cmov    imm4, r1, reg2, reg3

(c)

#label,またはlabelを持つ相対値式,およびsdata/sbss属性セクションに定義を持たないラベルの$labelを持つ相対値式

cmov    imm4, #label, reg2, reg3
mov     #label, r1
cmov    imm4, r1, reg2, reg3
cmov    imm4, label, reg2, reg3
mov     label, r1
cmov    imm4, r1, reg2, reg3
cmov    imm4, $label, reg2, reg3
mov     $label, r1
cmov    imm4, r1, reg2, reg3

(d)

!label,または%labelを持つ相対値式,およびsdata/sbss属性セクションに定義を持つラベルの$labelを持つ相対値式

cmov    imm4, !label, reg2, reg3
movea   !label, r0, r1
cmov    imm4, r1, reg2, reg3
cmov    imm4, %label, reg2, reg3
movea   %label, r0, r1
cmov    imm4, r1, reg2, reg3
cmov    imm4, $label, reg2, reg3
movea   $label, r0, r1
cmov    imm4, r1, reg2, reg3