Exclusive OR (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]
Exclusive-ORs the value of the absolute expression, relative expression, or expression with HIGHW, LOWW, or HIGHW1 applied specified by the first operand with the value of the register specified by the second operand, and stores the result in the register specified by the third operand.
[Description]
- | If the following is specified for imm, the assembler generates one xori machine instructionNote 1. |
(a) | Absolute expression having a value in the range of 0 to 65,535 |
xori imm16, reg1, reg2
|
xori imm16, reg1, reg2
|
(b) | Relative expression having !label or %labelNote 2 |
xori !label, reg1, reg2
|
xori !label, reg1, reg2
|
xori %label, reg1, reg2
|
xori %label, reg1, reg2
|
(c) | Expression with HIGHW, LOWW, or HIGHW1 |
xori imm16, reg1, reg2
|
xori imm16, reg1, reg2
|
Note 1. | The xori machine instruction takes an immediate value of 0 to 65,535 (0 to 0xFFFF) as the first operand. |
Note 2. | !label and %label are treated as 16-bit value (zero-extended). |
- | If the following is specified for imm, the assembler executes instruction expansion to generate multiple machine instructions. |
(a) | Absolute expression having a value in the range of -16 to -1 |
If reg2 is r0
xori imm5, reg1, r0
|
mov imm5, r1
xor reg1, r1
|
Else if reg2 is the same as reg1
xori imm5, reg1, reg2
|
mov imm5, r1
xor r1, reg2
|
Else
xori imm5, reg1, reg2
|
mov imm5, reg2
xor reg1, reg2
|
(b) | Absolute expression having a value in the range of -32,768 to -17 |
If reg2 is r0
xori imm16, reg1, r0
|
movea imm16, r0, r1
xor reg1, r1
|
Else if reg2 is the same as reg1
xori imm16, reg1, reg2
|
movea imm16, r0, r1
xor r1, reg2
|
Else
xori imm16, reg1, reg2
|
movea imm16, r0, reg2
xor reg1, reg2
|
(c) | Absolute expression exceeding the above ranges |
<1> | If all the lower 16 bits of the value of imm are 0 |
If reg2 is r0
xori imm, reg1, r0
|
movhi HIGHW(imm), r0, r1
xor reg1, r1
|
Else if reg2 is the same as reg1
xori imm, reg1, reg2
|
movhi HIGHW(imm), r0, r1
xor r1, reg2
|
Else
xori imm, reg1, reg2
|
movhi HIGHW(imm), r0, reg2
xor reg1, reg2
|
If reg2 is r0
xori imm, reg1, r0
|
mov imm, r1
xor reg1, r1
|
Else if reg2 is the same as reg1
xori imm, reg1, reg2
|
mov imm, r1
xor r1, reg2
|
Else
xori imm, reg1, reg2
|
mov imm, reg2
xor reg1, reg2
|
(d) | Relative expression having $label for a label having a definition in the sdata/sbss-attribute section |
If reg2 is r0
xori $label, reg1, r0
|
movea $label, r0, r1
xor reg1, r1
|
Else if reg2 is the same as reg1
xori $label, reg1, reg2
|
movea $label, r0, r1
xor r1, reg2
|
Else
xori $label, reg1, reg2
|
movea $label, r0, reg2
xor reg1, reg2
|
(e) | 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
xori #label, reg1, r0
|
mov #label, r1
xor reg1, r1
|
xori label, reg1, r0
|
mov label, r1
xor reg1, r1
|
xori $label, reg1, r0
|
mov $label, r1
xor reg1, r1
|
Else if reg2 is the same as reg1
xori #label, reg1, reg2
|
mov #label, r1
xor r1, reg2
|
xori label, reg1, reg2
|
mov label, r1
xor r1, reg2
|
xori $label, reg1, reg2
|
mov $label, r1
xor r1, reg2
|
Else
xori #label, reg1, reg2
|
mov #label, reg2
xor reg1, reg2
|
xori label, reg1, reg2
|
mov label, reg2
xor reg1, reg2
|
xori $label, reg1, reg2
|
mov $label, reg2
xor reg1, reg2
|
[Flag]
CY
|
---
|
OV
|
0
|
S
|
1 if the word data MSB of the result is 1, 0 if not
|
Z
|
1 if the result is 0, 0 if not
|
SAT
|
---
|