ldm.s 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. # Hitachi H8 testcase 'ldm', 'stm'
  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. .align 4
  13. _stack: .long 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0
  14. .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  15. .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  16. .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  17. _stack_top:
  18. start
  19. .if (sim_cpu == h8300s || sim_cpu == h8sx) ; Earlier versions, no exr
  20. stm_2reg:
  21. set_grs_a5a5
  22. mov #_stack_top, er7
  23. mov #2, er2
  24. mov #3, er3
  25. set_ccr_zero
  26. stm er2-er3, @-sp
  27. test_cc_clear
  28. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  29. test_gr_a5a5 1
  30. test_h_gr32 2 er2
  31. test_h_gr32 3 er3
  32. test_gr_a5a5 4
  33. test_gr_a5a5 5
  34. test_gr_a5a5 6
  35. test_h_gr32 _stack_top-8, er7
  36. mov @_stack_top-4, er0
  37. cmp #2, er0
  38. bne fail1
  39. mov @_stack_top-8, er0
  40. cmp #3, er0
  41. bne fail1
  42. mov @_stack_top-12, er0
  43. cmp #0, er0
  44. bne fail1
  45. stm_3reg:
  46. set_grs_a5a5
  47. mov #_stack_top, er7
  48. mov #4, er4
  49. mov #5, er5
  50. mov #6, er6
  51. set_ccr_zero
  52. stm er4-er6, @-sp
  53. test_cc_clear
  54. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  55. test_gr_a5a5 1
  56. test_gr_a5a5 2
  57. test_gr_a5a5 3
  58. test_h_gr32 4 er4
  59. test_h_gr32 5 er5
  60. test_h_gr32 6 er6
  61. test_h_gr32 _stack_top-12, er7
  62. mov @_stack_top-4, er0
  63. cmp #4, er0
  64. bne fail1
  65. mov @_stack_top-8, er0
  66. cmp #5, er0
  67. bne fail1
  68. mov @_stack_top-12, er0
  69. cmp #6, er0
  70. bne fail1
  71. mov @_stack_top-16, er0
  72. cmp #0, er0
  73. bne fail1
  74. stm_4reg:
  75. set_grs_a5a5
  76. mov #_stack_top, er7
  77. mov #1, er0
  78. mov #2, er1
  79. mov #3, er2
  80. mov #4, er3
  81. set_ccr_zero
  82. stm er0-er3, @-sp
  83. test_cc_clear
  84. test_h_gr32 1 er0
  85. test_h_gr32 2 er1
  86. test_h_gr32 3 er2
  87. test_h_gr32 4 er3
  88. test_gr_a5a5 4 ; Make sure other general regs not disturbed
  89. test_gr_a5a5 5
  90. test_gr_a5a5 6
  91. test_h_gr32 _stack_top-16, er7
  92. mov @_stack_top-4, er0
  93. cmp #1, er0
  94. bne fail1
  95. mov @_stack_top-8, er0
  96. cmp #2, er0
  97. bne fail1
  98. mov @_stack_top-12, er0
  99. cmp #3, er0
  100. bne fail1
  101. mov @_stack_top-16, er0
  102. cmp #4, er0
  103. bne fail1
  104. mov @_stack_top-20, er0
  105. cmp #0, er0
  106. bne fail1
  107. ldm_2reg:
  108. set_grs_a5a5
  109. mov #_stack, er7
  110. set_ccr_zero
  111. ldm @sp+, er2-er3
  112. test_cc_clear
  113. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  114. test_gr_a5a5 1
  115. test_h_gr32 1 er2
  116. test_h_gr32 0 er3
  117. test_gr_a5a5 4
  118. test_gr_a5a5 5
  119. test_gr_a5a5 6
  120. test_h_gr32 _stack+8, er7
  121. ldm_3reg:
  122. set_grs_a5a5
  123. mov #_stack+4, er7
  124. set_ccr_zero
  125. ldm @sp+, er4-er6
  126. test_cc_clear
  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_h_gr32 3 er4
  132. test_h_gr32 2 er5
  133. test_h_gr32 1 er6
  134. test_h_gr32 _stack+16, er7
  135. ldm_4reg:
  136. set_grs_a5a5
  137. mov #_stack+4, er7
  138. set_ccr_zero
  139. ldm @sp+, er0-er3
  140. test_cc_clear
  141. test_h_gr32 4 er0
  142. test_h_gr32 3 er1
  143. test_h_gr32 2 er2
  144. test_h_gr32 1 er3
  145. test_gr_a5a5 4 ; Make sure other general regs not disturbed
  146. test_gr_a5a5 5
  147. test_gr_a5a5 6
  148. test_h_gr32 _stack+20, er7
  149. .endif
  150. pushpop:
  151. set_grs_a5a5
  152. .if (sim_cpu == h8300)
  153. mov #_stack_top, r7
  154. mov #12, r1
  155. mov #34, r2
  156. mov #56, r3
  157. push r1
  158. push r2
  159. push r3
  160. pop r4
  161. pop r5
  162. pop r6
  163. test_gr_a5a5 0 ; Make sure other general _reg_ not disturbed
  164. test_h_gr16 12 r1
  165. test_h_gr16 34 r2
  166. test_h_gr16 56 r3
  167. test_h_gr16 56 r4
  168. test_h_gr16 34 r5
  169. test_h_gr16 12 r6
  170. mov #_stack_top, r0
  171. cmp.w r0, r7
  172. bne fail1
  173. .else
  174. mov #_stack_top, er7
  175. mov #12, er1
  176. mov #34, er2
  177. mov #56, er3
  178. push er1
  179. push er2
  180. push er3
  181. pop er4
  182. pop er5
  183. pop er6
  184. test_gr_a5a5 0 ; Make sure other general _reg_ not disturbed
  185. test_h_gr32 12 er1
  186. test_h_gr32 34 er2
  187. test_h_gr32 56 er3
  188. test_h_gr32 56 er4
  189. test_h_gr32 34 er5
  190. test_h_gr32 12 er6
  191. test_h_gr32 _stack_top, er7
  192. .endif
  193. pass
  194. exit 0
  195. fail1: fail