addi


Adds immediate.

[Syntax]

-

addi imm, reg1, reg2

 

The following can be specified for imm:

-

Absolute expression having a value of up to 32 bits

-

Relative expression

-

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

<2>

Else

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

---