cache.ms 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. # mach: frv fr500 fr550
  2. # sim: --memory-region 0xff000000,4 --memory-region 0xfe000000,00404000
  3. # xfail: "crashes with bad write" *-*
  4. ; Exit with return code
  5. .macro exit rc
  6. setlos.p #1,gr7
  7. setlos \rc,gr8
  8. tira gr0,#0
  9. .endm
  10. ; Pass the test case
  11. .macro pass
  12. pass:
  13. setlos.p #5,gr10
  14. setlos #1,gr8
  15. setlos #5,gr7
  16. sethi.p %hi(passmsg),gr9
  17. setlo %lo(passmsg),gr9
  18. tira gr0,#0
  19. exit #0
  20. .endm
  21. ; Fail the testcase
  22. .macro fail
  23. fail\@:
  24. setlos.p #5,gr10
  25. setlos #1,gr8
  26. setlos #5,gr7
  27. sethi.p %hi(failmsg),gr9
  28. setlo %lo(failmsg),gr9
  29. tira gr0,#0
  30. exit #1
  31. .endm
  32. .data
  33. failmsg:
  34. .ascii "fail\n"
  35. passmsg:
  36. .ascii "pass\n"
  37. .text
  38. .global _start
  39. _start:
  40. movsg hsr0,gr10 ; enable insn and data caches
  41. sethi.p 0xc800,gr11 ; in copy-back mode
  42. setlo 0x0000,gr11
  43. or gr10,gr11,gr10
  44. movgs gr10,hsr0
  45. sethi.p 0x7,sp
  46. setlo 0x0000,sp
  47. ; fill the cache
  48. sethi.p %hi(done1),gr10
  49. setlo %lo(done1),gr10
  50. movgs gr10,lr
  51. setlos.p 0x1000,gr10
  52. setlos 0x0,gr11
  53. movgs gr10,lcr
  54. write1: st.p gr11,@(sp,gr11)
  55. addi.p gr11,4,gr11
  56. bctrlr.p 1,0
  57. bra write1
  58. done1:
  59. ; read it back
  60. sethi.p %hi(done2),gr10
  61. setlo %lo(done2),gr10
  62. movgs gr10,lr
  63. setlos.p 0x1000,gr10
  64. setlos 0x0,gr11
  65. movgs gr10,lcr
  66. read1: ld @(sp,gr11),gr12
  67. cmp gr11,gr12,icc0
  68. bne icc0,1,fail
  69. addi.p gr11,4,gr11
  70. bctrlr.p 1,0
  71. bra read1
  72. done2:
  73. ; fill the cache twice
  74. sethi.p %hi(done3),gr10
  75. setlo %lo(done3),gr10
  76. movgs gr10,lr
  77. setlos.p 0x2000,gr10
  78. setlos 0x0,gr11
  79. movgs gr10,lcr
  80. write3: st.p gr11,@(sp,gr11)
  81. addi.p gr11,4,gr11
  82. bctrlr.p 1,0
  83. bra write3
  84. done3:
  85. ; read it back
  86. sethi.p %hi(done4),gr10
  87. setlo %lo(done4),gr10
  88. movgs gr10,lr
  89. setlos.p 0x2000,gr10
  90. setlos 0x0,gr11
  91. movgs gr10,lcr
  92. read4: ld @(sp,gr11),gr12
  93. cmp gr11,gr12,icc0
  94. bne icc0,1,fail
  95. addi.p gr11,4,gr11
  96. bctrlr.p 1,0
  97. bra read4
  98. done4:
  99. ; read it back in reverse
  100. sethi.p %hi(done5),gr10
  101. setlo %lo(done5),gr10
  102. movgs gr10,lr
  103. setlos.p 0x2000,gr10
  104. setlos 0x7ffc,gr11
  105. movgs gr10,lcr
  106. read5: ld @(sp,gr11),gr12
  107. cmp gr11,gr12,icc0
  108. bne icc0,1,fail
  109. subi.p gr11,4,gr11
  110. bctrlr.p 1,0
  111. bra read5
  112. done5:
  113. ; access data and insns in non-cache areas
  114. sethi.p 0x8038,gr11 ; bctrlr 0,0
  115. setlo 0x2000,gr11
  116. sethi.p 0xff00,gr10 ; documented area
  117. setlo 0x0000,gr10
  118. sti gr11,@(gr10,0)
  119. jmpl @(gr10,gr0)
  120. ; enable RAM mode
  121. movsg hsr0,gr10
  122. sethi.p 0x0040,gr12
  123. setlo 0x0000,gr12
  124. or gr10,gr12,gr10
  125. movgs gr10,hsr0
  126. sethi.p 0xfe00,gr10 ; documented area
  127. setlo 0x0400,gr10
  128. sti gr11,@(gr10,0)
  129. jmpl @(gr10,gr0)
  130. sethi.p 0xfe40,gr10 ; documented area
  131. setlo 0x0400,gr10
  132. sti gr11,@(gr10,0)
  133. dcf @(gr10,gr0)
  134. jmpl @(gr10,gr0)
  135. sethi.p 0x0007,gr10 ; non RAM area
  136. setlo 0x0000,gr10
  137. sti gr11,@(gr10,0)
  138. jmpl @(gr10,gr0)
  139. sethi.p 0xfe00,gr10 ; insn RAM area
  140. setlo 0x0000,gr10
  141. sti gr11,@(gr10,0)
  142. jmpl @(gr10,gr0)
  143. sethi.p 0xfe40,gr10 ; data RAM area
  144. setlo 0x0000,gr10
  145. sti gr11,@(gr10,0)
  146. dcf @(gr10,gr0)
  147. jmpl @(gr10,gr0)
  148. pass
  149. fail:
  150. fail