1# Blackfin testcase for loop counter values when jumping out from the last insn 2# mach: bfin 3 4.include "testutils.inc" 5 start 6 7 init_r_regs 0; 8 ASTAT = R0; 9 10 loadsym r1, dest; 11 r0 = r1; 12 loadsym r1, src; 13 r2 = 0x10; 14 15_strncpy: 16 CC = R2 == 0; 17 if CC JUMP 4f; 18 19 P2 = R2 ; /* size */ 20 P0 = R0 ; /* dst*/ 21 P1 = R1 ; /* src*/ 22 23 LSETUP (1f, 2f) LC0 = P2; 241: 25 R1 = B [P1++] (Z); 26 B [P0++] = R1; 27 CC = R1 == 0; 282: 29 if CC jump 3f; 30 31 fail 32 33 /* if src is shorter than n, we need to null pad bytes in dest 34 * but, we can get here when the last byte is zero, and we don't 35 * want to copy an extra byte at the end, so we need to check 36 */ 373: 38 R2 = LC0; 39 CHECKREG R2, 0x0a; 40 41 CC = R2 42 if ! CC jump 4f; 43 44 LSETUP(5f, 5f) LC0; 455: 46 B [P0++] = R1; 47 484: 49 loadsym P1, answer; 50 P0 = R0; 51 p2 = 0x20; 52 LSETUP (6f, 7f) LC0 = P2; 536: 54 R1 = B [P0++]; 55 R2 = B [P1++]; 56 CC = R1 == R2 57 IF ! CC JUMP wrong; 587: 59 NOP; 60 61 pass 62 63wrong: 64 fail 65 66 .data 67dest: 68 .db 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 69 .db 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F 70 71src: 72 .db 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30 73 74answer: 75 .db 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 76 .db 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F 77