satadd


Adda saturated.

[Syntax]

-

satadd reg1, reg2

-

satadd imm, reg2

-

satadd reg1, reg2, reg3

 

The following can be specified for imm:

-

Absolute expression having a value of up to 32 bits

-

Relative expression

[Function]

-

Syntax "satadd reg1, reg2"

Adds the value of the register specified by the first operand to the value of the register specified by the second 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.

-

Syntax "satadd imm, reg2"

Adds the value of the absolute expression or relative expression specified by the first operand to the value of the register specified by the second 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.

-

Syntax "satadd reg1, reg2, reg3"

Adds the value of the register specified by the first operand to the value of the register specified by the second operand, and stores the result in the register specified by the third 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 third operand. In both cases, the SAT flag is set to 1.

[Description]

-

If the instruction is executed in syntax "satadd reg1, reg2" or "satadd reg1, reg2, reg3", the assembler generates one satadd machine instruction.

-

If the following is specified for imm in syntax "satadd imm, reg2", the assembler generates one satadd machine instructionNote.

(a)

Absolute expression having a value in the range of -16 to +15

satadd  imm5, reg
satadd  imm5, reg

Note

The satadd 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 for imm in syntax "satadd imm, reg2", the assembler executes instruction expansion to generate multiple machine instructions.

(a)

Absolute expression exceeding the range of -16 to +15, but within the range of -32,768 to +32,767

satadd  imm16, reg
movea   imm16, r0, r1
satadd  r1, reg

(b)

Absolute expression having a value exceeding the range of -32,768 to +32,767

If all the lower 16 bits of the value of imm are 0

satadd  imm, reg
movhi   HIGHW(imm), r0, r1
satadd  r1, reg

Else

satadd  imm, reg
mov     imm, r1
satadd  r1, reg

(c)

Relative expression having !label or %label, or that having $label for a label having a definition in the sdata/sbss-attribute section

satadd  !label, reg
movea   !label, r0, r1
satadd  r1, reg
satadd  %label, reg
movea   %label, r0, r1
satadd  r1, reg
satadd  $label, reg
movea   $label, r0, r1
satadd  r1, reg

(d)

Relative expression having #label or label, or that having $label for a label having no definition in the sdata/sbss-attribute section

satadd  #label, reg
mov     #label, r1
satadd  r1, reg
satadd  label, reg
mov     label, r1
satadd  r1, reg
satadd  $label, reg
mov     $label, r1
satadd  r1, reg

[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

1 if OV = 1, - if not

[Caution]

-

If the instruction is executed in syntax "satadd reg1, reg2" or "satadd imm, reg2", if r0 is specified as the second operand, the assembler outputs the following message and stops assembling.

E0550240 : Illegal operand (cannot use r0 as destination in RH850 mode).