andi, ori, xori


-

The andi, ori, and xori instructions of the device should be specified in the following formats.

-

ANDI imm16, reg1, reg2

-

ORI imm16, reg1, reg2

-

XORI imm16, reg1, reg2

 

-

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

andi    imm5, reg1, r0
mov     imm5, r1
and     reg1, r1

 

Else if reg2 is the same as reg1

andi    imm5, reg1, reg2
mov     imm5, r1
and     r1, reg2

 

Else

andi    imm5, reg1, reg2
mov     imm5, reg2
and     reg1, reg2

(b)

Absolute expression having a value in the range of -32,768 to -17

If reg2 is r0

andi    imm16, reg1, r0
movea   imm16, r0, r1
and     reg1, r1

 

Else if reg2 is the same as reg1

andi    imm16, reg1, reg2
movea   imm16, r0, r1
and     r1, reg2

 

Else

andi    imm16, reg1, reg2
movea   imm16, r0, reg2
and     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

andi    imm, reg1, r0
movhi   HIGHW(imm), r0, r1
and     reg1, r1

 

Else if reg2 is the same as reg1

andi    imm, reg1, reg2
movhi   HIGHW(imm), r0, r1
and     r1, reg2

 

Else

andi    imm, reg1, reg2
movhi   HIGHW(imm), r0, reg2
and     reg1, reg2

<2>

Else

If reg2 is r0

andi    imm, reg1, r0
mov     imm, r1
and     reg1, r1

 

Else if reg2 is the same as reg1

andi    imm, reg1, reg2
mov     imm, r1
and     r1, reg2

 

Else

andi    imm, reg1, reg2
mov     imm, reg2
and     reg1, reg2

(d)

Relative expression having $label for a label having a definition in the sdata/sbss-attribute section

If reg2 is r0

andi    $label, reg1, r0
movea   $label, r0, r1
and     reg1, r1

 

Else if reg2 is the same as reg1

andi    $label, reg1, reg2
movea   $label, r0, r1
and     r1, reg2

 

Else

andi    $label, reg1, reg2
movea   $label, r0, reg2
and     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

andi    #label, reg1, r0
mov     #label, r1
and     reg1, r1
andi    label, reg1, r0
mov     label, r1
and     reg1, r1
andi    $label, reg1, r0
mov     $label, r1
and     reg1, r1

 

Else if reg2 is the same as reg1

andi    #label, reg1, reg2
mov     #label, r1
and     r1, reg2
andi    label, reg1, reg2
mov     label, r1
and     r1, reg2
andi    $label, reg1, reg2
mov     $label, r1
and     r1, reg2

 

Else

andi    #label, reg1, reg2
mov     #label, reg2
and     reg1, reg2
andi    label, reg1, reg2
mov     label, reg2
and     reg1, reg2
andi    $label, reg1, reg2
mov     $label, reg2
and     reg1, reg2