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
44pre_byte:	.byte 0
45byte_dest:	.byte 0
46post_byte:	.byte 0
47
48	start
49
50add_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)
71add_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
103add_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
136add_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
169add_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
202add_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
235add_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
269add_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
304add_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
341add_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
373add_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
407add_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)
429add_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
463add_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
511add_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
559add_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
607add_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
655add_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
690add_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
726add_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
764add_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
797add_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