ldc.s 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. # Hitachi H8 testcase 'ldc'
  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_pre:
  13. .byte 0
  14. byte_src:
  15. .byte 0xff
  16. byte_post:
  17. .byte 0
  18. start
  19. ldc_imm8_ccr:
  20. set_grs_a5a5
  21. set_ccr_zero
  22. ldc #0xff, ccr ; set all ccr flags high, immediate operand
  23. bcs .L1 ; carry flag set?
  24. fail
  25. .L1: bvs .L2 ; overflow flag set?
  26. fail
  27. .L2: beq .L3 ; zero flag set?
  28. fail
  29. .L3: bmi .L4 ; neg flag set?
  30. fail
  31. .L4:
  32. ldc #0, ccr ; set all ccr flags low, immediate operand
  33. bcc .L5 ; carry flag clear?
  34. fail
  35. .L5: bvc .L6 ; overflow flag clear?
  36. fail
  37. .L6: bne .L7 ; zero flag clear?
  38. fail
  39. .L7: bpl .L8 ; neg flag clear?
  40. fail
  41. .L8:
  42. test_cc_clear
  43. test_grs_a5a5
  44. ldc_reg8_ccr:
  45. set_grs_a5a5
  46. set_ccr_zero
  47. mov #0xff, r0h
  48. ldc r0h, ccr ; set all ccr flags high, reg operand
  49. bcs .L11 ; carry flag set?
  50. fail
  51. .L11: bvs .L12 ; overflow flag set?
  52. fail
  53. .L12: beq .L13 ; zero flag set?
  54. fail
  55. .L13: bmi .L14 ; neg flag set?
  56. fail
  57. .L14:
  58. mov #0, r0h
  59. ldc r0h, ccr ; set all ccr flags low, reg operand
  60. bcc .L15 ; carry flag clear?
  61. fail
  62. .L15: bvc .L16 ; overflow flag clear?
  63. fail
  64. .L16: bne .L17 ; zero flag clear?
  65. fail
  66. .L17: bpl .L18 ; neg flag clear?
  67. fail
  68. .L18:
  69. test_cc_clear
  70. test_h_gr16 0x00a5 r0 ; Register 0 modified by test procedure.
  71. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  72. test_gr_a5a5 2
  73. test_gr_a5a5 3
  74. test_gr_a5a5 4
  75. test_gr_a5a5 5
  76. test_gr_a5a5 6
  77. test_gr_a5a5 7
  78. .if (sim_cpu == h8300s || sim_cpu == h8sx) ; Earlier versions, no exr
  79. ldc_imm8_exr:
  80. set_grs_a5a5
  81. set_ccr_zero
  82. ldc #0, exr
  83. ldc #0x87, exr ; set exr to 0x87
  84. stc exr, r0l ; retrieve and check exr value
  85. cmp.b #0x87, r0l
  86. beq .L19
  87. fail
  88. .L19:
  89. test_h_gr16 0xa587 r0 ; Register 0 modified by test procedure.
  90. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  91. test_gr_a5a5 2
  92. test_gr_a5a5 3
  93. test_gr_a5a5 4
  94. test_gr_a5a5 5
  95. test_gr_a5a5 6
  96. test_gr_a5a5 7
  97. ldc_reg8_exr:
  98. set_grs_a5a5
  99. set_ccr_zero
  100. ldc #0, exr
  101. mov #0x87, r0h
  102. ldc r0h, exr ; set exr to 0x87
  103. stc exr, r0l ; retrieve and check exr value
  104. cmp.b #0x87, r0l
  105. beq .L21
  106. fail
  107. .L21:
  108. test_h_gr16 0x8787 r0 ; Register 0 modified by test procedure.
  109. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  110. test_gr_a5a5 2
  111. test_gr_a5a5 3
  112. test_gr_a5a5 4
  113. test_gr_a5a5 5
  114. test_gr_a5a5 6
  115. test_gr_a5a5 7
  116. ldc_abs16_ccr:
  117. set_grs_a5a5
  118. set_ccr_zero
  119. ldc @byte_src:16, ccr ; abs16 src
  120. stc ccr, r0l ; copy into general reg
  121. test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
  122. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  123. test_gr_a5a5 2
  124. test_gr_a5a5 3
  125. test_gr_a5a5 4
  126. test_gr_a5a5 5
  127. test_gr_a5a5 6
  128. test_gr_a5a5 7
  129. ldc_abs16_exr:
  130. set_grs_a5a5
  131. set_ccr_zero
  132. ldc #0, exr
  133. ldc @byte_src:16, exr ; abs16 src
  134. stc exr, r0l ; copy into general reg
  135. test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
  136. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  137. test_gr_a5a5 2
  138. test_gr_a5a5 3
  139. test_gr_a5a5 4
  140. test_gr_a5a5 5
  141. test_gr_a5a5 6
  142. test_gr_a5a5 7
  143. ldc_abs32_ccr:
  144. set_grs_a5a5
  145. set_ccr_zero
  146. ldc @byte_src:32, ccr ; abs32 src
  147. stc ccr, r0l ; copy into general reg
  148. test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
  149. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  150. test_gr_a5a5 2
  151. test_gr_a5a5 3
  152. test_gr_a5a5 4
  153. test_gr_a5a5 5
  154. test_gr_a5a5 6
  155. test_gr_a5a5 7
  156. ldc_abs32_exr:
  157. set_grs_a5a5
  158. set_ccr_zero
  159. ldc #0, exr
  160. ldc @byte_src:32, exr ; abs32 src
  161. stc exr, r0l ; copy into general reg
  162. test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
  163. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  164. test_gr_a5a5 2
  165. test_gr_a5a5 3
  166. test_gr_a5a5 4
  167. test_gr_a5a5 5
  168. test_gr_a5a5 6
  169. test_gr_a5a5 7
  170. ldc_disp16_ccr:
  171. set_grs_a5a5
  172. set_ccr_zero
  173. mov #byte_pre, er1
  174. ldc @(1:16, er1), ccr ; disp16 src
  175. stc ccr, r0l ; copy into general reg
  176. test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
  177. test_h_gr32 byte_pre, er1 ; er1 still contains address
  178. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  179. test_gr_a5a5 3
  180. test_gr_a5a5 4
  181. test_gr_a5a5 5
  182. test_gr_a5a5 6
  183. test_gr_a5a5 7
  184. ldc_disp16_exr:
  185. set_grs_a5a5
  186. set_ccr_zero
  187. ldc #0, exr
  188. mov #byte_post, er1
  189. ldc @(-1:16, er1), exr ; disp16 src
  190. stc exr, r0l ; copy into general reg
  191. test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
  192. test_h_gr32 byte_post, er1 ; er1 still contains address
  193. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  194. test_gr_a5a5 3
  195. test_gr_a5a5 4
  196. test_gr_a5a5 5
  197. test_gr_a5a5 6
  198. test_gr_a5a5 7
  199. ldc_disp32_ccr:
  200. set_grs_a5a5
  201. set_ccr_zero
  202. mov #byte_pre, er1
  203. ldc @(1:32, er1), ccr ; disp32 src
  204. stc ccr, r0l ; copy into general reg
  205. test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
  206. test_h_gr32 byte_pre, er1 ; er1 still contains address
  207. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  208. test_gr_a5a5 3
  209. test_gr_a5a5 4
  210. test_gr_a5a5 5
  211. test_gr_a5a5 6
  212. test_gr_a5a5 7
  213. ldc_disp32_exr:
  214. set_grs_a5a5
  215. set_ccr_zero
  216. ldc #0, exr
  217. mov #byte_post, er1
  218. ldc @(-1:32, er1), exr ; disp16 src
  219. stc exr, r0l ; copy into general reg
  220. test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
  221. test_h_gr32 byte_post, er1 ; er1 still contains address
  222. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  223. test_gr_a5a5 3
  224. test_gr_a5a5 4
  225. test_gr_a5a5 5
  226. test_gr_a5a5 6
  227. test_gr_a5a5 7
  228. ldc_postinc_ccr:
  229. set_grs_a5a5
  230. set_ccr_zero
  231. mov #byte_src, er1
  232. ldc @er1+, ccr ; postinc src
  233. stc ccr, r0l ; copy into general reg
  234. test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
  235. test_h_gr32 byte_src+2, er1 ; er1 still contains address
  236. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  237. test_gr_a5a5 3
  238. test_gr_a5a5 4
  239. test_gr_a5a5 5
  240. test_gr_a5a5 6
  241. test_gr_a5a5 7
  242. ldc_postinc_exr:
  243. set_grs_a5a5
  244. set_ccr_zero
  245. ldc #0, exr
  246. mov #byte_src, er1
  247. ldc @er1+, exr ; postinc src
  248. stc exr, r0l ; copy into general reg
  249. test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
  250. test_h_gr32 byte_src+2, er1 ; er1 still contains address
  251. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  252. test_gr_a5a5 3
  253. test_gr_a5a5 4
  254. test_gr_a5a5 5
  255. test_gr_a5a5 6
  256. test_gr_a5a5 7
  257. ldc_ind_ccr:
  258. set_grs_a5a5
  259. set_ccr_zero
  260. mov #byte_src, er1
  261. ldc @er1, ccr ; postinc src
  262. stc ccr, r0l ; copy into general reg
  263. test_h_gr32 0xa5a5a5ff er0 ; ff in r0l, a5 elsewhere.
  264. test_h_gr32 byte_src, er1 ; er1 still contains address
  265. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  266. test_gr_a5a5 3
  267. test_gr_a5a5 4
  268. test_gr_a5a5 5
  269. test_gr_a5a5 6
  270. test_gr_a5a5 7
  271. ldc_ind_exr:
  272. set_grs_a5a5
  273. set_ccr_zero
  274. ldc #0, exr
  275. mov #byte_src, er1
  276. ldc @er1, exr ; postinc src
  277. stc exr, r0l ; copy into general reg
  278. test_h_gr32 0xa5a5a587 er0 ; 87 in r0l, a5 elsewhere.
  279. test_h_gr32 byte_src, er1 ; er1 still contains address
  280. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  281. test_gr_a5a5 3
  282. test_gr_a5a5 4
  283. test_gr_a5a5 5
  284. test_gr_a5a5 6
  285. test_gr_a5a5 7
  286. .endif
  287. .if (sim_cpu == h8sx) ; New vbr and sbr registers for h8sx
  288. ldc_reg_sbr:
  289. set_grs_a5a5
  290. set_ccr_zero
  291. mov #0xaaaaaaaa, er0
  292. ldc er0, sbr ; set sbr to 0xaaaaaaaa
  293. stc sbr, er1 ; retreive and check sbr value
  294. test_h_gr32 0xaaaaaaaa er1
  295. test_h_gr32 0xaaaaaaaa er0 ; Register 0 modified by test procedure.
  296. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  297. test_gr_a5a5 3
  298. test_gr_a5a5 4
  299. test_gr_a5a5 5
  300. test_gr_a5a5 6
  301. test_gr_a5a5 7
  302. ldc_reg_vbr:
  303. set_grs_a5a5
  304. set_ccr_zero
  305. mov #0xaaaaaaaa, er0
  306. ldc er0, vbr ; set sbr to 0xaaaaaaaa
  307. stc vbr, er1 ; retreive and check sbr value
  308. test_h_gr32 0xaaaaaaaa er1
  309. test_h_gr32 0xaaaaaaaa er0 ; Register 0 modified by test procedure.
  310. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  311. test_gr_a5a5 3
  312. test_gr_a5a5 4
  313. test_gr_a5a5 5
  314. test_gr_a5a5 6
  315. test_gr_a5a5 7
  316. .endif
  317. pass
  318. exit 0