- | The cmov instruction of the device should be specified in the following formats. |
- | CMOV cccc, reg1, reg2, reg3 |
- | CMOV cccc, imm5, reg2, reg3 |
- | In asrh, the following formats can also be used in addition to the above. |
- | cmovcond reg1, reg2, reg3 |
- | cmovcond imm, reg2, reg3 |
Code that can be specified in cond and the result of assembly are the same as those for the setf instruction. For details, see "Table 5.27 setfcond Instruction".
- | If the following is specified as imm in syntax "cmov cccc, imm, reg2, reg3" or "cmovcond imm, reg2, reg3", the assembler executes instruction expansion to generate multiple machine instructions. |
(a) | Absolute expression exceeding the range of -16 to +15, but within the range of -32,768 to +32,767 |
|
|
cmov imm4, imm16, reg2, reg3
|
movea imm16, r0, r1
cmov imm4, r1, reg2, reg3
|
(b) | Absolute expression having a value exceeding the range of -32,768 to +32,767 |
If all the lower 16 bits of the value of imm are 0
|
|
cmov imm4, imm, reg2, reg3
|
movhi HIGHW(imm), r0, r1
cmov imm4, r1, reg2, reg3
|
Else
|
|
cmov imm4, imm, reg2, reg3
|
mov imm, r1
cmov imm4, r1, reg2, reg3
|
(c) | Relative expression having #label or label, or that having $label for a label having no definition in the sdata/sbss-attribute section |
|
|
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) | Relative expression having !label or %label, or that having $label for a label with a definition in the sdata/sbss-attribute section |
|
|
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
|