The following can be specified for imm:
Subtracts the value of the register specified by the second operand from the value of the register specified by the first operand, and stores the result in the register specified by the second operand. If the result exceeds the maximum positive value of 0x7FFFFFFF, however, 0x7FFFFFFF is stored in the register specified by the second operand. Likewise, if the result exceeds the maximum negative value of 0x80000000, 0x80000000 is stored in the register specified by the second operand. In both cases, the SAT flag is set to 1.
Subtracts the value of the register specified by the second operand from the value of the absolute expression or relative expression specified by the first operand, and stores the result in the register specified by the second operand. If the result exceeds the maximum positive value of 0x7FFFFFFF, however, 0x7FFFFFFF is stored in the register specified by the second operand. Likewise, if the result exceeds the maximum negative value of 0x80000000, 0x80000000 is stored in the register specified by the second operand. In both cases, the SAT flag is set to 1.
If the instruction is executed in syntax "satsubr reg1, reg2", the assembler generates one satsubr machine instruction. |
If the instruction is executed in syntax "satsubr imm, reg2", the assembler executes instruction expansion to generate 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 |
satsubr !label, reg |
movea !label, r0, r1 satsubr r1, reg |
satsubr %label, reg |
movea %label, r0, r1 satsubr r1, reg |
satsubr $label, reg |
movea $label, r0, r1 satsubr r1, reg |
Relative expression having #label or label, or that having $label for a label having no definition in the sdata/sbss-attribute section |
satsubr #label, reg |
mov #label, r1 satsubr r1, reg |
satsubr label, reg |
mov label, r1 satsubr r1, reg |
satsubr $label, reg |
mov $label, r1 satsubr r1, reg |
If r0 is specified by the second operand, the assembler outputs the following message and stops assembling. |