1# Hitachi H8 testcase 'movmd'
2# mach(): h8sx
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	.data
14byte_src:
15	.byte	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
16byte_dst:
17	.byte	0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0
18
19	.align 2
20word_src:
21	.word	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
22word_dst:
23	.word	0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0
24
25	.align 4
26long_src:
27	.long	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
28long_dst:
29	.long	0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0
30
31	start
32.if (sim_cpu == h8sx)
33movmd_b:#
34	# Byte block transfer
35	#
36	set_grs_a5a5
37
38	mov	#byte_src, er5
39	mov	#byte_dst, er6
40	mov	#10, r4
41	set_ccr_zero
42	;; movmd.b
43	movmd.b
44;;; 	.word	0x7b94
45
46	test_cc_clear
47	test_gr_a5a5 0
48	test_gr_a5a5 1
49	test_gr_a5a5 2
50	test_gr_a5a5 3
51	test_h_gr32  0xa5a50000  er4
52	test_h_gr32  byte_src+10 er5
53	test_h_gr32  byte_dst+10 er6
54	test_gr_a5a5 7
55
56	#
57	# Now make sure exactly 10 bytes were transferred.
58	memcmp	byte_src byte_dst 10
59	cmp.b	#0, @byte_dst+10
60	beq	.L0
61	fail
62.L0:
63
64movmd_w:#
65	# Word block transfer
66	#
67	set_grs_a5a5
68
69	mov	#word_src, er5
70	mov	#word_dst, er6
71	mov	#10, r4
72	set_ccr_zero
73	;; movmd.w
74	movmd.w
75;;; 	.word	0x7ba4
76
77	test_cc_clear
78	test_gr_a5a5 0
79	test_gr_a5a5 1
80	test_gr_a5a5 2
81	test_gr_a5a5 3
82	test_h_gr32  0xa5a50000  er4
83	test_h_gr32  word_src+20 er5
84	test_h_gr32  word_dst+20 er6
85	test_gr_a5a5 7
86
87	#
88	# Now make sure exactly 20 bytes were transferred.
89	memcmp	word_src word_dst 20
90	cmp.w	#0, @word_dst+20
91	beq	.L1
92	fail
93.L1:
94
95movmd_l:#
96	# Long block transfer
97	#
98	set_grs_a5a5
99
100	mov	#long_src, er5
101	mov	#long_dst, er6
102	mov	#10, r4
103	set_ccr_zero
104	;; movmd.b
105	movmd.l
106;;; 	.word	0x7bb4
107
108	test_cc_clear
109	test_gr_a5a5 0
110	test_gr_a5a5 1
111	test_gr_a5a5 2
112	test_gr_a5a5 3
113	test_h_gr32  0xa5a50000  er4
114	test_h_gr32  long_src+40 er5
115	test_h_gr32  long_dst+40 er6
116	test_gr_a5a5 7
117
118	#
119	# Now make sure exactly 40 bytes were transferred.
120	memcmp	long_src long_dst 40
121	cmp.l	#0, @long_dst+40
122	beq	.L2
123	fail
124.L2:
125
126.endif
127	pass
128
129	exit 0
130