loop.s 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. # sh testcase for loop control
  2. # mach: shdsp
  3. # as(shdsp): -defsym sim_cpu=1 -dsp
  4. .include "testutils.inc"
  5. start
  6. loop1:
  7. set_grs_a5a5
  8. ldrs Loop1_start0+8
  9. ldre Loop1_start0+4
  10. setrc #5
  11. Loop1_start0:
  12. add #1, r1 ! Before loop
  13. # Loop should execute one instruction five times.
  14. Loop1_begin:
  15. add #1, r1 ! Within loop
  16. Loop1_end:
  17. add #2, r1 ! After loop
  18. # r1 = 0xa5a5a5a5 + 8 (five in loop, two after, one before)
  19. assertreg 0xa5a5a5a5+8, r1
  20. set_greg 0xa5a5a5a5, r0
  21. set_greg 0xa5a5a5a5, r1
  22. test_grs_a5a5
  23. loop2:
  24. set_grs_a5a5
  25. ldrs Loop2_start0+6
  26. ldre Loop2_start0+4
  27. setrc #5
  28. Loop2_start0:
  29. add #1, r1 ! Before loop
  30. # Loop should execute two instructions five times.
  31. Loop2_begin:
  32. add #1, r1 ! Within loop
  33. add #1, r1 ! Within loop
  34. Loop2_end:
  35. add #3, r1 ! After loop
  36. # r1 = 0xa5a5a5a5 + 14 (ten in loop, three after, one before)
  37. assertreg 0xa5a5a5a5+14, r1
  38. set_greg 0xa5a5a5a5, r0
  39. set_greg 0xa5a5a5a5, r1
  40. test_grs_a5a5
  41. loop3:
  42. set_grs_a5a5
  43. ldrs Loop3_start0+4
  44. ldre Loop3_start0+4
  45. setrc #5
  46. Loop3_start0:
  47. add #1, r1 ! Before loop
  48. # Loop should execute three instructions five times.
  49. Loop3_begin:
  50. add #1, r1 ! Within loop
  51. add #1, r1 ! Within loop
  52. add #1, r1 ! Within loop
  53. Loop3_end:
  54. add #2, r1 ! After loop
  55. # r1 = 0xa5a5a5a5 + 18 (fifteen in loop, two after, one before)
  56. assertreg 0xa5a5a5a5+18, r1
  57. set_greg 0xa5a5a5a5, r0
  58. set_greg 0xa5a5a5a5, r1
  59. test_grs_a5a5
  60. loop4:
  61. set_grs_a5a5
  62. ldrs Loop4_begin
  63. ldre Loop4_last3+4
  64. setrc #5
  65. add #1, r1 ! Before loop
  66. # Loop should execute four instructions five times.
  67. Loop4_begin:
  68. Loop4_last3:
  69. add #1, r1 ! Within loop
  70. Loop4_last2:
  71. add #1, r1 ! Within loop
  72. Loop4_last1:
  73. add #1, r1 ! Within loop
  74. Loop4_last:
  75. add #1, r1 ! Within loop
  76. Loop4_end:
  77. add #2, r1 ! After loop
  78. # r1 = 0xa5a5a5a5 + 23 (20 in loop, two after, one before)
  79. assertreg 0xa5a5a5a5+23, r1
  80. set_greg 0xa5a5a5a5, r0
  81. set_greg 0xa5a5a5a5, r1
  82. test_grs_a5a5
  83. loop5:
  84. set_grs_a5a5
  85. ldrs Loop5_begin
  86. ldre Loop5_last3+4
  87. setrc #5
  88. add #1, r1 ! Before loop
  89. # Loop should execute five instructions five times.
  90. Loop5_begin:
  91. add #1, r1 ! Within loop
  92. Loop5_last3:
  93. add #1, r1 ! Within loop
  94. Loop5_last2:
  95. add #1, r1 ! Within loop
  96. Loop5_last1:
  97. add #1, r1 ! Within loop
  98. Loop5_last:
  99. add #1, r1 ! Within loop
  100. Loop5_end:
  101. add #2, r1 ! After loop
  102. # r1 = 0xa5a5a5a5 + 28 (25 in loop, two after, one before)
  103. assertreg 0xa5a5a5a5+28, r1
  104. set_greg 0xa5a5a5a5, r0
  105. set_greg 0xa5a5a5a5, r1
  106. test_grs_a5a5
  107. loopn:
  108. set_grs_a5a5
  109. ldrs Loopn_begin
  110. ldre Loopn_last3+4
  111. setrc #5
  112. add #1, r1 ! Before loop
  113. # Loop should execute n instructions five times.
  114. Loopn_begin:
  115. add #1, r1 ! Within loop
  116. add #1, r1 ! Within loop
  117. add #1, r1 ! Within loop
  118. add #1, r1 ! Within loop
  119. add #1, r1 ! Within loop
  120. add #1, r1 ! Within loop
  121. add #1, r1 ! Within loop
  122. add #1, r1 ! Within loop
  123. Loopn_last3:
  124. add #1, r1 ! Within loop
  125. Loopn_last2:
  126. add #1, r1 ! Within loop
  127. Loopn_last1:
  128. add #1, r1 ! Within loop
  129. Loopn_last:
  130. add #1, r1 ! Within loop
  131. Loopn_end:
  132. add #3, r1 ! After loop
  133. # r1 = 0xa5a5a5a5 + 64 (60 in loop, three after, one before)
  134. assertreg 0xa5a5a5a5+64, r1
  135. set_greg 0xa5a5a5a5, r0
  136. set_greg 0xa5a5a5a5, r1
  137. test_grs_a5a5
  138. loop1e:
  139. set_grs_a5a5
  140. ldrs Loop1e_begin
  141. ldre Loop1e_last
  142. ldrc #5
  143. add #1, r1 ! Before loop
  144. # Loop should execute one instruction five times.
  145. Loop1e_begin:
  146. Loop1e_last:
  147. add #1, r1 ! Within loop
  148. Loop1e_end:
  149. add #2, r1 ! After loop
  150. # r1 = 0xa5a5a5a5 + 8 (five in loop, two after, one before)
  151. assertreg 0xa5a5a5a5+8, r1
  152. set_greg 0xa5a5a5a5, r0
  153. set_greg 0xa5a5a5a5, r1
  154. test_grs_a5a5
  155. loop2e:
  156. set_grs_a5a5
  157. ldrs Loop2e_begin
  158. ldre Loop2e_last
  159. ldrc #5
  160. add #1, r1 ! Before loop
  161. # Loop should execute two instructions five times.
  162. Loop2e_begin:
  163. add #1, r1 ! Within loop
  164. Loop2e_last:
  165. add #1, r1 ! Within loop
  166. Loop2e_end:
  167. add #2, r1 ! After loop
  168. # r1 = 0xa5a5a5a5 + 13 (ten in loop, two after, one before)
  169. assertreg 0xa5a5a5a5+13, r1
  170. set_greg 0xa5a5a5a5, r0
  171. set_greg 0xa5a5a5a5, r1
  172. test_grs_a5a5
  173. loop3e:
  174. set_grs_a5a5
  175. ldrs Loop3e_begin
  176. ldre Loop3e_last
  177. ldrc #5
  178. add #1, r1 ! Before loop
  179. # Loop should execute three instructions five times.
  180. Loop3e_begin:
  181. add #1, r1 ! Within loop
  182. add #1, r1 ! Within loop
  183. Loop3e_last:
  184. add #1, r1 ! Within loop
  185. Loop3e_end:
  186. add #2, r1 ! After loop
  187. # r1 = 0xa5a5a5a5 + 18 (fifteen in loop, two after, one before)
  188. assertreg 0xa5a5a5a5+18, r1
  189. set_greg 0xa5a5a5a5, r0
  190. set_greg 0xa5a5a5a5, r1
  191. test_grs_a5a5
  192. loop4e:
  193. set_grs_a5a5
  194. ldrs Loop4e_begin
  195. ldre Loop4e_last
  196. ldrc #5
  197. add #1, r1 ! Before loop
  198. # Loop should execute four instructions five times.
  199. Loop4e_begin:
  200. add #1, r1 ! Within loop
  201. add #1, r1 ! Within loop
  202. add #1, r1 ! Within loop
  203. Loop4e_last:
  204. add #1, r1 ! Within loop
  205. Loop4e_end:
  206. add #2, r1 ! After loop
  207. # r1 = 0xa5a5a5a5 + 23 (twenty in loop, two after, one before)
  208. assertreg 0xa5a5a5a5+23, r1
  209. set_greg 0xa5a5a5a5, r0
  210. set_greg 0xa5a5a5a5, r1
  211. test_grs_a5a5
  212. loop5e:
  213. set_grs_a5a5
  214. ldrs Loop5e_begin
  215. ldre Loop5e_last
  216. ldrc #5
  217. add #1, r1 ! Before loop
  218. # Loop should execute five instructions five times.
  219. Loop5e_begin:
  220. add #1, r1 ! Within loop
  221. add #1, r1 ! Within loop
  222. add #1, r1 ! Within loop
  223. add #1, r1 ! Within loop
  224. Loop5e_last:
  225. add #1, r1 ! Within loop
  226. Loop5e_end:
  227. add #2, r1 ! After loop
  228. # r1 = 0xa5a5a5a5 + 28 (twenty five in loop, two after, one before)
  229. assertreg 0xa5a5a5a5+28, r1
  230. set_greg 0xa5a5a5a5, r0
  231. set_greg 0xa5a5a5a5, r1
  232. test_grs_a5a5
  233. loop_n_e:
  234. set_grs_a5a5
  235. ldrs Loop_n_e_begin
  236. ldre Loop_n_e_last
  237. ldrc #5
  238. add #1, r1 ! Before loop
  239. # Loop should execute n instructions five times.
  240. Loop_n_e_begin:
  241. add #1, r1 ! Within loop
  242. add #1, r1 ! Within loop
  243. add #1, r1 ! Within loop
  244. add #1, r1 ! Within loop
  245. add #1, r1 ! Within loop
  246. add #1, r1 ! Within loop
  247. add #1, r1 ! Within loop
  248. add #1, r1 ! Within loop
  249. Loop_n_e_last:
  250. add #1, r1 ! Within loop
  251. Loop_n_e_end:
  252. add #2, r1 ! After loop
  253. # r1 = 0xa5a5a5a5 + 48 (forty five in loop, two after, one before)
  254. assertreg 0xa5a5a5a5+48, r1
  255. set_greg 0xa5a5a5a5, r0
  256. set_greg 0xa5a5a5a5, r1
  257. test_grs_a5a5
  258. pass
  259. exit 0