stk4.s 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // load up some registers.
  2. // setup up a global pointer table and load some state.
  3. // save the machine state and clear some of the values.
  4. // then restore and assert some of the values to ensure that
  5. // we maintain consitent machine state.
  6. # mach: bfin
  7. .include "testutils.inc"
  8. start
  9. R0 = 1;
  10. R1 = 2;
  11. R2 = 3;
  12. R3 = -7;
  13. R4 = 4;
  14. R5 = 5;
  15. R6 = 6;
  16. R7 = 7;
  17. loadsym P0, a;
  18. P1.L = 0x1000;
  19. _DBG P0;
  20. _DBG P1;
  21. SP = P0;
  22. FP = P0;
  23. CALL try;
  24. P1 = [ P0 ++ ];
  25. P2 = [ P0 ++ ];
  26. P0 += 4;
  27. P4 = [ P0 ++ ];
  28. P5 = [ P0 ++ ];
  29. [ -- SP ] = ( R7:0, P5:0 );
  30. _DBG SP;
  31. _DBG FP;
  32. R0 = R0 ^ R0;
  33. R1 = R1 ^ R1;
  34. R2 = R2 ^ R2;
  35. R4 = R4 ^ R4;
  36. R5 = R5 ^ R5;
  37. R6 = R6 ^ R6;
  38. R7 = R7 ^ R7;
  39. ( R7:0, P5:0 ) = [ SP ++ ];
  40. DBGA ( R0.L , 1 );
  41. DBGA ( R1.L , 2 );
  42. DBGA ( R2.L , 3 );
  43. DBGA ( R3.L , 0xfff9 );
  44. DBGA ( R4.L , 4 );
  45. DBGA ( R5.L , 5 );
  46. DBGA ( R6.L , 6 );
  47. DBGA ( R7.L , 7 );
  48. R0 = SP;
  49. loadsym R1, a;
  50. CC = R0 == R1;
  51. IF !CC JUMP abrt;
  52. R0 = FP;
  53. CC = R0 == R1;
  54. CC = R0 == R1;
  55. IF !CC JUMP abrt;
  56. pass
  57. abrt:
  58. fail;
  59. try:
  60. LINK 0;
  61. [ -- SP ] = ( R7:0, P5:0 );
  62. R7 = 0x1234 (X);
  63. [ -- SP ] = R7;
  64. CALL bar;
  65. R7 = [ SP ++ ];
  66. ( R7:0, P5:0 ) = [ SP ++ ];
  67. UNLINK;
  68. RTS;
  69. bar:
  70. LINK 0;
  71. [ -- SP ] = ( R7:0, P5:0 );
  72. R0 = [ FP + 8 ];
  73. DBGA ( R0.L , 0x1234 );
  74. CALL foo;
  75. ( R7:0, P5:0 ) = [ SP ++ ];
  76. UNLINK;
  77. RTS;
  78. foo:
  79. DBGA ( R0.L , 0x1234 );
  80. RTS;
  81. .data
  82. _gptab:
  83. .dw 0x200
  84. .dw 0x000
  85. .dw 0x300
  86. .dw 0x400
  87. .dw 0x500
  88. .dw 0x600
  89. .space (0x100)
  90. a:
  91. .dw 1
  92. .dw 2
  93. .dw 3
  94. .dw 4
  95. .dw 5
  96. .dw 6
  97. .dw 7
  98. .dw 8
  99. .dw 9
  100. .dw 0xa