subx.s 22 KB

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