hwloop-bits.S 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # Blackfin testcase for HW Loops and user->super transitions
  2. # mach: bfin
  3. # sim: --environment operating
  4. #include "test.h"
  5. .include "testutils.inc"
  6. .macro check_hwloop_regs lc:req, lt:req, lb:req
  7. R0 = LC0;
  8. CC = R0 == \lc;
  9. IF !CC JUMP fail;
  10. R0 = LT0;
  11. CC = R0 == \lt;
  12. IF !CC JUMP fail;
  13. R0 = LB0;
  14. CC = R0 == \lb;
  15. IF !CC JUMP fail;
  16. R0 = LC1;
  17. CC = R0 == \lc;
  18. IF !CC JUMP fail;
  19. R0 = LT1;
  20. CC = R0 == \lt;
  21. IF !CC JUMP fail;
  22. R0 = LB1;
  23. CC = R0 == \lb;
  24. IF !CC JUMP fail;
  25. .endm
  26. start
  27. imm32 P0, EVT3;
  28. loadsym R0, exception;
  29. [P0] = R0;
  30. imm32 P0, EVT2;
  31. loadsym R0, nmi;
  32. [P0] = R0;
  33. loadsym R0, usermode;
  34. RETI = R0;
  35. # Set the LC/LB/LT up with LSB set
  36. # - Hardware clears LT LSB, but LB remains until we lower
  37. imm32 R6, 0xaaaa5555
  38. R4 = R6;
  39. BITCLR (R4, 0);
  40. imm32 R7, 0xaa55aa55
  41. R5 = R7;
  42. BITCLR (R5, 0);
  43. LC0 = R6;
  44. LT0 = R6;
  45. LB0 = R7;
  46. LC1 = R6;
  47. LT1 = R6;
  48. LB1 = R7;
  49. # Sanity check
  50. check_hwloop_regs R6, R4, R7
  51. RTI;
  52. usermode:
  53. # Make sure LSB has been cleared in LB
  54. check_hwloop_regs R6, R4, R5
  55. # Clear LSB in all LC/LT/LB
  56. LC0 = R4;
  57. LT0 = R4;
  58. LB0 = R5;
  59. LC1 = R4;
  60. LT1 = R4;
  61. LB1 = R5;
  62. # Now move back up to supervisor
  63. EXCPT 4;
  64. exception:
  65. # Make sure LSB is set in LB
  66. check_hwloop_regs R4, R4, R7
  67. # Clear the LSB and move up another supervisor level
  68. LC0 = R4;
  69. LT0 = R4;
  70. LB0 = R5;
  71. LC1 = R4;
  72. LT1 = R4;
  73. LB1 = R5;
  74. RAISE 2;
  75. nmi:
  76. # Make sure LSB stayed clear
  77. check_hwloop_regs R4, R4, R5
  78. dbg_pass
  79. fail:
  80. dbg_fail