stc.s 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. # Hitachi H8 testcase 'stc'
  2. # mach(): all
  3. # as(h8300): --defsym sim_cpu=0
  4. # as(h8300h): --defsym sim_cpu=1
  5. # as(h8300s): --defsym sim_cpu=2
  6. # as(h8sx): --defsym sim_cpu=3
  7. # ld(h8300h): -m h8300helf
  8. # ld(h8300s): -m h8300self
  9. # ld(h8sx): -m h8300sxelf
  10. .include "testutils.inc"
  11. .data
  12. byte_dest1:
  13. .byte 0
  14. .byte 0
  15. byte_dest2:
  16. .byte 0
  17. .byte 0
  18. byte_dest3:
  19. .byte 0
  20. .byte 0
  21. byte_dest4:
  22. .byte 0
  23. .byte 0
  24. byte_dest5:
  25. .byte 0
  26. .byte 0
  27. byte_dest6:
  28. .byte 0
  29. .byte 0
  30. byte_dest7:
  31. .byte 0
  32. .byte 0
  33. byte_dest8:
  34. .byte 0
  35. .byte 0
  36. byte_dest9:
  37. .byte 0
  38. .byte 0
  39. byte_dest10:
  40. .byte 0
  41. .byte 0
  42. byte_dest11:
  43. .byte 0
  44. .byte 0
  45. byte_dest12:
  46. .byte 0
  47. .byte 0
  48. start
  49. stc_ccr_reg8:
  50. set_grs_a5a5
  51. set_ccr_zero
  52. ldc #0xff, ccr ; test value
  53. stc ccr, r0h ; copy test value to r0h
  54. test_h_gr16 0xffa5 r0 ; ff in r0h, a5 in r0l
  55. .if (sim_cpu) ; h/s/sx
  56. test_h_gr32 0xa5a5ffa5 er0 ; ff in r0h, a5 everywhere else
  57. .endif
  58. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  59. test_gr_a5a5 2
  60. test_gr_a5a5 3
  61. test_gr_a5a5 4
  62. test_gr_a5a5 5
  63. test_gr_a5a5 6
  64. test_gr_a5a5 7
  65. .if (sim_cpu == h8300s || sim_cpu == h8sx) ; Earlier versions, no exr
  66. stc_exr_reg8:
  67. set_grs_a5a5
  68. set_ccr_zero
  69. ldc #0x87, exr ; set exr to 0x87
  70. stc exr, r0l ; retrieve and check exr value
  71. cmp.b #0x87, r0l
  72. beq .L21
  73. fail
  74. .L21:
  75. test_h_gr32 0xa5a5a587 er0 ; Register 0 modified by test procedure.
  76. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  77. test_gr_a5a5 2
  78. test_gr_a5a5 3
  79. test_gr_a5a5 4
  80. test_gr_a5a5 5
  81. test_gr_a5a5 6
  82. test_gr_a5a5 7
  83. stc_ccr_abs16:
  84. set_grs_a5a5
  85. set_ccr_zero
  86. ldc #0xff, ccr
  87. stc ccr, @byte_dest1:16 ; abs16 dest
  88. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  89. test_gr_a5a5 1
  90. test_gr_a5a5 2
  91. test_gr_a5a5 3
  92. test_gr_a5a5 4
  93. test_gr_a5a5 5
  94. test_gr_a5a5 6
  95. test_gr_a5a5 7
  96. stc_exr_abs16:
  97. set_grs_a5a5
  98. set_ccr_zero
  99. ldc #0x87, exr
  100. stc exr, @byte_dest2:16 ; abs16 dest
  101. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  102. test_gr_a5a5 1
  103. test_gr_a5a5 2
  104. test_gr_a5a5 3
  105. test_gr_a5a5 4
  106. test_gr_a5a5 5
  107. test_gr_a5a5 6
  108. test_gr_a5a5 7
  109. stc_ccr_abs32:
  110. set_grs_a5a5
  111. set_ccr_zero
  112. ldc #0xff, ccr
  113. stc ccr, @byte_dest3:32 ; abs32 dest
  114. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  115. test_gr_a5a5 1
  116. test_gr_a5a5 2
  117. test_gr_a5a5 3
  118. test_gr_a5a5 4
  119. test_gr_a5a5 5
  120. test_gr_a5a5 6
  121. test_gr_a5a5 7
  122. stc_exr_abs32:
  123. set_grs_a5a5
  124. set_ccr_zero
  125. ldc #0x87, exr
  126. stc exr, @byte_dest4:32 ; abs32 dest
  127. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  128. test_gr_a5a5 1
  129. test_gr_a5a5 2
  130. test_gr_a5a5 3
  131. test_gr_a5a5 4
  132. test_gr_a5a5 5
  133. test_gr_a5a5 6
  134. test_gr_a5a5 7
  135. stc_ccr_disp16:
  136. set_grs_a5a5
  137. set_ccr_zero
  138. mov #byte_dest5-1, er1
  139. ldc #0xff, ccr
  140. stc ccr, @(1:16,er1) ; disp16 dest (5)
  141. test_h_gr32 byte_dest5-1, er1 ; er1 still contains address
  142. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  143. test_gr_a5a5 2
  144. test_gr_a5a5 3
  145. test_gr_a5a5 4
  146. test_gr_a5a5 5
  147. test_gr_a5a5 6
  148. test_gr_a5a5 7
  149. stc_exr_disp16:
  150. set_grs_a5a5
  151. set_ccr_zero
  152. mov #byte_dest6+1, er1
  153. ldc #0x87, exr
  154. stc exr, @(-1:16,er1) ; disp16 dest (6)
  155. test_h_gr32 byte_dest6+1, er1 ; er1 still contains address
  156. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  157. test_gr_a5a5 2
  158. test_gr_a5a5 3
  159. test_gr_a5a5 4
  160. test_gr_a5a5 5
  161. test_gr_a5a5 6
  162. test_gr_a5a5 7
  163. stc_ccr_disp32:
  164. set_grs_a5a5
  165. set_ccr_zero
  166. mov #byte_dest7-1, er1
  167. ldc #0xff, ccr
  168. stc ccr, @(1:32,er1) ; disp32 dest (7)
  169. test_h_gr32 byte_dest7-1, er1 ; er1 still contains address
  170. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  171. test_gr_a5a5 2
  172. test_gr_a5a5 3
  173. test_gr_a5a5 4
  174. test_gr_a5a5 5
  175. test_gr_a5a5 6
  176. test_gr_a5a5 7
  177. stc_exr_disp32:
  178. set_grs_a5a5
  179. set_ccr_zero
  180. mov #byte_dest8+1, er1
  181. ldc #0x87, exr
  182. stc exr, @(-1:32,er1) ; disp16 dest (8)
  183. test_h_gr32 byte_dest8+1, er1 ; er1 still contains address
  184. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  185. test_gr_a5a5 3
  186. test_gr_a5a5 4
  187. test_gr_a5a5 5
  188. test_gr_a5a5 6
  189. test_gr_a5a5 7
  190. stc_ccr_predecr:
  191. set_grs_a5a5
  192. set_ccr_zero
  193. mov #byte_dest9+2, er1
  194. ldc #0xff, ccr
  195. stc ccr, @-er1 ; predecr dest (9)
  196. test_h_gr32 byte_dest9 er1 ; er1 still contains address
  197. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  198. test_gr_a5a5 2
  199. test_gr_a5a5 3
  200. test_gr_a5a5 4
  201. test_gr_a5a5 5
  202. test_gr_a5a5 6
  203. test_gr_a5a5 7
  204. stc_exr_predecr:
  205. set_grs_a5a5
  206. set_ccr_zero
  207. mov #byte_dest10+2, er1
  208. ldc #0x87, exr
  209. stc exr, @-er1 ; predecr dest (10)
  210. test_h_gr32 byte_dest10, er1 ; er1 still contains address
  211. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  212. test_gr_a5a5 2
  213. test_gr_a5a5 3
  214. test_gr_a5a5 4
  215. test_gr_a5a5 5
  216. test_gr_a5a5 6
  217. test_gr_a5a5 7
  218. stc_ccr_ind:
  219. set_grs_a5a5
  220. set_ccr_zero
  221. mov #byte_dest11, er1
  222. ldc #0xff, ccr
  223. stc ccr, @er1 ; postinc dest (11)
  224. test_h_gr32 byte_dest11, er1 ; er1 still contains address
  225. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  226. test_gr_a5a5 2
  227. test_gr_a5a5 3
  228. test_gr_a5a5 4
  229. test_gr_a5a5 5
  230. test_gr_a5a5 6
  231. test_gr_a5a5 7
  232. stc_exr_ind:
  233. set_grs_a5a5
  234. set_ccr_zero
  235. mov #byte_dest12, er1
  236. ldc #0x87, exr
  237. stc exr, @er1, exr ; postinc dest (12)
  238. test_h_gr32 byte_dest12, er1 ; er1 still contains address
  239. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  240. test_gr_a5a5 2
  241. test_gr_a5a5 3
  242. test_gr_a5a5 4
  243. test_gr_a5a5 5
  244. test_gr_a5a5 6
  245. test_gr_a5a5 7
  246. .endif
  247. .if (sim_cpu == h8sx) ; New vbr and sbr registers for h8sx
  248. stc_sbr_reg:
  249. set_grs_a5a5
  250. set_ccr_zero
  251. mov #0xaaaaaaaa, er0
  252. ldc er0, sbr ; set sbr to 0xaaaaaaaa
  253. stc sbr, er1 ; retreive and check sbr value
  254. test_h_gr32 0xaaaaaaaa er1
  255. test_h_gr32 0xaaaaaaaa er0 ; Register 0 modified by test procedure.
  256. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  257. test_gr_a5a5 3
  258. test_gr_a5a5 4
  259. test_gr_a5a5 5
  260. test_gr_a5a5 6
  261. test_gr_a5a5 7
  262. stc_vbr_reg:
  263. set_grs_a5a5
  264. set_ccr_zero
  265. mov #0xaaaaaaaa, er0
  266. ldc er0, vbr ; set sbr to 0xaaaaaaaa
  267. stc vbr, er1 ; retreive and check sbr value
  268. test_h_gr32 0xaaaaaaaa er1
  269. test_h_gr32 0xaaaaaaaa er0 ; Register 0 modified by test procedure.
  270. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  271. test_gr_a5a5 3
  272. test_gr_a5a5 4
  273. test_gr_a5a5 5
  274. test_gr_a5a5 6
  275. test_gr_a5a5 7
  276. check_results:
  277. ;; Now check results
  278. mov @byte_dest1, r0h
  279. cmp.b #0xff, r0h
  280. beq .L1
  281. fail
  282. .L1: mov @byte_dest2, r0h
  283. cmp.b #0x87, r0h
  284. beq .L2
  285. fail
  286. .L2: mov @byte_dest3, r0h
  287. cmp.b #0xff, r0h
  288. beq .L3
  289. fail
  290. .L3: mov @byte_dest4, r0h
  291. cmp.b #0x87, r0h
  292. beq .L4
  293. fail
  294. .L4: mov @byte_dest5, r0h
  295. cmp.b #0xff, r0h
  296. beq .L5
  297. fail
  298. .L5: mov @byte_dest6, r0h
  299. cmp.b #0x87, r0h
  300. beq .L6
  301. fail
  302. .L6: mov @byte_dest7, r0h
  303. cmp.b #0xff, r0h
  304. beq .L7
  305. fail
  306. .L7: mov @byte_dest8, r0h
  307. cmp.b #0x87, r0h
  308. beq .L8
  309. fail
  310. .L8: mov @byte_dest9, r0h
  311. cmp.b #0xff, r0h
  312. beq .L9
  313. fail
  314. .L9: mov @byte_dest10, r0h
  315. cmp.b #0x87, r0h
  316. beq .L10
  317. fail
  318. .L10: mov @byte_dest11, r0h
  319. cmp.b #0xff, r0h
  320. beq .L11
  321. fail
  322. .L11: mov @byte_dest12, r0h
  323. cmp.b #0x87, r0h
  324. beq .L12
  325. fail
  326. .L12:
  327. .endif
  328. pass
  329. exit 0