addb.s 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  1. # Hitachi H8 testcase 'add.b'
  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. # add.b #xx:8, rd ; 8 rd xxxxxxxx
  13. # add.b #xx:8, @erd ; 7 d rd ???? 8 ???? xxxxxxxx
  14. # add.b #xx:8, @erd+ ; 0 1 7 4 6 c rd 1??? 8 ???? xxxxxxxx
  15. # add.b #xx:8, @erd- ; 0 1 7 6 6 c rd 1??? 8 ???? xxxxxxxx
  16. # add.b #xx:8, @+erd ; 0 1 7 5 6 c rd 1??? 8 ???? xxxxxxxx
  17. # add.b #xx:8, @-erd ; 0 1 7 7 6 c rd 1??? 8 ???? xxxxxxxx
  18. # add.b #xx:8, @(d:16, erd) ; 0 1 7 4 6 e b30 | rd, b31, dd:16 8 ???? xxxxxxxx
  19. # add.b #xx:8, @(d:32, erd) ; 7 8 b30 | rd, 4 6 a 2 8 dd:32 8 ???? xxxxxxxx
  20. # add.b #xx:8, @aa:8 ; 7 f aaaaaaaa 8 ???? xxxxxxxx
  21. # add.b #xx:8, @aa:16 ; 6 a 1 1??? aa:16 8 ???? xxxxxxxx
  22. # add.b #xx:8, @aa:32 ; 6 a 3 1??? aa:32 8 ???? xxxxxxxx
  23. # add.b rs, rd ; 0 8 rs rd
  24. # add.b reg8, @erd ; 7 d rd ???? 0 8 rs ????
  25. # add.b reg8, @erd+ ; 0 1 7 9 8 rd 1 rs
  26. # add.b reg8, @erd- ; 0 1 7 9 a rd 1 rs
  27. # add.b reg8, @+erd ; 0 1 7 9 9 rd 1 rs
  28. # add.b reg8, @-erd ; 0 1 7 9 b rd 1 rs
  29. # add.b reg8, @(d:16, erd) ; 0 1 7 9 c b30 | rd32, 1 rs8 imm16
  30. # add.b reg8, @(d:32, erd) ; 0 1 7 9 d b31 | rd32, 1 rs8 imm32
  31. # add.b reg8, @aa:8 ; 7 f aaaaaaaa 0 8 rs ????
  32. # add.b reg8, @aa:16 ; 6 a 1 1??? aa:16 0 8 rs ????
  33. # add.b reg8, @aa:32 ; 6 a 3 1??? aa:32 0 8 rs ????
  34. #
  35. # Coming soon:
  36. # add.b #xx:8, @(d:2, erd) ; 0 1 7 b30 | b21 | dd:2, 8 ???? xxxxxxxx
  37. # add.b reg8, @(d:2, erd) ; 0 1 7 9 dd:2 rd32 1 rs8
  38. # ...
  39. .data
  40. pre_byte: .byte 0
  41. byte_dest: .byte 0
  42. post_byte: .byte 0
  43. start
  44. add_b_imm8_reg:
  45. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  46. ;; fixme set ccr
  47. ;; add.b #xx:8,Rd
  48. add.b #5:8, r0l ; Immediate 8-bit src, reg8 dst
  49. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  50. test_h_gr16 0xa5aa r0 ; add result: a5 + 5
  51. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  52. test_h_gr32 0xa5a5a5aa er0 ; add result: a5 + 5
  53. .endif
  54. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  55. test_gr_a5a5 2
  56. test_gr_a5a5 3
  57. test_gr_a5a5 4
  58. test_gr_a5a5 5
  59. test_gr_a5a5 6
  60. test_gr_a5a5 7
  61. .if (sim_cpu == h8sx)
  62. add_b_imm8_rdind:
  63. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  64. set_ccr_zero
  65. ;; add.b #xx:8,@eRd
  66. mov #byte_dest, er0
  67. add.b #5:8, @er0 ; Immediate 8-bit src, reg indirect dst
  68. ;;; .word 0x7d00
  69. ;;; .word 0x8005
  70. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  71. test_ovf_clear
  72. test_zero_clear
  73. test_neg_clear
  74. test_h_gr32 byte_dest, er0 ; er0 still contains address
  75. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  76. test_gr_a5a5 2
  77. test_gr_a5a5 3
  78. test_gr_a5a5 4
  79. test_gr_a5a5 5
  80. test_gr_a5a5 6
  81. test_gr_a5a5 7
  82. ;; Now check the result of the add to memory.
  83. sub.b r0l, r0l
  84. mov.b @byte_dest, r0l
  85. cmp.b #5, r0l
  86. beq .L1
  87. fail
  88. .L1:
  89. add_b_imm8_rdpostinc:
  90. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  91. set_ccr_zero
  92. ;; add.b #xx:8,@eRd+
  93. mov #byte_dest, er0
  94. add.b #5:8, @er0+ ; Immediate 8-bit src, reg post-inc dst
  95. ;;; .word 0x0174
  96. ;;; .word 0x6c08
  97. ;;; .word 0x8005
  98. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  99. test_ovf_clear
  100. test_zero_clear
  101. test_neg_clear
  102. test_h_gr32 post_byte, er0 ; er0 contains address plus one
  103. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  104. test_gr_a5a5 2
  105. test_gr_a5a5 3
  106. test_gr_a5a5 4
  107. test_gr_a5a5 5
  108. test_gr_a5a5 6
  109. test_gr_a5a5 7
  110. ;; Now check the result of the add to memory.
  111. sub.b r0l, r0l
  112. mov.b @byte_dest, r0l
  113. cmp.b #10, r0l
  114. beq .L2
  115. fail
  116. .L2:
  117. add_b_imm8_rdpostdec:
  118. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  119. set_ccr_zero
  120. ;; add.b #xx:8,@eRd-
  121. mov #byte_dest, er0
  122. add.b #5:8, @er0- ; Immediate 8-bit src, reg post-dec dst
  123. ;;; .word 0x0176
  124. ;;; .word 0x6c08
  125. ;;; .word 0x8005
  126. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  127. test_ovf_clear
  128. test_zero_clear
  129. test_neg_clear
  130. test_h_gr32 pre_byte, er0 ; er0 contains address minus one
  131. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  132. test_gr_a5a5 2
  133. test_gr_a5a5 3
  134. test_gr_a5a5 4
  135. test_gr_a5a5 5
  136. test_gr_a5a5 6
  137. test_gr_a5a5 7
  138. ;; Now check the result of the add to memory.
  139. sub.b r0l, r0l
  140. mov.b @byte_dest, r0l
  141. cmp.b #15, r0l
  142. beq .L3
  143. fail
  144. .L3:
  145. add_b_imm8_rdpreinc:
  146. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  147. set_ccr_zero
  148. ;; add.b #xx:8,@+eRd
  149. mov #pre_byte, er0
  150. add.b #5:8, @+er0 ; Immediate 8-bit src, reg pre-inc dst
  151. ;;; .word 0x0175
  152. ;;; .word 0x6c08
  153. ;;; .word 0x8005
  154. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  155. test_ovf_clear
  156. test_zero_clear
  157. test_neg_clear
  158. test_h_gr32 byte_dest, er0 ; er0 contains destination address
  159. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  160. test_gr_a5a5 2
  161. test_gr_a5a5 3
  162. test_gr_a5a5 4
  163. test_gr_a5a5 5
  164. test_gr_a5a5 6
  165. test_gr_a5a5 7
  166. ;; Now check the result of the add to memory.
  167. sub.b r0l, r0l
  168. mov.b @byte_dest, r0l
  169. cmp.b #20, r0l
  170. beq .L4
  171. fail
  172. .L4:
  173. add_b_imm8_rdpredec:
  174. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  175. set_ccr_zero
  176. ;; add.b #xx:8,@-eRd
  177. mov #post_byte, er0
  178. add.b #5:8, @-er0 ; Immediate 8-bit src, reg pre-dec dst
  179. ;;; .word 0x0177
  180. ;;; .word 0x6c08
  181. ;;; .word 0x8005
  182. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  183. test_ovf_clear
  184. test_zero_clear
  185. test_neg_clear
  186. test_h_gr32 byte_dest, er0 ; er0 contains destination address
  187. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  188. test_gr_a5a5 2
  189. test_gr_a5a5 3
  190. test_gr_a5a5 4
  191. test_gr_a5a5 5
  192. test_gr_a5a5 6
  193. test_gr_a5a5 7
  194. ;; Now check the result of the add to memory.
  195. sub.b r0l, r0l
  196. mov.b @byte_dest, r0l
  197. cmp.b #25, r0l
  198. beq .L5
  199. fail
  200. .L5:
  201. add_b_imm8_disp16:
  202. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  203. set_ccr_zero
  204. ;; add.b #xx:8,@(dd:16, eRd)
  205. mov #post_byte, er0
  206. add.b #5:8, @(-1:16, er0) ; Immediate 8-bit src, 16-bit reg disp dest.
  207. ;;; .word 0x0174
  208. ;;; .word 0x6e08
  209. ;;; .word 0xffff
  210. ;;; .word 0x8005
  211. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  212. test_ovf_clear
  213. test_zero_clear
  214. test_neg_clear
  215. test_h_gr32 post_byte, er0 ; er0 contains address plus one
  216. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  217. test_gr_a5a5 2
  218. test_gr_a5a5 3
  219. test_gr_a5a5 4
  220. test_gr_a5a5 5
  221. test_gr_a5a5 6
  222. test_gr_a5a5 7
  223. ;; Now check the result of the add to memory.
  224. sub.b r0l, r0l
  225. mov.b @byte_dest, r0l
  226. cmp.b #30, r0l
  227. beq .L6
  228. fail
  229. .L6:
  230. add_b_imm8_disp32:
  231. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  232. set_ccr_zero
  233. ;; add.b #xx:8,@(dd:32, eRd)
  234. mov #pre_byte, er0
  235. add.b #5:8, @(1:32, er0) ; Immediate 8-bit src, 32-bit reg disp. dest.
  236. ;;; .word 0x7804
  237. ;;; .word 0x6a28
  238. ;;; .word 0x0000
  239. ;;; .word 0x0001
  240. ;;; .word 0x8005
  241. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  242. test_ovf_clear
  243. test_zero_clear
  244. test_neg_clear
  245. test_h_gr32 pre_byte, er0 ; er0 contains address minus one
  246. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  247. test_gr_a5a5 2
  248. test_gr_a5a5 3
  249. test_gr_a5a5 4
  250. test_gr_a5a5 5
  251. test_gr_a5a5 6
  252. test_gr_a5a5 7
  253. ;; Now check the result of the add to memory.
  254. sub.b r0l, r0l
  255. mov.b @byte_dest, r0l
  256. cmp.b #35, r0l
  257. beq .L7
  258. fail
  259. .L7:
  260. add_b_imm8_abs8:
  261. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  262. set_ccr_zero
  263. ;; add.b reg8,@aa:8
  264. ;; NOTE: for abs8, we will use the SBR register as a base,
  265. ;; since otherwise we would have to make sure that the destination
  266. ;; was in the zero page.
  267. ;;
  268. mov #byte_dest-100, er0
  269. ldc er0, sbr
  270. add.b #5, @100:8 ; 8-bit reg src, 8-bit absolute dest
  271. ;;; .word 0x7f64
  272. ;;; .word 0x8005
  273. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  274. test_ovf_clear
  275. test_zero_clear
  276. test_neg_clear
  277. test_h_gr32 byte_dest-100, er0 ; reg 0 has base address
  278. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  279. test_gr_a5a5 2
  280. test_gr_a5a5 3
  281. test_gr_a5a5 4
  282. test_gr_a5a5 5
  283. test_gr_a5a5 6
  284. test_gr_a5a5 7
  285. ;; Now check the result of the add to memory.
  286. sub.b r0l, r0l
  287. mov.b @byte_dest, r0l
  288. cmp.b #40, r0l
  289. beq .L8
  290. fail
  291. .L8:
  292. add_b_imm8_abs16:
  293. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  294. set_ccr_zero
  295. ;; add.b #xx:8,@aa:16
  296. add.b #5:8, @byte_dest:16 ; Immediate 8-bit src, 16-bit absolute dest
  297. ;;; .word 0x6a18
  298. ;;; .word byte_dest
  299. ;;; .word 0x8005
  300. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  301. test_ovf_clear
  302. test_zero_clear
  303. test_neg_clear
  304. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  305. test_gr_a5a5 1
  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. ;; Now check the result of the add to memory.
  313. sub.b r0l, r0l
  314. mov.b @byte_dest, r0l
  315. cmp.b #45, r0l
  316. beq .L9
  317. fail
  318. .L9:
  319. add_b_imm8_abs32:
  320. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  321. set_ccr_zero
  322. ;; add.b #xx:8,@aa:32
  323. add.b #5:8, @byte_dest:32 ; Immediate 8-bit src, 32-bit absolute dest
  324. ;;; .word 0x6a38
  325. ;;; .long byte_dest
  326. ;;; .word 0x8005
  327. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  328. test_ovf_clear
  329. test_zero_clear
  330. test_neg_clear
  331. test_gr_a5a5 0 ; Make sure other general regs not disturbed
  332. test_gr_a5a5 1
  333. test_gr_a5a5 2
  334. test_gr_a5a5 3
  335. test_gr_a5a5 4
  336. test_gr_a5a5 5
  337. test_gr_a5a5 6
  338. test_gr_a5a5 7
  339. ;; Now check the result of the add to memory.
  340. sub.b r0l, r0l
  341. mov.b @byte_dest, r0l
  342. cmp.b #50, r0l
  343. beq .L10
  344. fail
  345. .L10:
  346. .endif
  347. add_b_reg8_reg8:
  348. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  349. ;; fixme set ccr
  350. ;; add.b Rs,Rd
  351. mov.b #5, r0h
  352. add.b r0h, r0l ; Register operand
  353. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  354. test_h_gr16 0x05aa r0 ; add result: a5 + 5
  355. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  356. test_h_gr32 0xa5a505aa er0 ; add result: a5 + 5
  357. .endif
  358. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  359. test_gr_a5a5 2
  360. test_gr_a5a5 3
  361. test_gr_a5a5 4
  362. test_gr_a5a5 5
  363. test_gr_a5a5 6
  364. test_gr_a5a5 7
  365. .if (sim_cpu == h8sx)
  366. add_b_reg8_rdind:
  367. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  368. set_ccr_zero
  369. ;; add.b rs8,@eRd ; Add to register indirect
  370. mov #byte_dest, er0
  371. mov #5, r1l
  372. add.b r1l, @er0 ; reg8 src, reg indirect dest
  373. ;;; .word 0x7d00
  374. ;;; .word 0x0890
  375. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  376. test_ovf_clear
  377. test_zero_clear
  378. test_neg_clear
  379. test_h_gr32 byte_dest er0 ; er0 still contains address
  380. test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
  381. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  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. ;; Now check the result of the add to memory.
  388. sub.b r0l, r0l
  389. mov.b @byte_dest, r0l
  390. cmp.b #55, r0l
  391. beq .L11
  392. fail
  393. .L11:
  394. add_b_reg8_rdpostinc:
  395. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  396. set_ccr_zero
  397. ;; add.b rs8,@eRd+ ; Add to register post-increment
  398. mov #byte_dest, er0
  399. mov #5, r1l
  400. add.b r1l, @er0+ ; reg8 src, reg post-incr dest
  401. ;;; .word 0x0179
  402. ;;; .word 0x8019
  403. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  404. test_ovf_clear
  405. test_zero_clear
  406. test_neg_clear
  407. test_h_gr32 post_byte er0 ; er0 contains address plus one
  408. test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
  409. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  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. ;; Now check the result of the add to memory.
  416. sub.b r0l, r0l
  417. mov.b @byte_dest, r0l
  418. cmp.b #60, r0l
  419. beq .L12
  420. fail
  421. .L12:
  422. ;; special case same register
  423. mov.l #byte_dest, er0
  424. mov.b @er0, r1h
  425. mov.b r0l, r1l
  426. add.b r0l, @er0+
  427. inc.b r1l
  428. add.b r1h, r1l
  429. mov.b @byte_dest, r0l
  430. cmp.b r1l, r0l
  431. beq .L22
  432. fail
  433. .L22:
  434. ;; restore previous value
  435. mov.b r1h, @byte_dest
  436. add_b_reg8_rdpostdec:
  437. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  438. set_ccr_zero
  439. ;; add.b rs8,@eRd- ; Add to register post-decrement
  440. mov #byte_dest, er0
  441. mov #5, r1l
  442. add.b r1l, @er0- ; reg8 src, reg post-decr dest
  443. ;;; .word 0x0179
  444. ;;; .word 0xa019
  445. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  446. test_ovf_clear
  447. test_zero_clear
  448. test_neg_clear
  449. test_h_gr32 pre_byte er0 ; er0 contains address minus one
  450. test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
  451. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  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. ;; Now check the result of the add to memory.
  458. sub.b r0l, r0l
  459. mov.b @byte_dest, r0l
  460. cmp.b #65, r0l
  461. beq .L13
  462. fail
  463. .L13:
  464. ;; special case same register
  465. mov.l #byte_dest, er0
  466. mov.b @er0, r1h
  467. mov.b r0l, r1l
  468. add.b r0l, @er0-
  469. dec.b r1l
  470. add.b r1h, r1l
  471. mov.b @byte_dest, r0l
  472. cmp.b r1l, r0l
  473. beq .L23
  474. fail
  475. .L23:
  476. ;; restore previous value
  477. mov.b r1h, @byte_dest
  478. add_b_reg8_rdpreinc:
  479. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  480. set_ccr_zero
  481. ;; add.b rs8,@+eRd ; Add to register pre-increment
  482. mov #pre_byte, er0
  483. mov #5, r1l
  484. add.b r1l, @+er0 ; reg8 src, reg pre-incr dest
  485. ;;; .word 0x0179
  486. ;;; .word 0x9019
  487. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  488. test_ovf_clear
  489. test_zero_clear
  490. test_neg_clear
  491. test_h_gr32 byte_dest er0 ; er0 contains destination address
  492. test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
  493. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  494. test_gr_a5a5 3
  495. test_gr_a5a5 4
  496. test_gr_a5a5 5
  497. test_gr_a5a5 6
  498. test_gr_a5a5 7
  499. ;; Now check the result of the add to memory.
  500. sub.b r0l, r0l
  501. mov.b @byte_dest, r0l
  502. cmp.b #70, r0l
  503. beq .L14
  504. fail
  505. .L14:
  506. ;; special case same register
  507. mov.b @byte_dest, r1h
  508. mov.l #pre_byte, er0
  509. mov.b r0l, r1l
  510. add.b r0l, @+er0
  511. inc.b r1l
  512. add.b r1h, r1l
  513. mov.b @byte_dest, r0l
  514. cmp.b r1l, r0l
  515. beq .L24
  516. fail
  517. .L24:
  518. ;; restore previous value
  519. mov.b r1h, @byte_dest
  520. add_b_reg8_rdpredec:
  521. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  522. set_ccr_zero
  523. ;; add.b rs8,@-eRd ; Add to register pre-decrement
  524. mov #post_byte, er0
  525. mov #5, r1l
  526. add.b r1l, @-er0 ; reg8 src, reg pre-decr dest
  527. ;;; .word 0x0179
  528. ;;; .word 0xb019
  529. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  530. test_ovf_clear
  531. test_zero_clear
  532. test_neg_clear
  533. test_h_gr32 byte_dest er0 ; er0 contains destination address
  534. test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
  535. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  536. test_gr_a5a5 3
  537. test_gr_a5a5 4
  538. test_gr_a5a5 5
  539. test_gr_a5a5 6
  540. test_gr_a5a5 7
  541. ;; Now check the result of the add to memory.
  542. sub.b r0l, r0l
  543. mov.b @byte_dest, r0l
  544. cmp.b #75, r0l
  545. beq .L15
  546. fail
  547. .L15:
  548. ;; special case same register
  549. mov.l #post_byte, er0
  550. mov.b @byte_dest, r1h
  551. mov.b r0l, r1l
  552. add.b r0l, @-er0
  553. dec.b r1l
  554. add.b r1h, r1l
  555. mov.b @byte_dest, r0l
  556. cmp.b r1l, r0l
  557. beq .L25
  558. fail
  559. .L25:
  560. ;; restore previous value
  561. mov.b r1h, @byte_dest
  562. add_b_reg8_disp16:
  563. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  564. set_ccr_zero
  565. ;; add.b rs8,@(dd:16, eRd) ; Add to register + 16-bit displacement
  566. mov #pre_byte, er0
  567. mov #5, r1l
  568. add.b r1l, @(1:16, er0) ; reg8 src, 16-bit reg disp dest
  569. ;;; .word 0x0179
  570. ;;; .word 0xc019
  571. ;;; .word 0x0001
  572. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  573. test_ovf_clear
  574. test_zero_clear
  575. test_neg_clear
  576. test_h_gr32 pre_byte er0 ; er0 contains address minus one
  577. test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
  578. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  579. test_gr_a5a5 3
  580. test_gr_a5a5 4
  581. test_gr_a5a5 5
  582. test_gr_a5a5 6
  583. test_gr_a5a5 7
  584. ;; Now check the result of the add to memory.
  585. sub.b r0l, r0l
  586. mov.b @byte_dest, r0l
  587. cmp.b #80, r0l
  588. beq .L16
  589. fail
  590. .L16:
  591. add_b_reg8_disp32:
  592. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  593. set_ccr_zero
  594. ;; add.b rs8,@-eRd ; Add to register plus 32-bit displacement
  595. mov #post_byte, er0
  596. mov #5, r1l
  597. add.b r1l, @(-1:32, er0) ; reg8 src, 32-bit reg disp dest
  598. ;;; .word 0x0179
  599. ;;; .word 0xd819
  600. ;;; .word 0xffff
  601. ;;; .word 0xffff
  602. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  603. test_ovf_clear
  604. test_zero_clear
  605. test_neg_clear
  606. test_h_gr32 post_byte er0 ; er0 contains address plus one
  607. test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
  608. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  609. test_gr_a5a5 3
  610. test_gr_a5a5 4
  611. test_gr_a5a5 5
  612. test_gr_a5a5 6
  613. test_gr_a5a5 7
  614. ;; Now check the result of the add to memory.
  615. sub.b r0l, r0l
  616. mov.b @byte_dest, r0l
  617. cmp.b #85, r0l
  618. beq .L17
  619. fail
  620. .L17:
  621. add_b_reg8_abs8:
  622. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  623. set_ccr_zero
  624. ;; add.b reg8,@aa:8
  625. ;; NOTE: for abs8, we will use the SBR register as a base,
  626. ;; since otherwise we would have to make sure that the destination
  627. ;; was in the zero page.
  628. ;;
  629. mov #byte_dest-100, er0
  630. ldc er0, sbr
  631. mov #5, r1l
  632. add.b r1l, @100:8 ; 8-bit reg src, 8-bit absolute dest
  633. ;;; .word 0x7f64
  634. ;;; .word 0x0890
  635. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  636. test_ovf_clear
  637. test_zero_clear
  638. test_neg_clear
  639. test_h_gr32 byte_dest-100, er0 ; reg 0 has base address
  640. test_h_gr32 0xa5a5a505 er1 ; reg 1 has test load
  641. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  642. test_gr_a5a5 3
  643. test_gr_a5a5 4
  644. test_gr_a5a5 5
  645. test_gr_a5a5 6
  646. test_gr_a5a5 7
  647. ;; Now check the result of the add to memory.
  648. sub.b r0l, r0l
  649. mov.b @byte_dest, r0l
  650. cmp.b #90, r0l
  651. beq .L18
  652. fail
  653. .L18:
  654. add_b_reg8_abs16:
  655. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  656. set_ccr_zero
  657. ;; add.b reg8,@aa:16
  658. mov #5, r0l
  659. add.b r0l, @byte_dest:16 ; 8-bit reg src, 16-bit absolute dest
  660. ;;; .word 0x6a18
  661. ;;; .word byte_dest
  662. ;;; .word 0x0880
  663. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  664. test_ovf_clear
  665. test_zero_clear
  666. test_neg_clear
  667. test_h_gr32 0xa5a5a505 er0 ; reg 0 has test load
  668. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  669. test_gr_a5a5 2
  670. test_gr_a5a5 3
  671. test_gr_a5a5 4
  672. test_gr_a5a5 5
  673. test_gr_a5a5 6
  674. test_gr_a5a5 7
  675. ;; Now check the result of the add to memory.
  676. sub.b r0l, r0l
  677. mov.b @byte_dest, r0l
  678. cmp.b #95, r0l
  679. beq .L19
  680. fail
  681. .L19:
  682. add_b_reg8_abs32:
  683. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  684. set_ccr_zero
  685. ;; add.b reg8,@aa:32
  686. mov #5, r0l
  687. add.b r0l, @byte_dest:32 ; 8-bit reg src, 32-bit absolute dest
  688. ;;; .word 0x6a38
  689. ;;; .long byte_dest
  690. ;;; .word 0x0880
  691. test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
  692. test_ovf_clear
  693. test_zero_clear
  694. test_neg_clear
  695. test_h_gr32 0xa5a5a505 er0 ; reg 0 has test load
  696. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  697. test_gr_a5a5 2
  698. test_gr_a5a5 3
  699. test_gr_a5a5 4
  700. test_gr_a5a5 5
  701. test_gr_a5a5 6
  702. test_gr_a5a5 7
  703. ;; Now check the result of the add to memory.
  704. sub.b r0l, r0l
  705. mov.b @byte_dest, r0l
  706. cmp.b #100, r0l
  707. beq .L20
  708. fail
  709. .L20:
  710. .endif
  711. pass
  712. exit 0