mul.s 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. # Hitachi H8 testcase 'muls', 'muls/u', mulu', 'mulu/u', 'mulxs', 'mulxu'
  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. start
  12. .if (sim_cpu == h8sx)
  13. muls_w_reg_reg:
  14. set_grs_a5a5
  15. ;; muls.w rs, rd
  16. mov.w #32, r1
  17. mov.w #-2, r2
  18. set_ccr_zero
  19. muls.w r2, r1
  20. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  21. test_neg_set
  22. test_carry_clear
  23. test_zero_clear
  24. test_ovf_clear
  25. test_gr_a5a5 0
  26. test_h_gr16 -64 r1
  27. test_h_gr32 0xa5a5fffe er2
  28. test_gr_a5a5 3
  29. test_gr_a5a5 4
  30. test_gr_a5a5 5
  31. test_gr_a5a5 6
  32. test_gr_a5a5 7
  33. muls_w_imm4_reg:
  34. set_grs_a5a5
  35. ;; muls.w xx:4, rd
  36. mov.w #-32, r1
  37. set_ccr_zero
  38. muls.w #2:4, r1
  39. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  40. test_neg_set
  41. test_carry_clear
  42. test_zero_clear
  43. test_ovf_clear
  44. test_gr_a5a5 0
  45. test_h_gr16 -64 r1
  46. test_gr_a5a5 2
  47. test_gr_a5a5 3
  48. test_gr_a5a5 4
  49. test_gr_a5a5 5
  50. test_gr_a5a5 6
  51. test_gr_a5a5 7
  52. muls_l_reg_reg:
  53. set_grs_a5a5
  54. ;; muls.l ers, erd
  55. mov.l #320000, er1
  56. mov.l #-2, er2
  57. set_ccr_zero
  58. muls.l er2, er1
  59. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  60. test_neg_set
  61. test_carry_clear
  62. test_zero_clear
  63. test_ovf_clear
  64. test_gr_a5a5 0
  65. test_h_gr32 -640000 er1
  66. test_h_gr32 -2 er2
  67. test_gr_a5a5 3
  68. test_gr_a5a5 4
  69. test_gr_a5a5 5
  70. test_gr_a5a5 6
  71. test_gr_a5a5 7
  72. muls_l_imm4_reg:
  73. set_grs_a5a5
  74. ;; muls.l xx:4, rd
  75. mov.l #-320000, er1
  76. set_ccr_zero
  77. muls.l #2:4, er1
  78. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  79. test_neg_set
  80. test_carry_clear
  81. test_zero_clear
  82. test_ovf_clear
  83. test_gr_a5a5 0
  84. test_h_gr32 -640000 er1
  85. test_gr_a5a5 2
  86. test_gr_a5a5 3
  87. test_gr_a5a5 4
  88. test_gr_a5a5 5
  89. test_gr_a5a5 6
  90. test_gr_a5a5 7
  91. muls_u_l_reg_reg:
  92. set_grs_a5a5
  93. ;; muls/u.l ers, erd
  94. mov.l #0x10000000, er1
  95. mov.l #-16, er2
  96. set_ccr_zero
  97. muls/u.l er2, er1
  98. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  99. test_neg_set
  100. test_carry_clear
  101. test_zero_clear
  102. test_ovf_clear
  103. test_gr_a5a5 0
  104. test_h_gr32 -1 er1
  105. test_h_gr32 -16 er2
  106. test_gr_a5a5 3
  107. test_gr_a5a5 4
  108. test_gr_a5a5 5
  109. test_gr_a5a5 6
  110. test_gr_a5a5 7
  111. muls_u_l_imm4_reg:
  112. set_grs_a5a5
  113. ;; muls/u.l xx:4, rd
  114. mov.l #0xffffffff, er1
  115. set_ccr_zero
  116. muls/u.l #2:4, er1
  117. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  118. test_neg_set
  119. test_carry_clear
  120. test_zero_clear
  121. test_ovf_clear
  122. test_gr_a5a5 0
  123. test_h_gr32 -1 er1
  124. test_gr_a5a5 2
  125. test_gr_a5a5 3
  126. test_gr_a5a5 4
  127. test_gr_a5a5 5
  128. test_gr_a5a5 6
  129. test_gr_a5a5 7
  130. mulu_w_reg_reg:
  131. set_grs_a5a5
  132. ;; mulu.w rs, rd
  133. mov.w #32, r1
  134. mov.w #-2, r2
  135. set_ccr_zero
  136. mulu.w r2, r1
  137. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  138. test_cc_clear
  139. test_gr_a5a5 0
  140. test_h_gr16 -64 r1
  141. test_h_gr32 0xa5a5fffe er2
  142. test_gr_a5a5 3
  143. test_gr_a5a5 4
  144. test_gr_a5a5 5
  145. test_gr_a5a5 6
  146. test_gr_a5a5 7
  147. mulu_w_imm4_reg:
  148. set_grs_a5a5
  149. ;; mulu.w xx:4, rd
  150. mov.w #32, r1
  151. set_ccr_zero
  152. mulu.w #-2:4, r1
  153. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  154. test_cc_clear
  155. test_gr_a5a5 0
  156. test_h_gr16 0x1c0 r1
  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. mulu_l_reg_reg:
  164. set_grs_a5a5
  165. ;; mulu.l ers, erd
  166. mov.l #320000, er1
  167. mov.l #-2, er2
  168. set_ccr_zero
  169. mulu.l er2, er1
  170. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  171. test_cc_clear
  172. test_gr_a5a5 0
  173. test_h_gr32 -640000 er1
  174. test_h_gr32 -2 er2
  175. test_gr_a5a5 3
  176. test_gr_a5a5 4
  177. test_gr_a5a5 5
  178. test_gr_a5a5 6
  179. test_gr_a5a5 7
  180. mulu_l_imm4_reg:
  181. set_grs_a5a5
  182. ;; mulu.l xx:4, rd
  183. mov.l #320000, er1
  184. set_ccr_zero
  185. mulu.l #-2:4, er1
  186. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  187. test_cc_clear
  188. test_gr_a5a5 0
  189. test_h_gr32 0x445c00 er1
  190. test_gr_a5a5 2
  191. test_gr_a5a5 3
  192. test_gr_a5a5 4
  193. test_gr_a5a5 5
  194. test_gr_a5a5 6
  195. test_gr_a5a5 7
  196. mulu_u_l_reg_reg:
  197. set_grs_a5a5
  198. ;; mulu/u.l ers, erd
  199. mov.l #0x10000000, er1
  200. mov.l #16, er2
  201. set_ccr_zero
  202. mulu/u.l er2, er1
  203. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  204. test_cc_clear
  205. test_gr_a5a5 0
  206. test_h_gr32 1 er1
  207. test_h_gr32 16 er2
  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. mulu_u_l_imm4_reg:
  214. set_grs_a5a5
  215. ;; mulu/u.l xx:4, rd
  216. mov.l #0xffffffff, er1
  217. set_ccr_zero
  218. mulu/u.l #2:4, er1
  219. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  220. test_cc_clear
  221. test_gr_a5a5 0
  222. test_h_gr32 0x1 er1
  223. test_gr_a5a5 2
  224. test_gr_a5a5 3
  225. test_gr_a5a5 4
  226. test_gr_a5a5 5
  227. test_gr_a5a5 6
  228. test_gr_a5a5 7
  229. .endif
  230. .if (sim_cpu) ; not equal to zero ie. not h8
  231. mulxs_b_reg_reg:
  232. set_grs_a5a5
  233. ;; mulxs.b rs, rd
  234. mov.b #32, r1l
  235. mov.b #-2, r2l
  236. set_ccr_zero
  237. mulxs.b r2l, r1
  238. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  239. test_neg_set
  240. test_carry_clear
  241. test_zero_clear
  242. test_ovf_clear
  243. test_gr_a5a5 0
  244. test_h_gr16 -64 r1
  245. test_h_gr32 0xa5a5a5fe er2
  246. test_gr_a5a5 3
  247. test_gr_a5a5 4
  248. test_gr_a5a5 5
  249. test_gr_a5a5 6
  250. test_gr_a5a5 7
  251. .if (sim_cpu == h8sx)
  252. mulxs_b_imm4_reg:
  253. set_grs_a5a5
  254. ;; mulxs.b xx:4, rd
  255. mov.w #-32, r1
  256. set_ccr_zero
  257. mulxs.b #2:4, r1
  258. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  259. test_neg_set
  260. test_carry_clear
  261. test_zero_clear
  262. test_ovf_clear
  263. test_gr_a5a5 0
  264. test_h_gr16 -64 r1
  265. test_gr_a5a5 2
  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. .endif ; h8sx
  272. mulxs_w_reg_reg:
  273. set_grs_a5a5
  274. ;; mulxs.w ers, erd
  275. mov.w #0x1000, r1
  276. mov.w #-0x1000, r2
  277. set_ccr_zero
  278. mulxs.w r2, er1
  279. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  280. test_neg_set
  281. test_carry_clear
  282. test_zero_clear
  283. test_ovf_clear
  284. test_gr_a5a5 0
  285. test_h_gr32 0xff000000 er1
  286. test_h_gr32 0xa5a5f000 er2
  287. test_gr_a5a5 3
  288. test_gr_a5a5 4
  289. test_gr_a5a5 5
  290. test_gr_a5a5 6
  291. test_gr_a5a5 7
  292. .if (sim_cpu == h8sx)
  293. mulxs_w_imm4_reg:
  294. set_grs_a5a5
  295. ;; mulxs.w xx:4, rd
  296. mov.w #-1, r1
  297. set_ccr_zero
  298. mulxs.w #2:4, er1
  299. ;; test ccr ; H=0 N=1 Z=0 V=0 C=0
  300. test_neg_set
  301. test_carry_clear
  302. test_zero_clear
  303. test_ovf_clear
  304. test_gr_a5a5 0
  305. test_h_gr32 -2 er1
  306. test_gr_a5a5 2
  307. test_gr_a5a5 3
  308. test_gr_a5a5 4
  309. test_gr_a5a5 5
  310. test_gr_a5a5 6
  311. test_gr_a5a5 7
  312. .endif ; h8sx
  313. .endif ; not h8
  314. mulxu_b_reg_reg:
  315. set_grs_a5a5
  316. ;; mulxu.b rs, rd
  317. mov.b #32, r1l
  318. mov.b #-2, r2l
  319. set_ccr_zero
  320. mulxu.b r2l, r1
  321. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  322. test_cc_clear
  323. test_gr_a5a5 0
  324. test_h_gr16 0x1fc0 r1
  325. test_h_gr16 0xa5fe r2
  326. .if (sim_cpu)
  327. test_h_gr32 0xa5a5a5fe er2
  328. .endif
  329. test_gr_a5a5 3
  330. test_gr_a5a5 4
  331. test_gr_a5a5 5
  332. test_gr_a5a5 6
  333. test_gr_a5a5 7
  334. .if (sim_cpu) ; not h8
  335. .if (sim_cpu == h8sx)
  336. mulxu_b_imm4_reg:
  337. set_grs_a5a5
  338. ;; mulxu.b xx:4, rd
  339. mov.b #-32, r1l
  340. set_ccr_zero
  341. mulxu.b #2:4, r1
  342. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  343. test_cc_clear
  344. test_gr_a5a5 0
  345. test_h_gr16 0x1c0 r1
  346. test_gr_a5a5 2
  347. test_gr_a5a5 3
  348. test_gr_a5a5 4
  349. test_gr_a5a5 5
  350. test_gr_a5a5 6
  351. test_gr_a5a5 7
  352. .endif ; h8sx
  353. mulxu_w_reg_reg:
  354. set_grs_a5a5
  355. ;; mulxu.w ers, erd
  356. mov.w #0x1000, r1
  357. mov.w #-0x1000, r2
  358. set_ccr_zero
  359. mulxu.w r2, er1
  360. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  361. test_cc_clear
  362. test_gr_a5a5 0
  363. test_h_gr32 0x0f000000 er1
  364. test_h_gr32 0xa5a5f000 er2
  365. test_gr_a5a5 3
  366. test_gr_a5a5 4
  367. test_gr_a5a5 5
  368. test_gr_a5a5 6
  369. test_gr_a5a5 7
  370. .if (sim_cpu == h8sx)
  371. mulxu_w_imm4_reg:
  372. set_grs_a5a5
  373. ;; mulxu.w xx:4, rd
  374. mov.w #-1, r1
  375. set_ccr_zero
  376. mulxu.w #2:4, er1
  377. ;; test ccr ; H=0 N=0 Z=0 V=0 C=0
  378. test_cc_clear
  379. test_gr_a5a5 0
  380. test_h_gr32 0x1fffe er1
  381. test_gr_a5a5 2
  382. test_gr_a5a5 3
  383. test_gr_a5a5 4
  384. test_gr_a5a5 5
  385. test_gr_a5a5 6
  386. test_gr_a5a5 7
  387. .endif ; h8sx
  388. .endif ; not h8
  389. pass
  390. exit 0