tst


Test.

[Syntax]

-

tst reg1, reg2

-

tst imm, reg2

 

The following can be specified for imm:

-

Absolute expression having a value of up to 32 bits

-

Relative expression

[Function]

-

Syntax "tst reg1, reg2"

ANDs the value of the register specified by the second operand with the value of the register specified by the first operand, and sets only the flags without storing the result.

-

Syntax "tst imm, reg2"

ANDs the value of the register specified by the second operand with the value of the absolute expression or relative expression specified by the first operand, and sets only the flags without storing the result.

[Description]

-

When this instruction is executed in syntax "tst reg1, reg2", the assembler generates one tst machine instruction.

-

When this instruction is executed in syntax "tst imm, reg2", the assembler executes instruction expansion to generate two or more machine instructionsNote.

(a)

0

tst     0, reg
tst     r0, reg

(b)

Absolute expression having a value of other than 0 within the range of -16 to +15

tst     imm5, reg
mov     imm5, r1
tst     r1, reg

(c)

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

tst     imm16, reg
movea   imm16, r0, r1
tst     r1, reg

(d)

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

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

 

Else

tst     imm, reg
mov     imm, r1
tst     r1, reg

(e)

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

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

(f)

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

tst     #label, reg
mov     #label, r1
tst     r1, reg
tst     label, reg
mov     label, r1
tst     r1, reg
tst     $label, reg
mov     $label, r1
tst     r1, reg

Note

The tst machine instruction take an immediate value as an operand.

[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

---