1# sh testcase for divs and divu
2# mach:	 all
3# as(sh):	-defsym sim_cpu=0
4# as(shdsp):	-defsym sim_cpu=1 -dsp
5
6	.include "testutils.inc"
7
8	start
9
10divs_1:	! divide by one
11	set_grs_a5a5
12	mov	#1, r0
13	divs	r0, r1
14	assertreg0   1
15	test_gr_a5a5 r1
16	test_gr_a5a5 r2
17	test_gr_a5a5 r3
18	test_gr_a5a5 r4
19	test_gr_a5a5 r5
20	test_gr_a5a5 r6
21	test_gr_a5a5 r7
22	test_gr_a5a5 r8
23	test_gr_a5a5 r9
24	test_gr_a5a5 r10
25	test_gr_a5a5 r11
26	test_gr_a5a5 r12
27	test_gr_a5a5 r13
28	test_gr_a5a5 r14
29
30divs_2:	! divide by two
31	set_grs_a5a5
32	mov	#2, r0
33	divs	r0, r1
34	assertreg0   2
35	assertreg 0xd2d2d2d3, r1
36	test_gr_a5a5 r2
37	test_gr_a5a5 r3
38	test_gr_a5a5 r4
39	test_gr_a5a5 r5
40	test_gr_a5a5 r6
41	test_gr_a5a5 r7
42	test_gr_a5a5 r8
43	test_gr_a5a5 r9
44	test_gr_a5a5 r10
45	test_gr_a5a5 r11
46	test_gr_a5a5 r12
47	test_gr_a5a5 r13
48	test_gr_a5a5 r14
49
50divs_3:	! divide by three
51	set_grs_a5a5
52	mov	#3, r0
53	divs	r0, r1
54	assertreg0   3
55	assertreg 0xe1e1e1e2, r1
56	test_gr_a5a5 r2
57	test_gr_a5a5 r3
58	test_gr_a5a5 r4
59	test_gr_a5a5 r5
60	test_gr_a5a5 r6
61	test_gr_a5a5 r7
62	test_gr_a5a5 r8
63	test_gr_a5a5 r9
64	test_gr_a5a5 r10
65	test_gr_a5a5 r11
66	test_gr_a5a5 r12
67	test_gr_a5a5 r13
68	test_gr_a5a5 r14
69
70divs_0:	! divide by zero
71	set_grs_a5a5
72	mov	#0, r0
73	divs	r0, r1
74	assertreg0   0
75	assertreg 0x7fffffff, r1
76	test_gr_a5a5 r2
77	test_gr_a5a5 r3
78	test_gr_a5a5 r4
79	test_gr_a5a5 r5
80	test_gr_a5a5 r6
81	test_gr_a5a5 r7
82	test_gr_a5a5 r8
83	test_gr_a5a5 r9
84	test_gr_a5a5 r10
85	test_gr_a5a5 r11
86	test_gr_a5a5 r12
87	test_gr_a5a5 r13
88	test_gr_a5a5 r14
89
90divs_o:	! divide signed overflow
91	set_grs_a5a5
92	mov	#16, r0
93	movi20	#0x8000, r1
94	shad	r0, r1	! r1 == 0x80000000
95	mov	#-1, r0
96	divs	r0, r1
97	assertreg0   -1
98	assertreg 0x7fffffff, r1
99	test_gr_a5a5 r2
100	test_gr_a5a5 r3
101	test_gr_a5a5 r4
102	test_gr_a5a5 r5
103	test_gr_a5a5 r6
104	test_gr_a5a5 r7
105	test_gr_a5a5 r8
106	test_gr_a5a5 r9
107	test_gr_a5a5 r10
108	test_gr_a5a5 r11
109	test_gr_a5a5 r12
110	test_gr_a5a5 r13
111	test_gr_a5a5 r14
112
113
114divu_1:	! divide by one, unsigned
115	set_grs_a5a5
116	mov	#1, r0
117	divu	r0, r1
118	assertreg0   1
119	test_gr_a5a5 r1
120	test_gr_a5a5 r2
121	test_gr_a5a5 r3
122	test_gr_a5a5 r4
123	test_gr_a5a5 r5
124	test_gr_a5a5 r6
125	test_gr_a5a5 r7
126	test_gr_a5a5 r8
127	test_gr_a5a5 r9
128	test_gr_a5a5 r10
129	test_gr_a5a5 r11
130	test_gr_a5a5 r12
131	test_gr_a5a5 r13
132	test_gr_a5a5 r14
133
134divu_2:	! divide by two, unsigned
135	set_grs_a5a5
136	mov	#2, r0
137	divu	r0, r1
138	assertreg0   2
139	assertreg 0x52d2d2d2, r1
140	test_gr_a5a5 r2
141	test_gr_a5a5 r3
142	test_gr_a5a5 r4
143	test_gr_a5a5 r5
144	test_gr_a5a5 r6
145	test_gr_a5a5 r7
146	test_gr_a5a5 r8
147	test_gr_a5a5 r9
148	test_gr_a5a5 r10
149	test_gr_a5a5 r11
150	test_gr_a5a5 r12
151	test_gr_a5a5 r13
152	test_gr_a5a5 r14
153
154divu_3:	! divide by three, unsigned
155	set_grs_a5a5
156	mov	#3, r0
157	divu	r0, r1
158	assertreg0   3
159	assertreg 0x37373737, r1
160	test_gr_a5a5 r2
161	test_gr_a5a5 r3
162	test_gr_a5a5 r4
163	test_gr_a5a5 r5
164	test_gr_a5a5 r6
165	test_gr_a5a5 r7
166	test_gr_a5a5 r8
167	test_gr_a5a5 r9
168	test_gr_a5a5 r10
169	test_gr_a5a5 r11
170	test_gr_a5a5 r12
171	test_gr_a5a5 r13
172	test_gr_a5a5 r14
173
174divu_0:	! divide by zero, unsigned
175	set_grs_a5a5
176	mov	#0, r0
177	divu	r0, r1
178	assertreg0   0
179	assertreg 0xffffffff, r1
180	test_gr_a5a5 r2
181	test_gr_a5a5 r3
182	test_gr_a5a5 r4
183	test_gr_a5a5 r5
184	test_gr_a5a5 r6
185	test_gr_a5a5 r7
186	test_gr_a5a5 r8
187	test_gr_a5a5 r9
188	test_gr_a5a5 r10
189	test_gr_a5a5 r11
190	test_gr_a5a5 r12
191	test_gr_a5a5 r13
192	test_gr_a5a5 r14
193
194
195	pass
196
197	exit 0
198
199