The following can be specified for imm:
Subtracts the value of the register specified by the first operand from the value of the register specified by the second operand, and stores the result in the register specified by the second operand.
Subtracts the value of the absolute expression or relative expression specified by the first operand from the value of the register specified by the second operand, and stores the result into the register specified by the second operand.
If the instruction is executed in syntax "subr reg1, reg2", the assembler generates one subr machine instruction. |
If the instruction is executed in syntax "subr imm, reg2", the assembler executes instruction expansion and generates one or more machine instructionsNote. |
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 |
subr !label, reg |
movea !label, r0, r1 subr r1, reg |
subr %label, reg |
movea %label, r0, r1 subr r1, reg |
subr $label, reg |
movea $label, r0, r1 subr r1, reg |
Relative expression having #label or label, or that having $label for a label having no definition in the sdata/sbss-attribute section |