c_linkage.s 974 B

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