link.s 995 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # Blackfin testcase for link/unlink instructions
  2. # mach: bfin
  3. .include "testutils.inc"
  4. start
  5. /* give FP/RETS known/different values */
  6. R7.H = 0xdead;
  7. R7.L = 0x1234;
  8. RETS = R7;
  9. R6 = R7;
  10. R6 += 0x23;
  11. FP = R6;
  12. /* SP should have moved by -8 bytes (to push FP/RETS) */
  13. R0 = SP;
  14. LINK 0;
  15. R1 = SP;
  16. R1 += 8;
  17. CC = R0 == R1;
  18. IF !CC JUMP 1f;
  19. /* FP should now have the same value as SP */
  20. R1 = SP;
  21. R2 = FP;
  22. CC = R1 == R2;
  23. IF !CC JUMP 1f;
  24. /* make sure FP/RETS on the stack have our known values */
  25. R1 = [SP];
  26. CC = R1 == R6;
  27. IF !CC JUMP 1f;
  28. R1 = [SP + 4];
  29. CC = R1 == R7;
  30. IF !CC JUMP 1f;
  31. /* UNLINK should:
  32. * assign SP to current FP
  33. * adjust SP by -8 bytes
  34. * restore RETS/FP from the stack
  35. */
  36. R4 = 0;
  37. RETS = R4;
  38. R0 = SP;
  39. UNLINK;
  40. /* Check new SP */
  41. R1 = SP;
  42. R1 += -0x8;
  43. CC = R1 == R0;
  44. IF !CC JUMP 1f;
  45. /* Check restored RETS */
  46. R1 = RETS;
  47. CC = R1 == R7;
  48. IF !CC JUMP 1f;
  49. /* Check restored FP */
  50. R1 = FP;
  51. CC = R1 == R6;
  52. IF !CC JUMP 1f;
  53. pass
  54. 1:
  55. fail