xori


Exclusive OR (Immediate).

[Syntax]

-

xori 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]

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

<2>

Else

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

---