# sh testcase for cmp/str $rm, $rn -*- Asm -*- # mach: all # as: -isa=shcompact # ld: -m shelf32 .include "compact/testutils.inc" .macro rot8 rotr r0 rotr r0 rotr r0 rotr r0 rotr r0 rotr r0 rotr r0 rotr r0 .endm start # Use multiple "wrong" labels because this program is quite long. It's # likely that some instructions will be too far away from the branch # target to use PC-relative branches. match0: # No bytes matching. mov #1, r0 neg r0, r0 xor #170, r0 rot8 xor #170, r0 rot8 xor #170, r0 rot8 xor #170, r0 rot8 mov r0, r1 mov #1, r0 neg r0, r0 xor #85, r0 rot8 xor #85, r0 rot8 xor #85, r0 rot8 xor #85, r0 rot8 cmp/str r0, r1 bt wrong0 bra match1 nop wrong0: fail match1: # One byte matching. mov #1, r0 neg r0, r0 xor #170, r0 rot8 xor #170, r0 rot8 xor #170, r0 rot8 mov r0, r1 mov #1, r0 neg r0, r0 xor #85, r0 rot8 xor #85, r0 rot8 xor #85, r0 rot8 cmp/str r0, r1 bf wrong1 bra match2 nop wrong1: fail match2: # Two bytes matching. mov #1, r0 neg r0, r0 xor #170, r0 rot8 xor #170, r0 rot8 mov r0, r1 mov #1, r0 neg r0, r0 xor #85, r0 rot8 xor #85, r0 rot8 cmp/str r0, r1 bf wrong2 bra match3 nop wrong2: fail byte0: match3: # One byte matching. # This is also the test for byte 0. mov #85, r0 mov #85, r1 cmp/str r0, r1 bf wrong3 byte1: # Match in byte position 1. mov #85, r0 shll8 r0 mov #85, r1 shll8 r1 cmp/str r0, r1 bf wrong3 byte2: # Match in byte position 2. mov #85, r0 shll16 r0 mov #85, r1 shll16 r1 cmp/str r0, r1 bf wrong3 byte3: # Match in byte position 3. mov #85, r0 shll16 r0 shll8 r0 mov #85, r1 shll16 r1 shll8 r1 cmp/str r0, r1 bf wrong3 okay: pass wrong3: fail