123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- //Original:testcases/core/c_linkage/c_linkage.dsp
- // Spec Reference: linkage (link & unlnk)
- # mach: bfin
- .include "testutils.inc"
- start
- INIT_R_REGS(0);
- loadsym sp, DATA_ADDR_1, 0x24;
- p0 = sp;
- FP = 0x0064 (X);
- R0 = 5;
- RETS = R0;
- LINK 4; // push rets, push fp, fp=sp, sp=sp-framesize (4)
- R1 = 3;
- RETS = R1; // initialize rets by a different value
- loadsym p1, SUBR
- CALL ( P1 );
- SP = 0x3333 (X);
- UNLINK; // sp = fp, fp = pop (old fp), rets = pop(old rets),
- R2 = RETS; // for checking
- CHECKREG r0, 0x00000005;
- CHECKREG r1, 0x00000003;
- CHECKREG r2, 0x00000005;
- CHECKREG r3, 0x00000000;
- CHECKREG r4, 0x00000000;
- CHECKREG r5, 0x00000000;
- CHECKREG r6, 0x00001111;
- CHECKREG r7, 0x00000000;
- CHECKREG fp, 0x00000064;
- CC = SP == P0;
- if CC JUMP 1f;
- fail;
- 1:
- pass
- SUBR: // should jump here
- R6.L = 0x1111;
- RTS;
- R7.L = 0x2222; // should not go here
- RTS;
- .data
- DATA_ADDR_1:
- DATA:
- .space (0x0100);
- // Stack Segments
- .space (0x100);
- KSTACK:
|