xref: /netbsd-src/external/gpl3/gdb/dist/sim/testsuite/frv/csmul.cgs (revision 4b169a6ba595ae283ca507b26b15fdff40495b1c)
1# frv testcase for csmul $GRi,$GRj,$GRk,$CCi,$cond
2# mach: all
3
4	.include "testutils.inc"
5
6	start
7
8	.global csmul
9csmul:
10	set_spr_immed	0x1b1b,cccr
11
12	; Positive operands
13	set_gr_immed   	3,gr7		; multiply small numbers
14	set_gr_immed   	2,gr8
15	csmul      	gr7,gr8,gr8,cc4,1
16	test_gr_immed  	0,gr8
17	test_gr_immed  	6,gr9
18
19	set_gr_immed   	1,gr7		; multiply by 1
20	set_gr_immed   	2,gr8
21	csmul      	gr7,gr8,gr8,cc4,1
22	test_gr_immed  	0,gr8
23	test_gr_immed  	2,gr9
24
25	set_gr_immed   	2,gr7		; multiply by 1
26	set_gr_immed   	1,gr8
27	csmul      	gr7,gr8,gr8,cc4,1
28	test_gr_immed  	0,gr8
29	test_gr_immed  	2,gr9
30
31	set_gr_immed   	0,gr7		; multiply by 0
32	set_gr_immed   	2,gr8
33	csmul      	gr7,gr8,gr8,cc4,1
34	test_gr_immed  	0,gr8
35	test_gr_immed  	0,gr9
36
37	set_gr_immed   	2,gr7		; multiply by 0
38	set_gr_immed   	0,gr8
39	csmul      	gr7,gr8,gr8,cc4,1
40	test_gr_immed  	0,gr8
41	test_gr_immed  	0,gr9
42
43	set_gr_limmed	0x3fff,0xffff,gr7	; 31 bit result
44	set_gr_immed   	2,gr8
45	csmul      	gr7,gr8,gr8,cc4,1
46	test_gr_immed  	0,gr8
47	test_gr_limmed	0x7fff,0xfffe,gr9
48
49	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
50	set_gr_immed   	2,gr8
51	csmul      	gr7,gr8,gr8,cc4,1
52	test_gr_immed  	0,gr8
53	test_gr_limmed	0x8000,0x0000,gr9
54
55	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
56	set_gr_immed   	4,gr8
57	csmul      	gr7,gr8,gr8,cc4,1
58	test_gr_immed  	1,gr8
59	test_gr_limmed	0x0000,0x0000,gr9
60
61	set_gr_limmed	0x7fff,0xffff,gr7	; max positive result
62	set_gr_limmed	0x7fff,0xffff,gr8
63	csmul      	gr7,gr8,gr8,cc4,1
64	test_gr_limmed 	0x3fff,0xffff,gr8
65	test_gr_immed  	0x00000001,gr9
66
67	; Mixed operands
68	set_gr_immed   	-3,gr7		; multiply small numbers
69	set_gr_immed   	2,gr8
70	csmul      	gr7,gr8,gr8,cc4,1
71	test_gr_immed  	-1,gr8
72	test_gr_immed  	-6,gr9
73
74	set_gr_immed   	3,gr7		; multiply small numbers
75	set_gr_immed   	-2,gr8
76	csmul      	gr7,gr8,gr8,cc4,1
77	test_gr_immed  	-1,gr8
78	test_gr_immed  	-6,gr9
79
80	set_gr_immed   	1,gr7		; multiply by 1
81	set_gr_immed   	-2,gr8
82	csmul      	gr7,gr8,gr8,cc4,1
83	test_gr_immed  	-1,gr8
84	test_gr_immed  	-2,gr9
85
86	set_gr_immed   	-2,gr7		; multiply by 1
87	set_gr_immed   	1,gr8
88	csmul      	gr7,gr8,gr8,cc4,1
89	test_gr_immed  	-1,gr8
90	test_gr_immed  	-2,gr9
91
92	set_gr_immed   	0,gr7		; multiply by 0
93	set_gr_immed   	-2,gr8
94	csmul      	gr7,gr8,gr8,cc4,1
95	test_gr_immed  	0,gr8
96	test_gr_immed  	0,gr9
97
98	set_gr_immed   	-2,gr7		; multiply by 0
99	set_gr_immed   	0,gr8
100	csmul      	gr7,gr8,gr8,cc4,1
101	test_gr_immed  	0,gr8
102	test_gr_immed  	0,gr9
103
104	set_gr_limmed  	0x2000,0x0001,gr7	; 31 bit result
105	set_gr_immed   	-2,gr8
106	csmul      	gr7,gr8,gr8,cc4,1
107	test_gr_limmed	0xffff,0xffff,gr8
108	test_gr_limmed	0xbfff,0xfffe,gr9
109
110	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
111	set_gr_immed   	-2,gr8
112	csmul      	gr7,gr8,gr8,cc4,1
113	test_gr_limmed	0xffff,0xffff,gr8
114	test_gr_limmed	0x8000,0x0000,gr9
115
116	set_gr_limmed	0x4000,0x0001,gr7	; 32 bit result
117	set_gr_immed   	-2,gr8
118	csmul      	gr7,gr8,gr8,cc4,1
119	test_gr_limmed	0xffff,0xffff,gr8
120	test_gr_limmed	0x7fff,0xfffe,gr9
121
122	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
123	set_gr_immed   	-4,gr8
124	csmul      	gr7,gr8,gr8,cc4,1
125	test_gr_limmed	0xffff,0xffff,gr8
126	test_gr_limmed	0x0000,0x0000,gr9
127
128	set_gr_limmed	0x7fff,0xffff,gr7	; max negative result
129	set_gr_limmed	0x8000,0x0000,gr8
130	csmul      	gr7,gr8,gr8,cc4,1
131	test_gr_limmed	0xc000,0x0000,gr8
132	test_gr_limmed	0x8000,0x0000,gr9
133
134	; Negative operands
135	set_gr_immed   	-3,gr7		; multiply small numbers
136	set_gr_immed   	-2,gr8
137	csmul      	gr7,gr8,gr8,cc4,1
138	test_gr_immed  	0,gr8
139	test_gr_immed  	6,gr9
140
141	set_gr_immed   	-1,gr7		; multiply by 1
142	set_gr_immed   	-2,gr8
143	csmul      	gr7,gr8,gr8,cc4,1
144	test_gr_immed  	0,gr8
145	test_gr_immed  	2,gr9
146
147	set_gr_immed   	-2,gr7		; multiply by 1
148	set_gr_immed   	-1,gr8
149	csmul      	gr7,gr8,gr8,cc4,1
150	test_gr_immed  	0,gr8
151	test_gr_immed  	2,gr9
152
153	set_gr_limmed	0xc000,0x0001,gr7	; 31 bit result
154	set_gr_immed   	-2,gr8
155	csmul      	gr7,gr8,gr8,cc4,1
156	test_gr_immed  	0,gr8
157	test_gr_limmed	0x7fff,0xfffe,gr9
158
159	set_gr_limmed	0xc000,0x0000,gr7	; 32 bit result
160	set_gr_immed   	-2,gr8
161	csmul      	gr7,gr8,gr8,cc4,1
162	test_gr_immed  	0,gr8
163	test_gr_limmed	0x8000,0x0000,gr9
164
165	set_gr_limmed	0xc000,0x0000,gr7	; 33 bit result
166	set_gr_immed   	-4,gr8
167	csmul      	gr7,gr8,gr8,cc4,1
168	test_gr_immed  	1,gr8
169	test_gr_immed  	0x00000000,gr9
170
171	set_gr_limmed	0x8000,0x0001,gr7	; almost max positive result
172	set_gr_limmed	0x8000,0x0001,gr8
173	csmul      	gr7,gr8,gr8,cc4,1
174	test_gr_limmed	0x3fff,0xffff,gr8
175	test_gr_immed  	0x00000001,gr9
176
177
178	set_gr_limmed	0x8000,0x0000,gr7	; max positive result
179	set_gr_limmed	0x8000,0x0000,gr8
180	csmul      	gr7,gr8,gr8,cc4,1
181	test_gr_limmed	0x4000,0x0000,gr8
182	test_gr_immed  	0x00000000,gr9
183
184	; Positive operands
185	set_gr_immed   	3,gr7		; multiply small numbers
186	set_gr_immed   	2,gr8
187	csmul      	gr7,gr8,gr8,cc5,0
188	test_gr_immed  	0,gr8
189	test_gr_immed  	6,gr9
190
191	set_gr_immed   	1,gr7		; multiply by 1
192	set_gr_immed   	2,gr8
193	csmul      	gr7,gr8,gr8,cc5,0
194	test_gr_immed  	0,gr8
195	test_gr_immed  	2,gr9
196
197	set_gr_immed   	2,gr7		; multiply by 1
198	set_gr_immed   	1,gr8
199	csmul      	gr7,gr8,gr8,cc5,0
200	test_gr_immed  	0,gr8
201	test_gr_immed  	2,gr9
202
203	set_gr_immed   	0,gr7		; multiply by 0
204	set_gr_immed   	2,gr8
205	csmul      	gr7,gr8,gr8,cc5,0
206	test_gr_immed  	0,gr8
207	test_gr_immed  	0,gr9
208
209	set_gr_immed   	2,gr7		; multiply by 0
210	set_gr_immed   	0,gr8
211	csmul      	gr7,gr8,gr8,cc5,0
212	test_gr_immed  	0,gr8
213	test_gr_immed  	0,gr9
214
215	set_gr_limmed	0x3fff,0xffff,gr7	; 31 bit result
216	set_gr_immed   	2,gr8
217	csmul      	gr7,gr8,gr8,cc5,0
218	test_gr_immed  	0,gr8
219	test_gr_limmed	0x7fff,0xfffe,gr9
220
221	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
222	set_gr_immed   	2,gr8
223	csmul      	gr7,gr8,gr8,cc5,0
224	test_gr_immed  	0,gr8
225	test_gr_limmed	0x8000,0x0000,gr9
226
227	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
228	set_gr_immed   	4,gr8
229	csmul      	gr7,gr8,gr8,cc5,0
230	test_gr_immed  	1,gr8
231	test_gr_limmed	0x0000,0x0000,gr9
232
233	set_gr_limmed	0x7fff,0xffff,gr7	; max positive result
234	set_gr_limmed	0x7fff,0xffff,gr8
235	csmul      	gr7,gr8,gr8,cc5,0
236	test_gr_limmed 	0x3fff,0xffff,gr8
237	test_gr_immed  	0x00000001,gr9
238
239	; Mixed operands
240	set_gr_immed   	-3,gr7		; multiply small numbers
241	set_gr_immed   	2,gr8
242	csmul      	gr7,gr8,gr8,cc5,0
243	test_gr_immed  	-1,gr8
244	test_gr_immed  	-6,gr9
245
246	set_gr_immed   	3,gr7		; multiply small numbers
247	set_gr_immed   	-2,gr8
248	csmul      	gr7,gr8,gr8,cc5,0
249	test_gr_immed  	-1,gr8
250	test_gr_immed  	-6,gr9
251
252	set_gr_immed   	1,gr7		; multiply by 1
253	set_gr_immed   	-2,gr8
254	csmul      	gr7,gr8,gr8,cc5,0
255	test_gr_immed  	-1,gr8
256	test_gr_immed  	-2,gr9
257
258	set_gr_immed   	-2,gr7		; multiply by 1
259	set_gr_immed   	1,gr8
260	csmul      	gr7,gr8,gr8,cc5,0
261	test_gr_immed  	-1,gr8
262	test_gr_immed  	-2,gr9
263
264	set_gr_immed   	0,gr7		; multiply by 0
265	set_gr_immed   	-2,gr8
266	csmul      	gr7,gr8,gr8,cc5,0
267	test_gr_immed  	0,gr8
268	test_gr_immed  	0,gr9
269
270	set_gr_immed   	-2,gr7		; multiply by 0
271	set_gr_immed   	0,gr8
272	csmul      	gr7,gr8,gr8,cc5,0
273	test_gr_immed  	0,gr8
274	test_gr_immed  	0,gr9
275
276	set_gr_limmed  	0x2000,0x0001,gr7	; 31 bit result
277	set_gr_immed   	-2,gr8
278	csmul      	gr7,gr8,gr8,cc5,0
279	test_gr_limmed	0xffff,0xffff,gr8
280	test_gr_limmed	0xbfff,0xfffe,gr9
281
282	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
283	set_gr_immed   	-2,gr8
284	csmul      	gr7,gr8,gr8,cc5,0
285	test_gr_limmed	0xffff,0xffff,gr8
286	test_gr_limmed	0x8000,0x0000,gr9
287
288	set_gr_limmed	0x4000,0x0001,gr7	; 32 bit result
289	set_gr_immed   	-2,gr8
290	csmul      	gr7,gr8,gr8,cc5,0
291	test_gr_limmed	0xffff,0xffff,gr8
292	test_gr_limmed	0x7fff,0xfffe,gr9
293
294	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
295	set_gr_immed   	-4,gr8
296	csmul      	gr7,gr8,gr8,cc5,0
297	test_gr_limmed	0xffff,0xffff,gr8
298	test_gr_limmed	0x0000,0x0000,gr9
299
300	set_gr_limmed	0x7fff,0xffff,gr7	; max negative result
301	set_gr_limmed	0x8000,0x0000,gr8
302	csmul      	gr7,gr8,gr8,cc5,0
303	test_gr_limmed	0xc000,0x0000,gr8
304	test_gr_limmed	0x8000,0x0000,gr9
305
306	; Negative operands
307	set_gr_immed   	-3,gr7		; multiply small numbers
308	set_gr_immed   	-2,gr8
309	csmul      	gr7,gr8,gr8,cc5,0
310	test_gr_immed  	0,gr8
311	test_gr_immed  	6,gr9
312
313	set_gr_immed   	-1,gr7		; multiply by 1
314	set_gr_immed   	-2,gr8
315	csmul      	gr7,gr8,gr8,cc5,0
316	test_gr_immed  	0,gr8
317	test_gr_immed  	2,gr9
318
319	set_gr_immed   	-2,gr7		; multiply by 1
320	set_gr_immed   	-1,gr8
321	csmul      	gr7,gr8,gr8,cc5,0
322	test_gr_immed  	0,gr8
323	test_gr_immed  	2,gr9
324
325	set_gr_limmed	0xc000,0x0001,gr7	; 31 bit result
326	set_gr_immed   	-2,gr8
327	csmul      	gr7,gr8,gr8,cc5,0
328	test_gr_immed  	0,gr8
329	test_gr_limmed	0x7fff,0xfffe,gr9
330
331	set_gr_limmed	0xc000,0x0000,gr7	; 32 bit result
332	set_gr_immed   	-2,gr8
333	csmul      	gr7,gr8,gr8,cc5,0
334	test_gr_immed  	0,gr8
335	test_gr_limmed	0x8000,0x0000,gr9
336
337	set_gr_limmed	0xc000,0x0000,gr7	; 33 bit result
338	set_gr_immed   	-4,gr8
339	csmul      	gr7,gr8,gr8,cc5,0
340	test_gr_immed  	1,gr8
341	test_gr_immed  	0x00000000,gr9
342
343	set_gr_limmed	0x8000,0x0001,gr7	; almost max positive result
344	set_gr_limmed	0x8000,0x0001,gr8
345	csmul      	gr7,gr8,gr8,cc5,0
346	test_gr_limmed	0x3fff,0xffff,gr8
347	test_gr_immed  	0x00000001,gr9
348
349
350	set_gr_limmed	0x8000,0x0000,gr7	; max positive result
351	set_gr_limmed	0x8000,0x0000,gr8
352	csmul      	gr7,gr8,gr8,cc5,0
353	test_gr_limmed	0x4000,0x0000,gr8
354	test_gr_immed  	0x00000000,gr9
355
356	; Positive operands
357	set_gr_immed   	3,gr7		; multiply small numbers
358	set_gr_immed   	2,gr8
359	csmul      	gr7,gr8,gr8,cc4,0
360	test_gr_immed  	2,gr8
361	test_gr_immed  	0,gr9
362
363	set_gr_immed   	1,gr7		; multiply by 1
364	set_gr_immed   	2,gr8
365	csmul      	gr7,gr8,gr8,cc4,0
366	test_gr_immed  	2,gr8
367	test_gr_immed  	0,gr9
368
369	set_gr_immed   	2,gr7		; multiply by 1
370	set_gr_immed   	1,gr8
371	csmul      	gr7,gr8,gr8,cc4,0
372	test_gr_immed  	1,gr8
373	test_gr_immed  	0,gr9
374
375	set_gr_immed   	0,gr7		; multiply by 0
376	set_gr_immed   	2,gr8
377	csmul      	gr7,gr8,gr8,cc4,0
378	test_gr_immed  	2,gr8
379	test_gr_immed  	0,gr9
380
381	set_gr_immed   	2,gr7		; multiply by 0
382	set_gr_immed   	0,gr8
383	csmul      	gr7,gr8,gr8,cc4,0
384	test_gr_immed  	0,gr8
385	test_gr_immed  	0,gr9
386
387	set_gr_limmed	0x3fff,0xffff,gr7	; 31 bit result
388	set_gr_immed   	2,gr8
389	csmul      	gr7,gr8,gr8,cc4,0
390	test_gr_immed  	2,gr8
391	test_gr_immed	0,gr9
392
393	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
394	set_gr_immed   	2,gr8
395	csmul      	gr7,gr8,gr8,cc4,0
396	test_gr_immed  	2,gr8
397	test_gr_immed	0,gr9
398
399	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
400	set_gr_immed   	4,gr8
401	csmul      	gr7,gr8,gr8,cc4,0
402	test_gr_immed  	4,gr8
403	test_gr_immed	0,gr9
404
405	set_gr_limmed	0x7fff,0xffff,gr7	; max positive result
406	set_gr_limmed	0x7fff,0xffff,gr8
407	csmul      	gr7,gr8,gr8,cc4,0
408	test_gr_limmed 	0x7fff,0xffff,gr8
409	test_gr_immed  	0,gr9
410
411	; Mixed operands
412	set_gr_immed   	-3,gr7		; multiply small numbers
413	set_gr_immed   	2,gr8
414	csmul      	gr7,gr8,gr8,cc4,0
415	test_gr_immed  	2,gr8
416	test_gr_immed  	0,gr9
417
418	set_gr_immed   	3,gr7		; multiply small numbers
419	set_gr_immed   	-2,gr8
420	csmul      	gr7,gr8,gr8,cc4,0
421	test_gr_immed  	-2,gr8
422	test_gr_immed  	0,gr9
423
424	set_gr_immed   	1,gr7		; multiply by 1
425	set_gr_immed   	-2,gr8
426	csmul      	gr7,gr8,gr8,cc4,0
427	test_gr_immed  	-2,gr8
428	test_gr_immed  	0,gr9
429
430	set_gr_immed   	-2,gr7		; multiply by 1
431	set_gr_immed   	1,gr8
432	csmul      	gr7,gr8,gr8,cc4,0
433	test_gr_immed  	1,gr8
434	test_gr_immed  	0,gr9
435
436	set_gr_immed   	0,gr7		; multiply by 0
437	set_gr_immed   	-2,gr8
438	csmul      	gr7,gr8,gr8,cc4,0
439	test_gr_immed  	-2,gr8
440	test_gr_immed  	0,gr9
441
442	set_gr_immed   	-2,gr7		; multiply by 0
443	set_gr_immed   	0,gr8
444	csmul      	gr7,gr8,gr8,cc4,0
445	test_gr_immed  	0,gr8
446	test_gr_immed  	0,gr9
447
448	set_gr_limmed  	0x2000,0x0001,gr7	; 31 bit result
449	set_gr_immed   	-2,gr8
450	csmul      	gr7,gr8,gr8,cc4,0
451	test_gr_immed	-2,gr8
452	test_gr_immed	0,gr9
453
454	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
455	set_gr_immed   	-2,gr8
456	csmul      	gr7,gr8,gr8,cc4,0
457	test_gr_immed	-2,gr8
458	test_gr_immed	0,gr9
459
460	set_gr_limmed	0x4000,0x0001,gr7	; 32 bit result
461	set_gr_immed   	-2,gr8
462	csmul      	gr7,gr8,gr8,cc4,0
463	test_gr_immed	-2,gr8
464	test_gr_immed	0,gr9
465
466	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
467	set_gr_immed   	-4,gr8
468	csmul      	gr7,gr8,gr8,cc4,0
469	test_gr_immed	-4,gr8
470	test_gr_immed	0,gr9
471
472	set_gr_limmed	0x7fff,0xffff,gr7	; max negative result
473	set_gr_limmed	0x8000,0x0000,gr8
474	csmul      	gr7,gr8,gr8,cc4,0
475	test_gr_limmed	0x8000,0x0000,gr8
476	test_gr_immed	0,gr9
477
478	; Negative operands
479	set_gr_immed   	-3,gr7		; multiply small numbers
480	set_gr_immed   	-2,gr8
481	csmul      	gr7,gr8,gr8,cc4,0
482	test_gr_immed  	-2,gr8
483	test_gr_immed  	0,gr9
484
485	set_gr_immed   	-1,gr7		; multiply by 1
486	set_gr_immed   	-2,gr8
487	csmul      	gr7,gr8,gr8,cc4,0
488	test_gr_immed  	-2,gr8
489	test_gr_immed  	0,gr9
490
491	set_gr_immed   	-2,gr7		; multiply by 1
492	set_gr_immed   	-1,gr8
493	csmul      	gr7,gr8,gr8,cc4,0
494	test_gr_immed  	-1,gr8
495	test_gr_immed  	0,gr9
496
497	set_gr_limmed	0xc000,0x0001,gr7	; 31 bit result
498	set_gr_immed   	-2,gr8
499	csmul      	gr7,gr8,gr8,cc4,0
500	test_gr_immed  	-2,gr8
501	test_gr_immed	0,gr9
502
503	set_gr_limmed	0xc000,0x0000,gr7	; 32 bit result
504	set_gr_immed   	-2,gr8
505	csmul      	gr7,gr8,gr8,cc4,0
506	test_gr_immed  	-2,gr8
507	test_gr_immed	0,gr9
508
509	set_gr_limmed	0xc000,0x0000,gr7	; 33 bit result
510	set_gr_immed   	-4,gr8
511	csmul      	gr7,gr8,gr8,cc4,0
512	test_gr_immed  	-4,gr8
513	test_gr_immed  	0,gr9
514
515	set_gr_limmed	0x8000,0x0001,gr7	; almost max positive result
516	set_gr_limmed	0x8000,0x0001,gr8
517	csmul      	gr7,gr8,gr8,cc4,0
518	test_gr_limmed	0x8000,0x0001,gr8
519	test_gr_immed  	0,gr9
520
521
522	set_gr_limmed	0x8000,0x0000,gr7	; max positive result
523	set_gr_limmed	0x8000,0x0000,gr8
524	csmul      	gr7,gr8,gr8,cc4,0
525	test_gr_limmed	0x8000,0x0000,gr8
526	test_gr_immed  	0,gr9
527
528	; Positive operands
529	set_gr_immed   	3,gr7		; multiply small numbers
530	set_gr_immed   	2,gr8
531	csmul      	gr7,gr8,gr8,cc5,1
532	test_gr_immed  	2,gr8
533	test_gr_immed  	0,gr9
534
535	set_gr_immed   	1,gr7		; multiply by 1
536	set_gr_immed   	2,gr8
537	csmul      	gr7,gr8,gr8,cc5,1
538	test_gr_immed  	2,gr8
539	test_gr_immed  	0,gr9
540
541	set_gr_immed   	2,gr7		; multiply by 1
542	set_gr_immed   	1,gr8
543	csmul      	gr7,gr8,gr8,cc5,1
544	test_gr_immed  	1,gr8
545	test_gr_immed  	0,gr9
546
547	set_gr_immed   	0,gr7		; multiply by 0
548	set_gr_immed   	2,gr8
549	csmul      	gr7,gr8,gr8,cc5,1
550	test_gr_immed  	2,gr8
551	test_gr_immed  	0,gr9
552
553	set_gr_immed   	2,gr7		; multiply by 0
554	set_gr_immed   	0,gr8
555	csmul      	gr7,gr8,gr8,cc5,1
556	test_gr_immed  	0,gr8
557	test_gr_immed  	0,gr9
558
559	set_gr_limmed	0x3fff,0xffff,gr7	; 31 bit result
560	set_gr_immed   	2,gr8
561	csmul      	gr7,gr8,gr8,cc5,1
562	test_gr_immed  	2,gr8
563	test_gr_immed	0,gr9
564
565	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
566	set_gr_immed   	2,gr8
567	csmul      	gr7,gr8,gr8,cc5,1
568	test_gr_immed  	2,gr8
569	test_gr_immed	0,gr9
570
571	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
572	set_gr_immed   	4,gr8
573	csmul      	gr7,gr8,gr8,cc5,1
574	test_gr_immed  	4,gr8
575	test_gr_immed	0,gr9
576
577	set_gr_limmed	0x7fff,0xffff,gr7	; max positive result
578	set_gr_limmed	0x7fff,0xffff,gr8
579	csmul      	gr7,gr8,gr8,cc5,1
580	test_gr_limmed 	0x7fff,0xffff,gr8
581	test_gr_immed  	0,gr9
582
583	; Mixed operands
584	set_gr_immed   	-3,gr7		; multiply small numbers
585	set_gr_immed   	2,gr8
586	csmul      	gr7,gr8,gr8,cc5,1
587	test_gr_immed  	2,gr8
588	test_gr_immed  	0,gr9
589
590	set_gr_immed   	3,gr7		; multiply small numbers
591	set_gr_immed   	-2,gr8
592	csmul      	gr7,gr8,gr8,cc5,1
593	test_gr_immed  	-2,gr8
594	test_gr_immed  	0,gr9
595
596	set_gr_immed   	1,gr7		; multiply by 1
597	set_gr_immed   	-2,gr8
598	csmul      	gr7,gr8,gr8,cc5,1
599	test_gr_immed  	-2,gr8
600	test_gr_immed  	0,gr9
601
602	set_gr_immed   	-2,gr7		; multiply by 1
603	set_gr_immed   	1,gr8
604	csmul      	gr7,gr8,gr8,cc5,1
605	test_gr_immed  	1,gr8
606	test_gr_immed  	0,gr9
607
608	set_gr_immed   	0,gr7		; multiply by 0
609	set_gr_immed   	-2,gr8
610	csmul      	gr7,gr8,gr8,cc5,1
611	test_gr_immed  	-2,gr8
612	test_gr_immed  	0,gr9
613
614	set_gr_immed   	-2,gr7		; multiply by 0
615	set_gr_immed   	0,gr8
616	csmul      	gr7,gr8,gr8,cc5,1
617	test_gr_immed  	0,gr8
618	test_gr_immed  	0,gr9
619
620	set_gr_limmed  	0x2000,0x0001,gr7	; 31 bit result
621	set_gr_immed   	-2,gr8
622	csmul      	gr7,gr8,gr8,cc5,1
623	test_gr_immed	-2,gr8
624	test_gr_immed	0,gr9
625
626	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
627	set_gr_immed   	-2,gr8
628	csmul      	gr7,gr8,gr8,cc5,1
629	test_gr_immed	-2,gr8
630	test_gr_immed	0,gr9
631
632	set_gr_limmed	0x4000,0x0001,gr7	; 32 bit result
633	set_gr_immed   	-2,gr8
634	csmul      	gr7,gr8,gr8,cc5,1
635	test_gr_immed	-2,gr8
636	test_gr_immed	0,gr9
637
638	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
639	set_gr_immed   	-4,gr8
640	csmul      	gr7,gr8,gr8,cc5,1
641	test_gr_immed	-4,gr8
642	test_gr_immed	0,gr9
643
644	set_gr_limmed	0x7fff,0xffff,gr7	; max negative result
645	set_gr_limmed	0x8000,0x0000,gr8
646	csmul      	gr7,gr8,gr8,cc5,1
647	test_gr_limmed	0x8000,0x0000,gr8
648	test_gr_immed	0,gr9
649
650	; Negative operands
651	set_gr_immed   	-3,gr7		; multiply small numbers
652	set_gr_immed   	-2,gr8
653	csmul      	gr7,gr8,gr8,cc5,1
654	test_gr_immed  	-2,gr8
655	test_gr_immed  	0,gr9
656
657	set_gr_immed   	-1,gr7		; multiply by 1
658	set_gr_immed   	-2,gr8
659	csmul      	gr7,gr8,gr8,cc5,1
660	test_gr_immed  	-2,gr8
661	test_gr_immed  	0,gr9
662
663	set_gr_immed   	-2,gr7		; multiply by 1
664	set_gr_immed   	-1,gr8
665	csmul      	gr7,gr8,gr8,cc5,1
666	test_gr_immed  	-1,gr8
667	test_gr_immed  	0,gr9
668
669	set_gr_limmed	0xc000,0x0001,gr7	; 31 bit result
670	set_gr_immed   	-2,gr8
671	csmul      	gr7,gr8,gr8,cc5,1
672	test_gr_immed  	-2,gr8
673	test_gr_immed	0,gr9
674
675	set_gr_limmed	0xc000,0x0000,gr7	; 32 bit result
676	set_gr_immed   	-2,gr8
677	csmul      	gr7,gr8,gr8,cc5,1
678	test_gr_immed  	-2,gr8
679	test_gr_immed	0,gr9
680
681	set_gr_limmed	0xc000,0x0000,gr7	; 33 bit result
682	set_gr_immed   	-4,gr8
683	csmul      	gr7,gr8,gr8,cc5,1
684	test_gr_immed  	-4,gr8
685	test_gr_immed  	0,gr9
686
687	set_gr_limmed	0x8000,0x0001,gr7	; almost max positive result
688	set_gr_limmed	0x8000,0x0001,gr8
689	csmul      	gr7,gr8,gr8,cc5,1
690	test_gr_limmed	0x8000,0x0001,gr8
691	test_gr_immed  	0,gr9
692
693
694	set_gr_limmed	0x8000,0x0000,gr7	; max positive result
695	set_gr_limmed	0x8000,0x0000,gr8
696	csmul      	gr7,gr8,gr8,cc5,1
697	test_gr_limmed	0x8000,0x0000,gr8
698	test_gr_immed  	0,gr9
699
700	; Positive operands
701	set_gr_immed   	3,gr7		; multiply small numbers
702	set_gr_immed   	2,gr8
703	csmul      	gr7,gr8,gr8,cc6,0
704	test_gr_immed  	2,gr8
705	test_gr_immed  	0,gr9
706
707	set_gr_immed   	1,gr7		; multiply by 1
708	set_gr_immed   	2,gr8
709	csmul      	gr7,gr8,gr8,cc6,0
710	test_gr_immed  	2,gr8
711	test_gr_immed  	0,gr9
712
713	set_gr_immed   	2,gr7		; multiply by 1
714	set_gr_immed   	1,gr8
715	csmul      	gr7,gr8,gr8,cc6,0
716	test_gr_immed  	1,gr8
717	test_gr_immed  	0,gr9
718
719	set_gr_immed   	0,gr7		; multiply by 0
720	set_gr_immed   	2,gr8
721	csmul      	gr7,gr8,gr8,cc6,0
722	test_gr_immed  	2,gr8
723	test_gr_immed  	0,gr9
724
725	set_gr_immed   	2,gr7		; multiply by 0
726	set_gr_immed   	0,gr8
727	csmul      	gr7,gr8,gr8,cc6,0
728	test_gr_immed  	0,gr8
729	test_gr_immed  	0,gr9
730
731	set_gr_limmed	0x3fff,0xffff,gr7	; 31 bit result
732	set_gr_immed   	2,gr8
733	csmul      	gr7,gr8,gr8,cc6,0
734	test_gr_immed  	2,gr8
735	test_gr_immed	0,gr9
736
737	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
738	set_gr_immed   	2,gr8
739	csmul      	gr7,gr8,gr8,cc6,0
740	test_gr_immed  	2,gr8
741	test_gr_immed	0,gr9
742
743	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
744	set_gr_immed   	4,gr8
745	csmul      	gr7,gr8,gr8,cc6,0
746	test_gr_immed  	4,gr8
747	test_gr_immed	0,gr9
748
749	set_gr_limmed	0x7fff,0xffff,gr7	; max positive result
750	set_gr_limmed	0x7fff,0xffff,gr8
751	csmul      	gr7,gr8,gr8,cc6,0
752	test_gr_limmed 	0x7fff,0xffff,gr8
753	test_gr_immed  	0,gr9
754
755	; Mixed operands
756	set_gr_immed   	-3,gr7		; multiply small numbers
757	set_gr_immed   	2,gr8
758	csmul      	gr7,gr8,gr8,cc6,0
759	test_gr_immed  	2,gr8
760	test_gr_immed  	0,gr9
761
762	set_gr_immed   	3,gr7		; multiply small numbers
763	set_gr_immed   	-2,gr8
764	csmul      	gr7,gr8,gr8,cc6,0
765	test_gr_immed  	-2,gr8
766	test_gr_immed  	0,gr9
767
768	set_gr_immed   	1,gr7		; multiply by 1
769	set_gr_immed   	-2,gr8
770	csmul      	gr7,gr8,gr8,cc6,0
771	test_gr_immed  	-2,gr8
772	test_gr_immed  	0,gr9
773
774	set_gr_immed   	-2,gr7		; multiply by 1
775	set_gr_immed   	1,gr8
776	csmul      	gr7,gr8,gr8,cc6,0
777	test_gr_immed  	1,gr8
778	test_gr_immed  	0,gr9
779
780	set_gr_immed   	0,gr7		; multiply by 0
781	set_gr_immed   	-2,gr8
782	csmul      	gr7,gr8,gr8,cc6,0
783	test_gr_immed  	-2,gr8
784	test_gr_immed  	0,gr9
785
786	set_gr_immed   	-2,gr7		; multiply by 0
787	set_gr_immed   	0,gr8
788	csmul      	gr7,gr8,gr8,cc6,0
789	test_gr_immed  	0,gr8
790	test_gr_immed  	0,gr9
791
792	set_gr_limmed  	0x2000,0x0001,gr7	; 31 bit result
793	set_gr_immed   	-2,gr8
794	csmul      	gr7,gr8,gr8,cc6,0
795	test_gr_immed	-2,gr8
796	test_gr_immed	0,gr9
797
798	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
799	set_gr_immed   	-2,gr8
800	csmul      	gr7,gr8,gr8,cc6,0
801	test_gr_immed	-2,gr8
802	test_gr_immed	0,gr9
803
804	set_gr_limmed	0x4000,0x0001,gr7	; 32 bit result
805	set_gr_immed   	-2,gr8
806	csmul      	gr7,gr8,gr8,cc6,0
807	test_gr_immed	-2,gr8
808	test_gr_immed	0,gr9
809
810	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
811	set_gr_immed   	-4,gr8
812	csmul      	gr7,gr8,gr8,cc6,0
813	test_gr_immed	-4,gr8
814	test_gr_immed	0,gr9
815
816	set_gr_limmed	0x7fff,0xffff,gr7	; max negative result
817	set_gr_limmed	0x8000,0x0000,gr8
818	csmul      	gr7,gr8,gr8,cc6,0
819	test_gr_limmed	0x8000,0x0000,gr8
820	test_gr_immed	0,gr9
821
822	; Negative operands
823	set_gr_immed   	-3,gr7		; multiply small numbers
824	set_gr_immed   	-2,gr8
825	csmul      	gr7,gr8,gr8,cc6,0
826	test_gr_immed  	-2,gr8
827	test_gr_immed  	0,gr9
828
829	set_gr_immed   	-1,gr7		; multiply by 1
830	set_gr_immed   	-2,gr8
831	csmul      	gr7,gr8,gr8,cc6,0
832	test_gr_immed  	-2,gr8
833	test_gr_immed  	0,gr9
834
835	set_gr_immed   	-2,gr7		; multiply by 1
836	set_gr_immed   	-1,gr8
837	csmul      	gr7,gr8,gr8,cc6,0
838	test_gr_immed  	-1,gr8
839	test_gr_immed  	0,gr9
840
841	set_gr_limmed	0xc000,0x0001,gr7	; 31 bit result
842	set_gr_immed   	-2,gr8
843	csmul      	gr7,gr8,gr8,cc6,0
844	test_gr_immed  	-2,gr8
845	test_gr_immed	0,gr9
846
847	set_gr_limmed	0xc000,0x0000,gr7	; 32 bit result
848	set_gr_immed   	-2,gr8
849	csmul      	gr7,gr8,gr8,cc6,0
850	test_gr_immed  	-2,gr8
851	test_gr_immed	0,gr9
852
853	set_gr_limmed	0xc000,0x0000,gr7	; 33 bit result
854	set_gr_immed   	-4,gr8
855	csmul      	gr7,gr8,gr8,cc6,0
856	test_gr_immed  	-4,gr8
857	test_gr_immed  	0,gr9
858
859	set_gr_limmed	0x8000,0x0001,gr7	; almost max positive result
860	set_gr_limmed	0x8000,0x0001,gr8
861	csmul      	gr7,gr8,gr8,cc6,0
862	test_gr_limmed	0x8000,0x0001,gr8
863	test_gr_immed  	0,gr9
864
865
866	set_gr_limmed	0x8000,0x0000,gr7	; max positive result
867	set_gr_limmed	0x8000,0x0000,gr8
868	csmul      	gr7,gr8,gr8,cc6,0
869	test_gr_limmed	0x8000,0x0000,gr8
870	test_gr_immed  	0,gr9
871
872	; Positive operands
873	set_gr_immed   	3,gr7		; multiply small numbers
874	set_gr_immed   	2,gr8
875	csmul      	gr7,gr8,gr8,cc7,1
876	test_gr_immed  	2,gr8
877	test_gr_immed  	0,gr9
878
879	set_gr_immed   	1,gr7		; multiply by 1
880	set_gr_immed   	2,gr8
881	csmul      	gr7,gr8,gr8,cc7,1
882	test_gr_immed  	2,gr8
883	test_gr_immed  	0,gr9
884
885	set_gr_immed   	2,gr7		; multiply by 1
886	set_gr_immed   	1,gr8
887	csmul      	gr7,gr8,gr8,cc7,1
888	test_gr_immed  	1,gr8
889	test_gr_immed  	0,gr9
890
891	set_gr_immed   	0,gr7		; multiply by 0
892	set_gr_immed   	2,gr8
893	csmul      	gr7,gr8,gr8,cc7,1
894	test_gr_immed  	2,gr8
895	test_gr_immed  	0,gr9
896
897	set_gr_immed   	2,gr7		; multiply by 0
898	set_gr_immed   	0,gr8
899	csmul      	gr7,gr8,gr8,cc7,1
900	test_gr_immed  	0,gr8
901	test_gr_immed  	0,gr9
902
903	set_gr_limmed	0x3fff,0xffff,gr7	; 31 bit result
904	set_gr_immed   	2,gr8
905	csmul      	gr7,gr8,gr8,cc7,1
906	test_gr_immed  	2,gr8
907	test_gr_immed	0,gr9
908
909	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
910	set_gr_immed   	2,gr8
911	csmul      	gr7,gr8,gr8,cc7,1
912	test_gr_immed  	2,gr8
913	test_gr_immed	0,gr9
914
915	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
916	set_gr_immed   	4,gr8
917	csmul      	gr7,gr8,gr8,cc7,1
918	test_gr_immed  	4,gr8
919	test_gr_immed	0,gr9
920
921	set_gr_limmed	0x7fff,0xffff,gr7	; max positive result
922	set_gr_limmed	0x7fff,0xffff,gr8
923	csmul      	gr7,gr8,gr8,cc7,1
924	test_gr_limmed 	0x7fff,0xffff,gr8
925	test_gr_immed  	0,gr9
926
927	; Mixed operands
928	set_gr_immed   	-3,gr7		; multiply small numbers
929	set_gr_immed   	2,gr8
930	csmul      	gr7,gr8,gr8,cc7,1
931	test_gr_immed  	2,gr8
932	test_gr_immed  	0,gr9
933
934	set_gr_immed   	3,gr7		; multiply small numbers
935	set_gr_immed   	-2,gr8
936	csmul      	gr7,gr8,gr8,cc7,1
937	test_gr_immed  	-2,gr8
938	test_gr_immed  	0,gr9
939
940	set_gr_immed   	1,gr7		; multiply by 1
941	set_gr_immed   	-2,gr8
942	csmul      	gr7,gr8,gr8,cc7,1
943	test_gr_immed  	-2,gr8
944	test_gr_immed  	0,gr9
945
946	set_gr_immed   	-2,gr7		; multiply by 1
947	set_gr_immed   	1,gr8
948	csmul      	gr7,gr8,gr8,cc7,1
949	test_gr_immed  	1,gr8
950	test_gr_immed  	0,gr9
951
952	set_gr_immed   	0,gr7		; multiply by 0
953	set_gr_immed   	-2,gr8
954	csmul      	gr7,gr8,gr8,cc7,1
955	test_gr_immed  	-2,gr8
956	test_gr_immed  	0,gr9
957
958	set_gr_immed   	-2,gr7		; multiply by 0
959	set_gr_immed   	0,gr8
960	csmul      	gr7,gr8,gr8,cc7,1
961	test_gr_immed  	0,gr8
962	test_gr_immed  	0,gr9
963
964	set_gr_limmed  	0x2000,0x0001,gr7	; 31 bit result
965	set_gr_immed   	-2,gr8
966	csmul      	gr7,gr8,gr8,cc7,1
967	test_gr_immed	-2,gr8
968	test_gr_immed	0,gr9
969
970	set_gr_limmed	0x4000,0x0000,gr7	; 32 bit result
971	set_gr_immed   	-2,gr8
972	csmul      	gr7,gr8,gr8,cc7,1
973	test_gr_immed	-2,gr8
974	test_gr_immed	0,gr9
975
976	set_gr_limmed	0x4000,0x0001,gr7	; 32 bit result
977	set_gr_immed   	-2,gr8
978	csmul      	gr7,gr8,gr8,cc7,1
979	test_gr_immed	-2,gr8
980	test_gr_immed	0,gr9
981
982	set_gr_limmed	0x4000,0x0000,gr7	; 33 bit result
983	set_gr_immed   	-4,gr8
984	csmul      	gr7,gr8,gr8,cc7,1
985	test_gr_immed	-4,gr8
986	test_gr_immed	0,gr9
987
988	set_gr_limmed	0x7fff,0xffff,gr7	; max negative result
989	set_gr_limmed	0x8000,0x0000,gr8
990	csmul      	gr7,gr8,gr8,cc7,1
991	test_gr_limmed	0x8000,0x0000,gr8
992	test_gr_immed	0,gr9
993
994	; Negative operands
995	set_gr_immed   	-3,gr7		; multiply small numbers
996	set_gr_immed   	-2,gr8
997	csmul      	gr7,gr8,gr8,cc7,1
998	test_gr_immed  	-2,gr8
999	test_gr_immed  	0,gr9
1000
1001	set_gr_immed   	-1,gr7		; multiply by 1
1002	set_gr_immed   	-2,gr8
1003	csmul      	gr7,gr8,gr8,cc7,1
1004	test_gr_immed  	-2,gr8
1005	test_gr_immed  	0,gr9
1006
1007	set_gr_immed   	-2,gr7		; multiply by 1
1008	set_gr_immed   	-1,gr8
1009	csmul      	gr7,gr8,gr8,cc7,1
1010	test_gr_immed  	-1,gr8
1011	test_gr_immed  	0,gr9
1012
1013	set_gr_limmed	0xc000,0x0001,gr7	; 31 bit result
1014	set_gr_immed   	-2,gr8
1015	csmul      	gr7,gr8,gr8,cc7,1
1016	test_gr_immed  	-2,gr8
1017	test_gr_immed	0,gr9
1018
1019	set_gr_limmed	0xc000,0x0000,gr7	; 32 bit result
1020	set_gr_immed   	-2,gr8
1021	csmul      	gr7,gr8,gr8,cc7,1
1022	test_gr_immed  	-2,gr8
1023	test_gr_immed	0,gr9
1024
1025	set_gr_limmed	0xc000,0x0000,gr7	; 33 bit result
1026	set_gr_immed   	-4,gr8
1027	csmul      	gr7,gr8,gr8,cc7,1
1028	test_gr_immed  	-4,gr8
1029	test_gr_immed  	0,gr9
1030
1031	set_gr_limmed	0x8000,0x0001,gr7	; almost max positive result
1032	set_gr_limmed	0x8000,0x0001,gr8
1033	csmul      	gr7,gr8,gr8,cc7,1
1034	test_gr_limmed	0x8000,0x0001,gr8
1035	test_gr_immed  	0,gr9
1036
1037
1038	set_gr_limmed	0x8000,0x0000,gr7	; max positive result
1039	set_gr_limmed	0x8000,0x0000,gr8
1040	csmul      	gr7,gr8,gr8,cc7,1
1041	test_gr_limmed	0x8000,0x0000,gr8
1042	test_gr_immed  	0,gr9
1043
1044	pass
1045