1//Original:testcases/core/c_linkage/c_linkage.dsp 2// Spec Reference: linkage (link & unlnk) 3# mach: bfin 4 5.include "testutils.inc" 6 start 7 8 INIT_R_REGS(0); 9 10 loadsym sp, DATA_ADDR_1, 0x24; 11 p0 = sp; 12 13 FP = 0x0064 (X); 14 R0 = 5; 15 RETS = R0; 16 17 LINK 4; // push rets, push fp, fp=sp, sp=sp-framesize (4) 18 19 R1 = 3; 20 RETS = R1; // initialize rets by a different value 21 22 loadsym p1, SUBR 23 CALL ( P1 ); 24 25 SP = 0x3333 (X); 26 27 UNLINK; // sp = fp, fp = pop (old fp), rets = pop(old rets), 28 29 R2 = RETS; // for checking 30 31 CHECKREG r0, 0x00000005; 32 CHECKREG r1, 0x00000003; 33 CHECKREG r2, 0x00000005; 34 CHECKREG r3, 0x00000000; 35 CHECKREG r4, 0x00000000; 36 CHECKREG r5, 0x00000000; 37 CHECKREG r6, 0x00001111; 38 CHECKREG r7, 0x00000000; 39 CHECKREG fp, 0x00000064; 40 CC = SP == P0; 41 if CC JUMP 1f; 42 fail; 431: 44 pass 45 46SUBR: // should jump here 47 R6.L = 0x1111; 48 RTS; 49 R7.L = 0x2222; // should not go here 50 RTS; 51 52 .data 53DATA_ADDR_1: 54DATA: 55 .space (0x0100); 56 57// Stack Segments 58 59 .space (0x100); 60KSTACK: 61