1# Hitachi H8 testcase 'ldm', 'stm'
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	.data
13	.align 4
14_stack:	.long	0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0
15	.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
16	.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17	.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
18_stack_top:
19
20	start
21
22.if (sim_cpu == h8300s || sim_cpu == h8sx)	; Earlier versions, no exr
23stm_2reg:
24	set_grs_a5a5
25	mov	#_stack_top, er7
26	mov	#2, er2
27	mov	#3, er3
28
29	set_ccr_zero
30	stm	er2-er3, @-sp
31	test_cc_clear
32
33	test_gr_a5a5 0		; Make sure other general regs not disturbed
34	test_gr_a5a5 1
35	test_h_gr32  2	er2
36	test_h_gr32  3	er3
37	test_gr_a5a5 4
38	test_gr_a5a5 5
39	test_gr_a5a5 6
40	test_h_gr32  _stack_top-8, er7
41
42	mov	@_stack_top-4, er0
43	cmp	#2, er0
44	bne	fail1
45
46	mov	@_stack_top-8, er0
47	cmp	#3, er0
48	bne	fail1
49
50	mov	@_stack_top-12, er0
51	cmp	#0, er0
52	bne	fail1
53
54stm_3reg:
55	set_grs_a5a5
56	mov	#_stack_top, er7
57	mov	#4, er4
58	mov	#5, er5
59	mov	#6, er6
60
61	set_ccr_zero
62	stm	er4-er6, @-sp
63	test_cc_clear
64
65	test_gr_a5a5 0		; Make sure other general regs not disturbed
66	test_gr_a5a5 1
67	test_gr_a5a5 2
68	test_gr_a5a5 3
69	test_h_gr32  4	er4
70	test_h_gr32  5	er5
71	test_h_gr32  6	er6
72	test_h_gr32  _stack_top-12, er7
73
74	mov	@_stack_top-4, er0
75	cmp	#4, er0
76	bne	fail1
77
78	mov	@_stack_top-8, er0
79	cmp	#5, er0
80	bne	fail1
81
82	mov	@_stack_top-12, er0
83	cmp	#6, er0
84	bne	fail1
85
86	mov	@_stack_top-16, er0
87	cmp	#0, er0
88	bne	fail1
89
90stm_4reg:
91	set_grs_a5a5
92	mov	#_stack_top, er7
93	mov	#1, er0
94	mov	#2, er1
95	mov	#3, er2
96	mov	#4, er3
97
98	set_ccr_zero
99	stm	er0-er3, @-sp
100	test_cc_clear
101
102	test_h_gr32  1	er0
103	test_h_gr32  2	er1
104	test_h_gr32  3	er2
105	test_h_gr32  4	er3
106	test_gr_a5a5 4		; Make sure other general regs not disturbed
107	test_gr_a5a5 5
108	test_gr_a5a5 6
109	test_h_gr32  _stack_top-16, er7
110
111	mov	@_stack_top-4, er0
112	cmp	#1, er0
113	bne	fail1
114
115	mov	@_stack_top-8, er0
116	cmp	#2, er0
117	bne	fail1
118
119	mov	@_stack_top-12, er0
120	cmp	#3, er0
121	bne	fail1
122
123	mov	@_stack_top-16, er0
124	cmp	#4, er0
125	bne	fail1
126
127	mov	@_stack_top-20, er0
128	cmp	#0, er0
129	bne	fail1
130
131ldm_2reg:
132	set_grs_a5a5
133	mov	#_stack, er7
134
135	set_ccr_zero
136	ldm	@sp+, er2-er3
137	test_cc_clear
138
139	test_gr_a5a5 0		; Make sure other general regs not disturbed
140	test_gr_a5a5 1
141	test_h_gr32  1	er2
142	test_h_gr32  0	er3
143	test_gr_a5a5 4
144	test_gr_a5a5 5
145	test_gr_a5a5 6
146	test_h_gr32  _stack+8, er7
147
148ldm_3reg:
149	set_grs_a5a5
150	mov	#_stack+4, er7
151
152	set_ccr_zero
153	ldm	@sp+, er4-er6
154	test_cc_clear
155
156	test_gr_a5a5 0		; Make sure other general regs not disturbed
157	test_gr_a5a5 1
158	test_gr_a5a5 2
159	test_gr_a5a5 3
160	test_h_gr32  3	er4
161	test_h_gr32  2	er5
162	test_h_gr32  1	er6
163	test_h_gr32  _stack+16, er7
164
165ldm_4reg:
166	set_grs_a5a5
167	mov	#_stack+4, er7
168
169	set_ccr_zero
170	ldm	@sp+, er0-er3
171	test_cc_clear
172
173	test_h_gr32  4	er0
174	test_h_gr32  3	er1
175	test_h_gr32  2	er2
176	test_h_gr32  1	er3
177	test_gr_a5a5 4		; Make sure other general regs not disturbed
178	test_gr_a5a5 5
179	test_gr_a5a5 6
180	test_h_gr32  _stack+20, er7
181.endif
182
183pushpop:
184	set_grs_a5a5
185.if (sim_cpu == h8300)
186	mov	#_stack_top, r7
187	mov	#12, r1
188	mov	#34, r2
189	mov	#56, r3
190	push	r1
191	push	r2
192	push	r3
193	pop	r4
194	pop	r5
195	pop	r6
196
197	test_gr_a5a5 0		; Make sure other general _reg_ not disturbed
198	test_h_gr16  12	r1
199	test_h_gr16  34	r2
200	test_h_gr16  56	r3
201	test_h_gr16  56	r4
202	test_h_gr16  34	r5
203	test_h_gr16  12	r6
204	mov	#_stack_top, r0
205	cmp.w	r0, r7
206	bne	fail1
207.else
208	mov	#_stack_top, er7
209	mov	#12, er1
210	mov	#34, er2
211	mov	#56, er3
212	push	er1
213	push	er2
214	push	er3
215	pop	er4
216	pop	er5
217	pop	er6
218
219	test_gr_a5a5 0		; Make sure other general _reg_ not disturbed
220	test_h_gr32  12	er1
221	test_h_gr32  34	er2
222	test_h_gr32  56	er3
223	test_h_gr32  56	er4
224	test_h_gr32  34	er5
225	test_h_gr32  12	er6
226	test_h_gr32  _stack_top, er7
227.endif
228
229	pass
230
231	exit 0
232
233fail1:	fail
234