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