addx.s 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992
  1. # Hitachi H8 testcase 'addx'
  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. # Instructions tested:
  12. # addx.b #xx:8, rd8 ; 9 rd8 xxxxxxxx
  13. # addx.b #xx:8, @erd ; 7 d erd ???? 9 ???? xxxxxxxx
  14. # addx.b #xx:8, @erd- ; 0 1 7 6 6 c erd 1??? 9 ???? xxxxxxxx
  15. # addx.b rs8, rd8 ; 0 e rs8 rd8
  16. # addx.b rs8, @erd ; 7 d erd ???? 0 e rs8 ????
  17. # addx.b rs8, @erd- ; 0 1 7 6 6 c erd 1??? 0 e rs8 ????
  18. # addx.b @ers, rd8 ; 7 c ers ???? 0 e ???? rd8
  19. # addx.b @ers-, rd8 ; 0 1 7 6 6 c ers 00?? 0 e ???? rd8
  20. # addx.b @ers, @erd ; 0 1 7 4 6 8 ers d 0 erd 1 ????
  21. # addx.b @ers-, @erd- ; 0 1 7 6 6 c ers d a erd 1 ????
  22. #
  23. # word ops
  24. # long ops
  25. .data
  26. byte_src: .byte 0x5
  27. byte_dest: .byte 0
  28. .align 2
  29. word_src: .word 0x505
  30. word_dest: .word 0
  31. .align 4
  32. long_src: .long 0x50505
  33. long_dest: .long 0
  34. start
  35. addx_b_imm8_0:
  36. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  37. set_ccr_zero
  38. ;; addx.b #xx:8,Rd ; Addx with carry initially zero.
  39. addx.b #5, r0l ; Immediate 8-bit operand
  40. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  41. test_ovf_clear
  42. test_zero_clear
  43. test_neg_set
  44. test_h_gr16 0xa5aa r0 ; add result: a5 + 5
  45. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  46. test_h_gr32 0xa5a5a5aa er0 ; add result: a5 + 5
  47. .endif
  48. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  49. test_gr_a5a5 2
  50. test_gr_a5a5 3
  51. test_gr_a5a5 4
  52. test_gr_a5a5 5
  53. test_gr_a5a5 6
  54. test_gr_a5a5 7
  55. addx_b_imm8_1:
  56. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  57. set_ccr_zero
  58. ;; addx.b #xx:8,Rd ; Addx with carry initially one.
  59. set_carry_flag
  60. addx.b #5, r0l ; Immediate 8-bit operand
  61. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  62. test_ovf_clear
  63. test_zero_clear
  64. test_neg_set
  65. test_h_gr16 0xa5ab r0 ; add result: a5 + 5 + 1
  66. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  67. test_h_gr32 0xa5a5a5ab er0 ; add result: a5 + 5 + 1
  68. .endif
  69. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  70. test_gr_a5a5 2
  71. test_gr_a5a5 3
  72. test_gr_a5a5 4
  73. test_gr_a5a5 5
  74. test_gr_a5a5 6
  75. test_gr_a5a5 7
  76. .if (sim_cpu == h8sx)
  77. addx_b_imm8_rdind:
  78. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  79. set_ccr_zero
  80. ;; addx.b #xx:8,@eRd ; Addx to register indirect
  81. mov #byte_dest, er0
  82. addx.b #5, @er0
  83. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  84. test_ovf_clear
  85. test_zero_clear
  86. test_neg_clear
  87. test_h_gr32 byte_dest er0 ; er0 still contains address
  88. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  89. test_gr_a5a5 2
  90. test_gr_a5a5 3
  91. test_gr_a5a5 4
  92. test_gr_a5a5 5
  93. test_gr_a5a5 6
  94. test_gr_a5a5 7
  95. ;; Now check the result of the add to memory.
  96. cmp.b #5, @byte_dest
  97. beq .Lb1
  98. fail
  99. .Lb1:
  100. addx_b_imm8_rdpostdec:
  101. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  102. set_ccr_zero
  103. ;; addx.b #xx:8,@eRd- ; Addx to register post-decrement
  104. mov #byte_dest, er0
  105. addx.b #5, @er0-
  106. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  107. test_ovf_clear
  108. test_zero_clear
  109. test_neg_clear
  110. test_h_gr32 byte_dest-1 er0 ; er0 contains address minus one
  111. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  112. test_gr_a5a5 2
  113. test_gr_a5a5 3
  114. test_gr_a5a5 4
  115. test_gr_a5a5 5
  116. test_gr_a5a5 6
  117. test_gr_a5a5 7
  118. ;; Now check the result of the add to memory.
  119. cmp.b #10, @byte_dest
  120. beq .Lb2
  121. fail
  122. .Lb2:
  123. .endif
  124. addx_b_reg8_0:
  125. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  126. set_ccr_zero
  127. ;; addx.b Rs,Rd ; addx with carry initially zero
  128. mov.b #5, r0h
  129. addx.b r0h, r0l ; Register operand
  130. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  131. test_ovf_clear
  132. test_zero_clear
  133. test_neg_set
  134. test_h_gr16 0x05aa r0 ; add result: a5 + 5
  135. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  136. test_h_gr32 0xa5a505aa er0 ; add result: a5 + 5
  137. .endif
  138. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  139. test_gr_a5a5 2
  140. test_gr_a5a5 3
  141. test_gr_a5a5 4
  142. test_gr_a5a5 5
  143. test_gr_a5a5 6
  144. test_gr_a5a5 7
  145. addx_b_reg8_1:
  146. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  147. set_ccr_zero
  148. ;; addx.b Rs,Rd ; addx with carry initially one
  149. mov.b #5, r0h
  150. set_carry_flag
  151. addx.b r0h, r0l ; Register operand
  152. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  153. test_ovf_clear
  154. test_zero_clear
  155. test_neg_set
  156. test_h_gr16 0x05ab r0 ; add result: a5 + 5 + 1
  157. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  158. test_h_gr32 0xa5a505ab er0 ; add result: a5 + 5 + 1
  159. .endif
  160. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  161. test_gr_a5a5 2
  162. test_gr_a5a5 3
  163. test_gr_a5a5 4
  164. test_gr_a5a5 5
  165. test_gr_a5a5 6
  166. test_gr_a5a5 7
  167. .if (sim_cpu == h8sx)
  168. addx_b_reg8_rdind:
  169. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  170. set_ccr_zero
  171. ;; addx.b rs8,@eRd ; Addx to register indirect
  172. mov #byte_dest, er0
  173. mov.b #5, r1l
  174. addx.b r1l, @er0
  175. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  176. test_ovf_clear
  177. test_zero_clear
  178. test_neg_clear
  179. test_h_gr32 byte_dest er0 ; er0 still contains address
  180. test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
  181. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  182. test_gr_a5a5 3
  183. test_gr_a5a5 4
  184. test_gr_a5a5 5
  185. test_gr_a5a5 6
  186. test_gr_a5a5 7
  187. ;; Now check the result of the add to memory.
  188. cmp.b #15, @byte_dest
  189. beq .Lb3
  190. fail
  191. .Lb3:
  192. addx_b_reg8_rdpostdec:
  193. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  194. set_ccr_zero
  195. ;; addx.b rs8,@eRd- ; Addx to register post-decrement
  196. mov #byte_dest, er0
  197. mov.b #5, r1l
  198. addx.b r1l, @er0-
  199. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  200. test_ovf_clear
  201. test_zero_clear
  202. test_neg_clear
  203. test_h_gr32 byte_dest-1 er0 ; er0 contains address minus one
  204. test_h_gr32 0xa5a5a505 er1 ; er1 contains the test load
  205. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  206. test_gr_a5a5 3
  207. test_gr_a5a5 4
  208. test_gr_a5a5 5
  209. test_gr_a5a5 6
  210. test_gr_a5a5 7
  211. ;; Now check the result of the add to memory.
  212. cmp.b #20, @byte_dest
  213. beq .Lb4
  214. fail
  215. .Lb4:
  216. addx_b_rsind_reg8:
  217. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  218. set_ccr_zero
  219. ;; addx.b @eRs,rd8 ; Addx from reg indirect to reg
  220. mov #byte_src, er0
  221. addx.b @er0, r1l
  222. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  223. test_ovf_clear
  224. test_zero_clear
  225. test_neg_set
  226. test_h_gr32 byte_src er0 ; er0 still contains address
  227. test_h_gr32 0xa5a5a5aa er1 ; er1 contains the sum
  228. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  229. test_gr_a5a5 3
  230. test_gr_a5a5 4
  231. test_gr_a5a5 5
  232. test_gr_a5a5 6
  233. test_gr_a5a5 7
  234. addx_b_rspostdec_reg8:
  235. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  236. set_ccr_zero
  237. ;; addx.b @eRs-,rd8 ; Addx to register post-decrement
  238. mov #byte_src, er0
  239. addx.b @er0-, r1l
  240. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  241. test_ovf_clear
  242. test_zero_clear
  243. test_neg_set
  244. test_h_gr32 byte_src-1 er0 ; er0 contains address minus one
  245. test_h_gr32 0xa5a5a5aa er1 ; er1 contains the sum
  246. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  247. test_gr_a5a5 3
  248. test_gr_a5a5 4
  249. test_gr_a5a5 5
  250. test_gr_a5a5 6
  251. test_gr_a5a5 7
  252. addx_b_rsind_rsind:
  253. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  254. set_ccr_zero
  255. ;; addx.b @eRs,rd8 ; Addx from reg indirect to reg
  256. mov #byte_src, er0
  257. mov #byte_dest, er1
  258. addx.b @er0, @er1
  259. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  260. test_ovf_clear
  261. test_zero_clear
  262. test_neg_clear
  263. test_h_gr32 byte_src er0 ; er0 still contains src address
  264. test_h_gr32 byte_dest er1 ; er1 still contains dst 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. ;; Now check the result of the add to memory.
  272. cmp.b #25, @byte_dest
  273. beq .Lb5
  274. fail
  275. .Lb5:
  276. addx_b_rspostdec_rspostdec:
  277. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  278. set_ccr_zero
  279. ;; addx.b @eRs-,rd8 ; Addx to register post-decrement
  280. mov #byte_src, er0
  281. mov #byte_dest, er1
  282. addx.b @er0-, @er1-
  283. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  284. test_ovf_clear
  285. test_zero_clear
  286. test_neg_clear
  287. test_h_gr32 byte_src-1 er0 ; er0 contains src address minus one
  288. test_h_gr32 byte_dest-1 er1 ; er1 contains dst address minus one
  289. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  290. test_gr_a5a5 3
  291. test_gr_a5a5 4
  292. test_gr_a5a5 5
  293. test_gr_a5a5 6
  294. test_gr_a5a5 7
  295. ;; Now check the result of the add to memory.
  296. cmp.b #30, @byte_dest
  297. beq .Lb6
  298. fail
  299. .Lb6:
  300. addx_w_imm16_0:
  301. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  302. set_ccr_zero
  303. ;; addx.w #xx:16,Rd ; Addx with carry initially zero.
  304. addx.w #0x505, r0 ; Immediate 16-bit operand
  305. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  306. test_ovf_clear
  307. test_zero_clear
  308. test_neg_set
  309. test_h_gr16 0xaaaa r0 ; add result: 0xa5a5 + 0x505
  310. test_h_gr32 0xa5a5aaaa er0 ; add result: 0xa5a5 + 0x505
  311. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  312. test_gr_a5a5 2
  313. test_gr_a5a5 3
  314. test_gr_a5a5 4
  315. test_gr_a5a5 5
  316. test_gr_a5a5 6
  317. test_gr_a5a5 7
  318. addx_w_imm16_1:
  319. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  320. set_ccr_zero
  321. ;; addx.w #xx:16,Rd ; Addx with carry initially one.
  322. set_carry_flag
  323. addx.w #0x505, r0 ; Immediate 16-bit operand
  324. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  325. test_ovf_clear
  326. test_zero_clear
  327. test_neg_set
  328. test_h_gr16 0xaaab r0 ; add result: 0xa5a5 + 0x505 + 1
  329. test_h_gr32 0xa5a5aaab er0 ; add result: 0xa5a5 + 0x505 + 1
  330. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  331. test_gr_a5a5 2
  332. test_gr_a5a5 3
  333. test_gr_a5a5 4
  334. test_gr_a5a5 5
  335. test_gr_a5a5 6
  336. test_gr_a5a5 7
  337. addx_w_imm16_rdind:
  338. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  339. set_ccr_zero
  340. ;; addx.w #xx:16,@eRd ; Addx to register indirect
  341. mov #word_dest, er0
  342. addx.w #0x505, @er0
  343. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  344. test_ovf_clear
  345. test_zero_clear
  346. test_neg_clear
  347. test_h_gr32 word_dest er0 ; er0 still contains address
  348. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  349. test_gr_a5a5 2
  350. test_gr_a5a5 3
  351. test_gr_a5a5 4
  352. test_gr_a5a5 5
  353. test_gr_a5a5 6
  354. test_gr_a5a5 7
  355. ;; Now check the result of the add to memory.
  356. cmp.w #0x505, @word_dest
  357. beq .Lw1
  358. fail
  359. .Lw1:
  360. addx_w_imm16_rdpostdec:
  361. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  362. set_ccr_zero
  363. ;; addx.w #xx:16,@eRd- ; Addx to register post-decrement
  364. mov #word_dest, er0
  365. addx.w #0x505, @er0-
  366. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  367. test_ovf_clear
  368. test_zero_clear
  369. test_neg_clear
  370. test_h_gr32 word_dest-2 er0 ; er0 contains address minus one
  371. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  372. test_gr_a5a5 2
  373. test_gr_a5a5 3
  374. test_gr_a5a5 4
  375. test_gr_a5a5 5
  376. test_gr_a5a5 6
  377. test_gr_a5a5 7
  378. ;; Now check the result of the add to memory.
  379. cmp.w #0xa0a, @word_dest
  380. beq .Lw2
  381. fail
  382. .Lw2:
  383. addx_w_reg16_0:
  384. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  385. set_ccr_zero
  386. ;; addx.w Rs,Rd ; addx with carry initially zero
  387. mov.w #0x505, e0
  388. addx.w e0, r0 ; Register operand
  389. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  390. test_ovf_clear
  391. test_zero_clear
  392. test_neg_set
  393. test_h_gr32 0x0505aaaa er0 ; add result:
  394. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  395. test_gr_a5a5 2
  396. test_gr_a5a5 3
  397. test_gr_a5a5 4
  398. test_gr_a5a5 5
  399. test_gr_a5a5 6
  400. test_gr_a5a5 7
  401. addx_w_reg16_1:
  402. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  403. set_ccr_zero
  404. ;; addx.w Rs,Rd ; addx with carry initially one
  405. mov.w #0x505, e0
  406. set_carry_flag
  407. addx.w e0, r0 ; Register operand
  408. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  409. test_ovf_clear
  410. test_zero_clear
  411. test_neg_set
  412. test_h_gr32 0x0505aaab er0 ; add result:
  413. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  414. test_gr_a5a5 2
  415. test_gr_a5a5 3
  416. test_gr_a5a5 4
  417. test_gr_a5a5 5
  418. test_gr_a5a5 6
  419. test_gr_a5a5 7
  420. addx_w_reg16_rdind:
  421. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  422. set_ccr_zero
  423. ;; addx.w rs8,@eRd ; Addx to register indirect
  424. mov #word_dest, er0
  425. mov.w #0x505, r1
  426. addx.w r1, @er0
  427. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  428. test_ovf_clear
  429. test_zero_clear
  430. test_neg_clear
  431. test_h_gr32 word_dest er0 ; er0 still contains address
  432. test_h_gr32 0xa5a50505 er1 ; er1 has the test load
  433. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  434. test_gr_a5a5 3
  435. test_gr_a5a5 4
  436. test_gr_a5a5 5
  437. test_gr_a5a5 6
  438. test_gr_a5a5 7
  439. ;; Now check the result of the add to memory.
  440. cmp.w #0xf0f, @word_dest
  441. beq .Lw3
  442. fail
  443. .Lw3:
  444. addx_w_reg16_rdpostdec:
  445. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  446. set_ccr_zero
  447. ;; addx.w rs8,@eRd- ; Addx to register post-decrement
  448. mov #word_dest, er0
  449. mov.w #0x505, r1
  450. addx.w r1, @er0-
  451. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  452. test_ovf_clear
  453. test_zero_clear
  454. test_neg_clear
  455. test_h_gr32 word_dest-2 er0 ; er0 contains address minus one
  456. test_h_gr32 0xa5a50505 er1 ; er1 contains the test load
  457. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  458. test_gr_a5a5 3
  459. test_gr_a5a5 4
  460. test_gr_a5a5 5
  461. test_gr_a5a5 6
  462. test_gr_a5a5 7
  463. ;; Now check the result of the add to memory.
  464. cmp.w #0x1414, @word_dest
  465. beq .Lw4
  466. fail
  467. .Lw4:
  468. addx_w_rsind_reg16:
  469. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  470. set_ccr_zero
  471. ;; addx.w @eRs,rd8 ; Addx from reg indirect to reg
  472. mov #word_src, er0
  473. addx.w @er0, r1
  474. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  475. test_ovf_clear
  476. test_zero_clear
  477. test_neg_set
  478. test_h_gr32 word_src er0 ; er0 still contains address
  479. test_h_gr32 0xa5a5aaaa er1 ; er1 contains the sum
  480. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  481. test_gr_a5a5 3
  482. test_gr_a5a5 4
  483. test_gr_a5a5 5
  484. test_gr_a5a5 6
  485. test_gr_a5a5 7
  486. addx_w_rspostdec_reg16:
  487. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  488. set_ccr_zero
  489. ;; addx.w @eRs-,rd8 ; Addx to register post-decrement
  490. mov #word_src, er0
  491. addx.w @er0-, r1
  492. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  493. test_ovf_clear
  494. test_zero_clear
  495. test_neg_set
  496. test_h_gr32 word_src-2 er0 ; er0 contains address minus one
  497. test_h_gr32 0xa5a5aaaa er1 ; er1 contains the sum
  498. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  499. test_gr_a5a5 3
  500. test_gr_a5a5 4
  501. test_gr_a5a5 5
  502. test_gr_a5a5 6
  503. test_gr_a5a5 7
  504. addx_w_rsind_rdind:
  505. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  506. set_ccr_zero
  507. ;; addx.w @eRs,rd8 ; Addx from reg indirect to reg
  508. mov #word_src, er0
  509. mov #word_dest, er1
  510. addx.w @er0, @er1
  511. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  512. test_ovf_clear
  513. test_zero_clear
  514. test_neg_clear
  515. test_h_gr32 word_src er0 ; er0 still contains src address
  516. test_h_gr32 word_dest er1 ; er1 still contains dst address
  517. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  518. test_gr_a5a5 3
  519. test_gr_a5a5 4
  520. test_gr_a5a5 5
  521. test_gr_a5a5 6
  522. test_gr_a5a5 7
  523. ;; Now check the result of the add to memory.
  524. cmp.w #0x1919, @word_dest
  525. beq .Lw5
  526. fail
  527. .Lw5:
  528. addx_w_rspostdec_rdpostdec:
  529. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  530. set_ccr_zero
  531. ;; addx.w @eRs-,rd8 ; Addx to register post-decrement
  532. mov #word_src, er0
  533. mov #word_dest, er1
  534. addx.w @er0-, @er1-
  535. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  536. test_ovf_clear
  537. test_zero_clear
  538. test_neg_clear
  539. test_h_gr32 word_src-2 er0 ; er0 contains src address minus one
  540. test_h_gr32 word_dest-2 er1 ; er1 contains dst address minus one
  541. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  542. test_gr_a5a5 3
  543. test_gr_a5a5 4
  544. test_gr_a5a5 5
  545. test_gr_a5a5 6
  546. test_gr_a5a5 7
  547. ;; Now check the result of the add to memory.
  548. cmp.w #0x1e1e, @word_dest
  549. beq .Lw6
  550. fail
  551. .Lw6:
  552. addx_l_imm32_0:
  553. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  554. set_ccr_zero
  555. ;; addx.l #xx:32,Rd ; Addx with carry initially zero.
  556. addx.l #0x50505, er0 ; Immediate 32-bit operand
  557. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  558. test_ovf_clear
  559. test_zero_clear
  560. test_neg_set
  561. test_h_gr32 0xa5aaaaaa er0 ; add result:
  562. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  563. test_gr_a5a5 2
  564. test_gr_a5a5 3
  565. test_gr_a5a5 4
  566. test_gr_a5a5 5
  567. test_gr_a5a5 6
  568. test_gr_a5a5 7
  569. addx_l_imm32_1:
  570. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  571. set_ccr_zero
  572. ;; addx.l #xx:32,Rd ; Addx with carry initially one.
  573. set_carry_flag
  574. addx.l #0x50505, er0 ; Immediate 32-bit operand
  575. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  576. test_ovf_clear
  577. test_zero_clear
  578. test_neg_set
  579. test_h_gr32 0xa5aaaaab er0 ; add result:
  580. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  581. test_gr_a5a5 2
  582. test_gr_a5a5 3
  583. test_gr_a5a5 4
  584. test_gr_a5a5 5
  585. test_gr_a5a5 6
  586. test_gr_a5a5 7
  587. addx_l_imm32_rdind:
  588. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  589. set_ccr_zero
  590. ;; addx.l #xx:32,@eRd ; Addx to register indirect
  591. mov #long_dest, er0
  592. addx.l #0x50505, @er0
  593. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  594. test_ovf_clear
  595. test_zero_clear
  596. test_neg_clear
  597. test_h_gr32 long_dest er0 ; er0 still contains address
  598. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  599. test_gr_a5a5 2
  600. test_gr_a5a5 3
  601. test_gr_a5a5 4
  602. test_gr_a5a5 5
  603. test_gr_a5a5 6
  604. test_gr_a5a5 7
  605. ;; Now check the result of the add to memory.
  606. cmp.l #0x50505, @long_dest
  607. beq .Ll1
  608. fail
  609. .Ll1:
  610. addx_l_imm32_rdpostdec:
  611. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  612. set_ccr_zero
  613. ;; addx.l #xx:32,@eRd- ; Addx to register post-decrement
  614. mov #long_dest, er0
  615. addx.l #0x50505, @er0-
  616. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  617. test_ovf_clear
  618. test_zero_clear
  619. test_neg_clear
  620. test_h_gr32 long_dest-4 er0 ; er0 contains address minus one
  621. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  622. test_gr_a5a5 2
  623. test_gr_a5a5 3
  624. test_gr_a5a5 4
  625. test_gr_a5a5 5
  626. test_gr_a5a5 6
  627. test_gr_a5a5 7
  628. ;; Now check the result of the add to memory.
  629. cmp.l #0xa0a0a, @long_dest
  630. beq .Ll2
  631. fail
  632. .Ll2:
  633. addx_l_reg32_0:
  634. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  635. set_ccr_zero
  636. ;; addx.l Rs,Rd ; addx with carry initially zero
  637. mov.l #0x50505, er0
  638. addx.l er0, er1 ; Register operand
  639. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  640. test_ovf_clear
  641. test_zero_clear
  642. test_neg_set
  643. test_h_gr32 0x50505 er0 ; add load
  644. test_h_gr32 0xa5aaaaaa er1 ; add result:
  645. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  646. test_gr_a5a5 3
  647. test_gr_a5a5 4
  648. test_gr_a5a5 5
  649. test_gr_a5a5 6
  650. test_gr_a5a5 7
  651. addx_l_reg32_1:
  652. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  653. set_ccr_zero
  654. ;; addx.l Rs,Rd ; addx with carry initially one
  655. mov.l #0x50505, er0
  656. set_carry_flag
  657. addx.l er0, er1 ; Register operand
  658. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  659. test_ovf_clear
  660. test_zero_clear
  661. test_neg_set
  662. test_h_gr32 0x50505 er0 ; add result:
  663. test_h_gr32 0xa5aaaaab er1 ; add result:
  664. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  665. test_gr_a5a5 3
  666. test_gr_a5a5 4
  667. test_gr_a5a5 5
  668. test_gr_a5a5 6
  669. test_gr_a5a5 7
  670. addx_l_reg32_rdind:
  671. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  672. set_ccr_zero
  673. ;; addx.l rs8,@eRd ; Addx to register indirect
  674. mov #long_dest, er0
  675. mov.l #0x50505, er1
  676. addx.l er1, @er0
  677. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  678. test_ovf_clear
  679. test_zero_clear
  680. test_neg_clear
  681. test_h_gr32 long_dest er0 ; er0 still contains address
  682. test_h_gr32 0x50505 er1 ; er1 has the test load
  683. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  684. test_gr_a5a5 3
  685. test_gr_a5a5 4
  686. test_gr_a5a5 5
  687. test_gr_a5a5 6
  688. test_gr_a5a5 7
  689. ;; Now check the result of the add to memory.
  690. cmp.l #0xf0f0f, @long_dest
  691. beq .Ll3
  692. fail
  693. .Ll3:
  694. addx_l_reg32_rdpostdec:
  695. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  696. set_ccr_zero
  697. ;; addx.l rs8,@eRd- ; Addx to register post-decrement
  698. mov #long_dest, er0
  699. mov.l #0x50505, er1
  700. addx.l er1, @er0-
  701. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  702. test_ovf_clear
  703. test_zero_clear
  704. test_neg_clear
  705. test_h_gr32 long_dest-4 er0 ; er0 contains address minus one
  706. test_h_gr32 0x50505 er1 ; er1 contains the test load
  707. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  708. test_gr_a5a5 3
  709. test_gr_a5a5 4
  710. test_gr_a5a5 5
  711. test_gr_a5a5 6
  712. test_gr_a5a5 7
  713. ;; Now check the result of the add to memory.
  714. cmp.l #0x141414, @long_dest
  715. beq .Ll4
  716. fail
  717. .Ll4:
  718. addx_l_rsind_reg32:
  719. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  720. set_ccr_zero
  721. ;; addx.l @eRs,rd8 ; Addx from reg indirect to reg
  722. mov #long_src, er0
  723. addx.l @er0, er1
  724. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  725. test_ovf_clear
  726. test_zero_clear
  727. test_neg_set
  728. test_h_gr32 long_src er0 ; er0 still contains address
  729. test_h_gr32 0xa5aaaaaa er1 ; er1 contains the sum
  730. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  731. test_gr_a5a5 3
  732. test_gr_a5a5 4
  733. test_gr_a5a5 5
  734. test_gr_a5a5 6
  735. test_gr_a5a5 7
  736. addx_l_rspostdec_reg32:
  737. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  738. set_ccr_zero
  739. ;; addx.l @eRs-,rd8 ; Addx to register post-decrement
  740. mov #long_src, er0
  741. addx.l @er0-, er1
  742. test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
  743. test_ovf_clear
  744. test_zero_clear
  745. test_neg_set
  746. test_h_gr32 long_src-4 er0 ; er0 contains address minus one
  747. test_h_gr32 0xa5aaaaaa er1 ; er1 contains the sum
  748. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  749. test_gr_a5a5 3
  750. test_gr_a5a5 4
  751. test_gr_a5a5 5
  752. test_gr_a5a5 6
  753. test_gr_a5a5 7
  754. addx_l_rsind_rdind:
  755. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  756. set_ccr_zero
  757. ;; addx.l @eRs,rd8 ; Addx from reg indirect to reg
  758. mov #long_src, er0
  759. mov #long_dest, er1
  760. addx.l @er0, @er1
  761. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  762. test_ovf_clear
  763. test_zero_clear
  764. test_neg_clear
  765. test_h_gr32 long_src er0 ; er0 still contains src address
  766. test_h_gr32 long_dest er1 ; er1 still contains dst address
  767. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  768. test_gr_a5a5 3
  769. test_gr_a5a5 4
  770. test_gr_a5a5 5
  771. test_gr_a5a5 6
  772. test_gr_a5a5 7
  773. ;; Now check the result of the add to memory.
  774. cmp.l #0x191919, @long_dest
  775. beq .Ll5
  776. fail
  777. .Ll5:
  778. addx_l_rspostdec_rdpostdec:
  779. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  780. set_ccr_zero
  781. ;; addx.l @eRs-,rd8 ; Addx to register post-decrement
  782. mov #long_src, er0
  783. mov #long_dest, er1
  784. addx.l @er0-, @er1-
  785. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  786. test_ovf_clear
  787. test_zero_clear
  788. test_neg_clear
  789. test_h_gr32 long_src-4 er0 ; er0 contains src address minus one
  790. test_h_gr32 long_dest-4 er1 ; er1 contains dst address minus one
  791. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  792. test_gr_a5a5 3
  793. test_gr_a5a5 4
  794. test_gr_a5a5 5
  795. test_gr_a5a5 6
  796. test_gr_a5a5 7
  797. ;; Now check the result of the add to memory.
  798. cmp.l #0x1e1e1e, @long_dest
  799. beq .Ll6
  800. fail
  801. .Ll6:
  802. .endif
  803. pass
  804. exit 0