The following can be specified for imm:
Compares the value of the register specified by the first operand with the value of the register specified by the second operand, and indicates the result using a flag. Comparison is performed by subtracting the value of the register specified by the first operand from the value of the register specified by the second operand.
Compares the value of the absolute expression or relative expression specified by the first operand with the value of the register specified by the second operand, and indicates the result using a flag. Comparison is performed by subtracting the value of the register specified by the first operand from the value of the register specified by the second operand.
If the instruction is executed in syntax "cmp reg1, reg2", the assembler generates one cmp machine instruction. |
If the following is specified as imm in syntax "cmp imm, reg2", the assembler generates one cmp machine instructionNote. |
The cmp machine instruction takes a register or immediate value in the range of -16 to +15 (0xFFFFFFF0 to 0xF) as the first operand. |
If the following is specified as imm in syntax "cmp imm, reg2", the assembler executes instruction expansion to generate multiple machine instructions. |
Absolute expression exceeding the range of -16 to +15, but within the range of -32,768 to +32,767 |
If all the lower 16 bits of the value of imm are 0
Relative expression having !label or %label, or that having $label for a label having a definition in the sdata/sbss-attribute section |
cmp !label, reg |
movea !label, r0, r1 cmp r1, reg |
cmp %label, reg |
movea %label, r0, r1 cmp r1, reg |
cmp $label, reg |
movea $label, r0, r1 cmp r1, reg |
Relative expression having #label or label, or that having $label for a label having no definition in the sdata/sbss-attribute section |