Adds immediate.
[Syntax]
The following can be specified for imm:
- | Absolute expression having a value of up to 32 bits |
- | Either of the above expressions with HIGHW, LOWW, or HIGHW1 applied |
[Function]
Adds the value of the absolute expression, relative expression, or expression with HIGHW, LOWW, or HIGHW1 applied, specified by the first operand, to the value of the register specified by the second operand, and stores the result into the register specified by the third operand.
[Description]
- | If the following is specified for imm, the assembler generates one addi machine instructionNote. |
(a) | Absolute expression having a value in the range of -32,768 to +32,767 |
addi imm16, reg1, reg2
|
addi imm16, reg1, reg2
|
(b) | Relative expression having $label for a label having a definition in the sdata/sbss-attribute section |
addi $label, reg1, reg2
|
addi $label, reg1, reg2
|
(c) | Relative expression having !label or %label |
addi !label, reg1, reg2
|
addi !label, reg1, reg2
|
addi %label, reg1, reg2
|
addi %label, reg1, reg2
|
(d) | Expression with HIGHW, LOWW, or HIGHW1 |
addi imm16, reg1, reg2
|
addi imm16, reg1, reg2
|
Note | The addi machine instruction takes an immediate value in the range of -32,768 to +32,767 (0xFFFF8000 to 0x7FFF)as the first operand. |
- | If the following is specified for imm, the assembler executes instruction expansion to generate multiple machine instructions. |
(a) | Absolute expression having a value exceeding the range of -32,768 to +32,767 |
<1> | If all the lower 16 bits of the value of imm are 0 |
If reg2 is r0
addi imm, reg1, r0
|
movhi HIGHW(imm), r0, r1
add reg1, r1
|
Else if reg2 is the same as reg1
addi imm, reg1, reg2
|
movhi HIGHW(imm), r0, r1
add r1, reg2
|
Else
addi imm, reg1, reg2
|
movhi HIGHW(imm), r0, reg2
add reg1, reg2
|
If reg2 is r0
addi imm, reg1, r0
|
mov imm, r1
add reg1, r1
|
Else if reg2 is the same as reg1
addi imm, reg1, reg2
|
mov imm, r1
add r1, reg2
|
Else
addi imm, reg1, reg2
|
mov imm, reg2
add reg1, reg2
|
(b) | Relative expression having #label or label, or that having $label for a label having no definition in the sdata/sbss-attribute section |
If reg2 is r0
addi #label, reg1, r0
|
mov #label, r1
add reg1, r1
|
addi label, reg1, r0
|
mov label, r1
add reg1, r1
|
addi $label, reg1, r0
|
mov $label, r1
add reg1, r1
|
Else if reg2 is the same as reg1
addi #label, reg1, reg2
|
mov #label, r1
add r1, reg2
|
addi label, reg1, reg2
|
mov label, r1
add r1, reg2
|
addi $label, reg1, reg2
|
mov $label, r1
add r1, reg2
|
Else
addi #label, reg1, reg2
|
mov #label, reg2
add reg1, reg2
|
addi label, reg1, reg2
|
mov label, reg2
add reg1, reg2
|
addi $label, reg1, reg2
|
mov $label, reg2
add reg1, reg2
|
[Flag]
CY
|
1 if a carry occurs from MSB (Most Significant Bit), 0 if not
|
OV
|
1 if Integer-Overflow occurs, 0 if not
|
S
|
1 if the result is negative, 0 if not
|
Z
|
1 if the result is 0, 0 if not
|
SAT
|
---
|