mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
77 lines
1.4 KiB
ArmAsm
77 lines
1.4 KiB
ArmAsm
|
# Blackfin testcase for loop counter values when jumping out from the last insn
|
||
|
# mach: bfin
|
||
|
|
||
|
.include "testutils.inc"
|
||
|
start
|
||
|
|
||
|
init_r_regs 0;
|
||
|
ASTAT = R0;
|
||
|
|
||
|
loadsym r1, dest;
|
||
|
r0 = r1;
|
||
|
loadsym r1, src;
|
||
|
r2 = 0x10;
|
||
|
|
||
|
_strncpy:
|
||
|
CC = R2 == 0;
|
||
|
if CC JUMP 4f;
|
||
|
|
||
|
P2 = R2 ; /* size */
|
||
|
P0 = R0 ; /* dst*/
|
||
|
P1 = R1 ; /* src*/
|
||
|
|
||
|
LSETUP (1f, 2f) LC0 = P2;
|
||
|
1:
|
||
|
R1 = B [P1++] (Z);
|
||
|
B [P0++] = R1;
|
||
|
CC = R1 == 0;
|
||
|
2:
|
||
|
if CC jump 3f;
|
||
|
|
||
|
fail
|
||
|
|
||
|
/* if src is shorter than n, we need to null pad bytes in dest
|
||
|
* but, we can get here when the last byte is zero, and we don't
|
||
|
* want to copy an extra byte at the end, so we need to check
|
||
|
*/
|
||
|
3:
|
||
|
R2 = LC0;
|
||
|
CHECKREG R2, 0x0a;
|
||
|
|
||
|
CC = R2
|
||
|
if ! CC jump 4f;
|
||
|
|
||
|
LSETUP(5f, 5f) LC0;
|
||
|
5:
|
||
|
B [P0++] = R1;
|
||
|
|
||
|
4:
|
||
|
loadsym P1, answer;
|
||
|
P0 = R0;
|
||
|
p2 = 0x20;
|
||
|
LSETUP (6f, 7f) LC0 = P2;
|
||
|
6:
|
||
|
R1 = B [P0++];
|
||
|
R2 = B [P1++];
|
||
|
CC = R1 == R2
|
||
|
IF ! CC JUMP wrong;
|
||
|
7:
|
||
|
NOP;
|
||
|
|
||
|
pass
|
||
|
|
||
|
wrong:
|
||
|
fail
|
||
|
|
||
|
.data
|
||
|
dest:
|
||
|
.db 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
|
||
|
.db 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
|
||
|
|
||
|
src:
|
||
|
.db 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30
|
||
|
|
||
|
answer:
|
||
|
.db 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||
|
.db 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
|