extw.s 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. # Hitachi H8 testcase 'exts.w, extu.w'
  2. # mach(): h8300h h8300s h8sx
  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. .data
  13. .align 2
  14. pos: .word 0xff01
  15. neg: .word 0x0080
  16. .text
  17. exts_w_reg16_p:
  18. set_grs_a5a5
  19. set_ccr_zero
  20. ;; exts.w rn16
  21. mov.b #1, r0l
  22. exts.w r0
  23. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  24. test_cc_clear
  25. test_h_gr32 0xa5a50001 er0 ; result of sign extend
  26. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  27. test_gr_a5a5 2
  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. exts_w_reg16_n:
  34. set_grs_a5a5
  35. set_ccr_zero
  36. ;; exts.w rn16
  37. mov.b #0xff, r0l
  38. exts.w r0
  39. ;; Test ccr H=0 N=1 Z=0 V=0 C=0
  40. test_neg_set
  41. test_zero_clear
  42. test_ovf_clear
  43. test_carry_clear
  44. test_h_gr32 0xa5a5ffff er0 ; result of sign extend
  45. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  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. extu_w_reg16_n:
  53. set_grs_a5a5
  54. set_ccr_zero
  55. ;; extu.w rn16
  56. mov.b #0xff, r0l
  57. extu.w r0
  58. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  59. test_cc_clear
  60. test_h_gr32 0xa5a500ff er0 ; result of zero extend
  61. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  62. test_gr_a5a5 2
  63. test_gr_a5a5 3
  64. test_gr_a5a5 4
  65. test_gr_a5a5 5
  66. test_gr_a5a5 6
  67. test_gr_a5a5 7
  68. .if (sim_cpu == h8sx)
  69. exts_w_ind_p:
  70. set_grs_a5a5
  71. set_ccr_zero
  72. ;; exts.w @ern
  73. mov.l #pos, er1
  74. exts.w @er1
  75. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  76. test_cc_clear
  77. test_h_gr32 pos er1 ; er1 still contains target address
  78. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  79. test_gr_a5a5 2
  80. test_gr_a5a5 3
  81. test_gr_a5a5 4
  82. test_gr_a5a5 5
  83. test_gr_a5a5 6
  84. test_gr_a5a5 7
  85. cmp.w #0x0001, @pos
  86. beq .Lswindp
  87. fail
  88. .Lswindp:
  89. mov.w #0xff01, @pos ; Restore initial value
  90. exts_w_ind_n:
  91. set_grs_a5a5
  92. set_ccr_zero
  93. ;; exts.w @ern
  94. mov.l #neg, er1
  95. exts.w @er1
  96. ;; Test ccr H=0 N=1 Z=0 V=0 C=0
  97. test_neg_set
  98. test_zero_clear
  99. test_ovf_clear
  100. test_carry_clear
  101. test_h_gr32 neg er1 ; er1 still contains target address
  102. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  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. cmp.w #0xff80, @neg
  110. beq .Lswindn
  111. fail
  112. .Lswindn:
  113. ;; Note: leave the value as 0xff80, so that extu has work to do.
  114. extu_w_ind_n:
  115. set_grs_a5a5
  116. set_ccr_zero
  117. ;; extu.w @ern
  118. mov.l #neg, er1
  119. extu.w @er1
  120. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  121. test_cc_clear
  122. test_h_gr32 neg er1 ; er1 still contains target address
  123. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  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. cmp.w #0x0080, @neg
  131. beq .Luwindn
  132. fail
  133. .Luwindn:
  134. ;; Note: leave the value as 0x0080, like it started out.
  135. exts_w_postinc_p:
  136. set_grs_a5a5
  137. set_ccr_zero
  138. ;; exts.w @ern+
  139. mov.l #pos, er1
  140. exts.w @er1+
  141. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  142. test_cc_clear
  143. test_h_gr32 pos+2 er1 ; er1 still contains target address plus 2
  144. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  145. test_gr_a5a5 2
  146. test_gr_a5a5 3
  147. test_gr_a5a5 4
  148. test_gr_a5a5 5
  149. test_gr_a5a5 6
  150. test_gr_a5a5 7
  151. cmp.w #0x0001, @pos
  152. beq .Lswpostincp
  153. fail
  154. .Lswpostincp:
  155. mov.w #0xff01, @pos ; Restore initial value
  156. exts_w_postinc_n:
  157. set_grs_a5a5
  158. set_ccr_zero
  159. ;; exts.w @ern+
  160. mov.l #neg, er1
  161. exts.w @er1+
  162. ;; Test ccr H=0 N=1 Z=0 V=0 C=0
  163. test_neg_set
  164. test_zero_clear
  165. test_ovf_clear
  166. test_carry_clear
  167. test_h_gr32 neg+2 er1 ; er1 still contains target address
  168. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  169. test_gr_a5a5 2
  170. test_gr_a5a5 3
  171. test_gr_a5a5 4
  172. test_gr_a5a5 5
  173. test_gr_a5a5 6
  174. test_gr_a5a5 7
  175. cmp.w #0xff80, @neg
  176. beq .Lswpostincn
  177. fail
  178. .Lswpostincn:
  179. ;; Note: leave the value as 0xff80, so that extu has work to do.
  180. extu_w_postinc_n:
  181. set_grs_a5a5
  182. set_ccr_zero
  183. ;; extu.w @ern+
  184. mov.l #neg, er1
  185. extu.w @er1+
  186. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  187. test_cc_clear
  188. test_h_gr32 neg+2 er1 ; er1 still contains target address
  189. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  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. cmp.w #0x0080, @neg
  197. beq .Luwpostincn
  198. fail
  199. .Luwpostincn:
  200. ;; Note: leave the value as 0x0080, like it started out.
  201. exts_w_postdec_p:
  202. set_grs_a5a5
  203. set_ccr_zero
  204. ;; exts.w @ern-
  205. mov.l #pos, er1
  206. exts.w @er1-
  207. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  208. test_cc_clear
  209. test_h_gr32 pos-2 er1 ; er1 still contains target address plus 2
  210. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  211. test_gr_a5a5 2
  212. test_gr_a5a5 3
  213. test_gr_a5a5 4
  214. test_gr_a5a5 5
  215. test_gr_a5a5 6
  216. test_gr_a5a5 7
  217. cmp.w #0x0001, @pos
  218. beq .Lswpostdecp
  219. fail
  220. .Lswpostdecp:
  221. mov.w #0xff01, @pos ; Restore initial value
  222. exts_w_postdec_n:
  223. set_grs_a5a5
  224. set_ccr_zero
  225. ;; exts.w @ern-
  226. mov.l #neg, er1
  227. exts.w @er1-
  228. ;; Test ccr H=0 N=1 Z=0 V=0 C=0
  229. test_neg_set
  230. test_zero_clear
  231. test_ovf_clear
  232. test_carry_clear
  233. test_h_gr32 neg-2 er1 ; er1 still contains target address
  234. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  235. test_gr_a5a5 2
  236. test_gr_a5a5 3
  237. test_gr_a5a5 4
  238. test_gr_a5a5 5
  239. test_gr_a5a5 6
  240. test_gr_a5a5 7
  241. cmp.w #0xff80, @neg
  242. beq .Lswpostdecn
  243. fail
  244. .Lswpostdecn:
  245. ;; Note: leave the value as 0xff80, so that extu has work to do.
  246. extu_w_postdec_n:
  247. set_grs_a5a5
  248. set_ccr_zero
  249. ;; extu.w @ern-
  250. mov.l #neg, er1
  251. extu.w @er1-
  252. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  253. test_cc_clear
  254. test_h_gr32 neg-2 er1 ; er1 still contains target address
  255. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  256. test_gr_a5a5 2
  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. cmp.w #0x0080, @neg
  263. beq .Luwpostdecn
  264. fail
  265. .Luwpostdecn:
  266. ;; Note: leave the value as 0x0080, like it started out.
  267. exts_w_preinc_p:
  268. set_grs_a5a5
  269. set_ccr_zero
  270. ;; exts.w @+ern
  271. mov.l #pos-2, er1
  272. exts.w @+er1
  273. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  274. test_cc_clear
  275. test_h_gr32 pos er1 ; er1 still contains target address plus 2
  276. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  277. test_gr_a5a5 2
  278. test_gr_a5a5 3
  279. test_gr_a5a5 4
  280. test_gr_a5a5 5
  281. test_gr_a5a5 6
  282. test_gr_a5a5 7
  283. cmp.w #0x0001, @pos
  284. beq .Lswpreincp
  285. fail
  286. .Lswpreincp:
  287. mov.w #0xff01, @pos ; Restore initial value
  288. exts_w_preinc_n:
  289. set_grs_a5a5
  290. set_ccr_zero
  291. ;; exts.w @+ern
  292. mov.l #neg-2, er1
  293. exts.w @+er1
  294. ;; Test ccr H=0 N=1 Z=0 V=0 C=0
  295. test_neg_set
  296. test_zero_clear
  297. test_ovf_clear
  298. test_carry_clear
  299. test_h_gr32 neg er1 ; er1 still contains target address
  300. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  301. test_gr_a5a5 2
  302. test_gr_a5a5 3
  303. test_gr_a5a5 4
  304. test_gr_a5a5 5
  305. test_gr_a5a5 6
  306. test_gr_a5a5 7
  307. cmp.w #0xff80, @neg
  308. beq .Lswpreincn
  309. fail
  310. .Lswpreincn:
  311. ;; Note: leave the value as 0xff80, so that extu has work to do.
  312. extu_w_preinc_n:
  313. set_grs_a5a5
  314. set_ccr_zero
  315. ;; extu.w @+ern
  316. mov.l #neg-2, er1
  317. extu.w @+er1
  318. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  319. test_cc_clear
  320. test_h_gr32 neg er1 ; er1 still contains target address
  321. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  322. test_gr_a5a5 2
  323. test_gr_a5a5 3
  324. test_gr_a5a5 4
  325. test_gr_a5a5 5
  326. test_gr_a5a5 6
  327. test_gr_a5a5 7
  328. cmp.w #0x0080, @neg
  329. beq .Luwpreincn
  330. fail
  331. .Luwpreincn:
  332. ;; Note: leave the value as 0x0080, like it started out.
  333. exts_w_predec_p:
  334. set_grs_a5a5
  335. set_ccr_zero
  336. ;; exts.w @-ern
  337. mov.l #pos+2, er1
  338. exts.w @-er1
  339. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  340. test_cc_clear
  341. test_h_gr32 pos er1 ; er1 still contains target address plus 2
  342. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  343. test_gr_a5a5 2
  344. test_gr_a5a5 3
  345. test_gr_a5a5 4
  346. test_gr_a5a5 5
  347. test_gr_a5a5 6
  348. test_gr_a5a5 7
  349. cmp.w #0x0001, @pos
  350. beq .Lswpredecp
  351. fail
  352. .Lswpredecp:
  353. mov.w #0xff01, @pos ; Restore initial value
  354. exts_w_predec_n:
  355. set_grs_a5a5
  356. set_ccr_zero
  357. ;; exts.w @-ern
  358. mov.l #neg+2, er1
  359. exts.w @-er1
  360. ;; Test ccr H=0 N=1 Z=0 V=0 C=0
  361. test_neg_set
  362. test_zero_clear
  363. test_ovf_clear
  364. test_carry_clear
  365. test_h_gr32 neg er1 ; er1 still contains target address
  366. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  367. test_gr_a5a5 2
  368. test_gr_a5a5 3
  369. test_gr_a5a5 4
  370. test_gr_a5a5 5
  371. test_gr_a5a5 6
  372. test_gr_a5a5 7
  373. cmp.w #0xff80, @neg
  374. beq .Lswpredecn
  375. fail
  376. .Lswpredecn:
  377. ;; Note: leave the value as 0xff80, so that extu has work to do.
  378. extu_w_predec_n:
  379. set_grs_a5a5
  380. set_ccr_zero
  381. ;; extu.w @-ern
  382. mov.l #neg+2, er1
  383. extu.w @-er1
  384. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  385. test_cc_clear
  386. test_h_gr32 neg er1 ; er1 still contains target address
  387. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  388. test_gr_a5a5 2
  389. test_gr_a5a5 3
  390. test_gr_a5a5 4
  391. test_gr_a5a5 5
  392. test_gr_a5a5 6
  393. test_gr_a5a5 7
  394. cmp.w #0x0080, @neg
  395. beq .Luwpredecn
  396. fail
  397. .Luwpredecn:
  398. ;; Note: leave the value as 0x0080, like it started out.
  399. extu_w_disp2_n:
  400. set_grs_a5a5
  401. set_ccr_zero
  402. ;; extu.w @(dd:2, ern)
  403. mov.l #neg-2, er1
  404. extu.w @(2:2, er1)
  405. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  406. test_cc_clear
  407. test_h_gr32 neg-2 er1 ; er1 still contains target address
  408. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  409. test_gr_a5a5 2
  410. test_gr_a5a5 3
  411. test_gr_a5a5 4
  412. test_gr_a5a5 5
  413. test_gr_a5a5 6
  414. test_gr_a5a5 7
  415. cmp.w #0x0080, @neg
  416. beq .Luwdisp2n
  417. fail
  418. .Luwdisp2n:
  419. ;; Note: leave the value as 0x0080, like it started out.
  420. extu_w_disp16_n:
  421. set_grs_a5a5
  422. set_ccr_zero
  423. ;; extu.w @(dd:16, ern)
  424. mov.l #neg-44, er1
  425. extu.w @(44:16, er1)
  426. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  427. test_cc_clear
  428. test_h_gr32 neg-44 er1 ; er1 still contains target address
  429. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  430. test_gr_a5a5 2
  431. test_gr_a5a5 3
  432. test_gr_a5a5 4
  433. test_gr_a5a5 5
  434. test_gr_a5a5 6
  435. test_gr_a5a5 7
  436. cmp.w #0x0080, @neg
  437. beq .Luwdisp16n
  438. fail
  439. .Luwdisp16n:
  440. ;; Note: leave the value as 0x0080, like it started out.
  441. extu_w_disp32_n:
  442. set_grs_a5a5
  443. set_ccr_zero
  444. ;; extu.w @(dd:32, ern)
  445. mov.l #neg+444, er1
  446. extu.w @(-444:32, er1)
  447. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  448. test_cc_clear
  449. test_h_gr32 neg+444 er1 ; er1 still contains target address
  450. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  451. test_gr_a5a5 2
  452. test_gr_a5a5 3
  453. test_gr_a5a5 4
  454. test_gr_a5a5 5
  455. test_gr_a5a5 6
  456. test_gr_a5a5 7
  457. cmp.w #0x0080, @neg
  458. beq .Luwdisp32n
  459. fail
  460. .Luwdisp32n:
  461. ;; Note: leave the value as 0x0080, like it started out.
  462. extu_w_abs16_n:
  463. set_grs_a5a5
  464. set_ccr_zero
  465. ;; extu.w @aa:16
  466. extu.w @neg:16
  467. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  468. test_cc_clear
  469. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  470. test_gr_a5a5 1
  471. test_gr_a5a5 2
  472. test_gr_a5a5 3
  473. test_gr_a5a5 4
  474. test_gr_a5a5 5
  475. test_gr_a5a5 6
  476. test_gr_a5a5 7
  477. cmp.w #0x0080, @neg
  478. beq .Luwabs16n
  479. fail
  480. .Luwabs16n:
  481. ;; Note: leave the value as 0x0080, like it started out.
  482. extu_w_abs32_n:
  483. set_grs_a5a5
  484. set_ccr_zero
  485. ;; extu.w @aa:32
  486. extu.w @neg:32
  487. ;; Test ccr H=0 N=0 Z=0 V=0 C=0
  488. test_cc_clear
  489. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  490. test_gr_a5a5 1
  491. test_gr_a5a5 2
  492. test_gr_a5a5 3
  493. test_gr_a5a5 4
  494. test_gr_a5a5 5
  495. test_gr_a5a5 6
  496. test_gr_a5a5 7
  497. cmp.w #0x0080, @neg
  498. beq .Luwabs32n
  499. fail
  500. .Luwabs32n:
  501. ;; Note: leave the value as 0x0080, like it started out.
  502. .endif
  503. pass
  504. exit 0