New sim testsuite for Fujitsu FRV. Contributed by Red Hat.
[external/binutils.git] / sim / testsuite / sim / frv / csmulcc.cgs
1 # frv testcase for csmulcc $GRi,$GRj,$GRk,$CCi,$cond
2 # mach: all
3
4         .include "testutils.inc"
5
6         start
7
8         .global csmulcc
9 csmulcc:
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         set_icc         0xc,0
16         csmulcc         gr7,gr8,gr8,cc0,1
17         test_icc        0 0 0 0 icc0
18         test_gr_immed   0,gr8
19         test_gr_immed   6,gr9
20
21         set_gr_immed    1,gr7           ; multiply by 1
22         set_gr_immed    2,gr8
23         set_icc         0xd,0
24         csmulcc         gr7,gr8,gr8,cc0,1
25         test_icc        0 0 0 1 icc0
26         test_gr_immed   0,gr8
27         test_gr_immed   2,gr9
28
29         set_gr_immed    2,gr7           ; multiply by 1
30         set_gr_immed    1,gr8
31         set_icc         0xe,0
32         csmulcc         gr7,gr8,gr8,cc4,1
33         test_icc        0 0 1 0 icc0
34         test_gr_immed   0,gr8
35         test_gr_immed   2,gr9
36
37         set_gr_immed    0,gr7           ; multiply by 0
38         set_gr_immed    2,gr8
39         set_icc         0xb,0
40         csmulcc         gr7,gr8,gr8,cc4,1
41         test_icc        0 1 1 1 icc0
42         test_gr_immed   0,gr8
43         test_gr_immed   0,gr9
44
45         set_gr_immed    2,gr7           ; multiply by 0
46         set_gr_immed    0,gr8
47         set_icc         0x8,0
48         csmulcc         gr7,gr8,gr8,cc0,1
49         test_icc        0 1 0 0 icc0
50         test_gr_immed   0,gr8
51         test_gr_immed   0,gr9
52
53         set_gr_limmed   0x3fff,0xffff,gr7       ; 31 bit result
54         set_gr_immed    2,gr8
55         set_icc         0xd,0
56         csmulcc         gr7,gr8,gr8,cc0,1
57         test_icc        0 0 0 1 icc0
58         test_gr_immed   0,gr8
59         test_gr_limmed  0x7fff,0xfffe,gr9
60
61         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
62         set_gr_immed    2,gr8
63         set_icc         0xe,0
64         csmulcc         gr7,gr8,gr8,cc4,1
65         test_icc        0 0 1 0 icc0
66         test_gr_immed   0,gr8
67         test_gr_limmed  0x8000,0x0000,gr9
68
69         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
70         set_gr_immed    4,gr8
71         set_icc         0xf,0
72         csmulcc         gr7,gr8,gr8,cc4,1
73         test_icc        0 0 1 1 icc0
74         test_gr_immed   1,gr8
75         test_gr_limmed  0x0000,0x0000,gr9
76
77         set_gr_limmed   0x7fff,0xffff,gr7       ; max positive result
78         set_gr_limmed   0x7fff,0xffff,gr8
79         set_icc         0xc,0
80         csmulcc         gr7,gr8,gr8,cc0,1
81         test_icc        0 0 0 0 icc0
82         test_gr_limmed  0x3fff,0xffff,gr8
83         test_gr_immed   0x00000001,gr9
84
85         ; Mixed operands
86         set_gr_immed    -3,gr7          ; multiply small numbers
87         set_gr_immed    2,gr8
88         set_icc         0x5,0
89         csmulcc         gr7,gr8,gr8,cc0,1
90         test_icc        1 0 0 1 icc0
91         test_gr_immed   -1,gr8
92         test_gr_immed   -6,gr9
93
94         set_gr_immed    3,gr7           ; multiply small numbers
95         set_gr_immed    -2,gr8
96         set_icc         0x6,0
97         csmulcc         gr7,gr8,gr8,cc4,1
98         test_icc        1 0 1 0 icc0
99         test_gr_immed   -1,gr8
100         test_gr_immed   -6,gr9
101
102         set_gr_immed    1,gr7           ; multiply by 1
103         set_gr_immed    -2,gr8
104         set_icc         0x7,0
105         csmulcc         gr7,gr8,gr8,cc4,1
106         test_icc        1 0 1 1 icc0
107         test_gr_immed   -1,gr8
108         test_gr_immed   -2,gr9
109
110         set_gr_immed    -2,gr7          ; multiply by 1
111         set_gr_immed    1,gr8
112         set_icc         0x4,0
113         csmulcc         gr7,gr8,gr8,cc0,1
114         test_icc        1 0 0 0 icc0
115         test_gr_immed   -1,gr8
116         test_gr_immed   -2,gr9
117
118         set_gr_immed    0,gr7           ; multiply by 0
119         set_gr_immed    -2,gr8
120         set_icc         0x9,0
121         csmulcc         gr7,gr8,gr8,cc0,1
122         test_icc        0 1 0 1 icc0
123         test_gr_immed   0,gr8
124         test_gr_immed   0,gr9
125
126         set_gr_immed    -2,gr7          ; multiply by 0
127         set_gr_immed    0,gr8
128         set_icc         0xa,0
129         csmulcc         gr7,gr8,gr8,cc4,1
130         test_icc        0 1 1 0 icc0
131         test_gr_immed   0,gr8
132         test_gr_immed   0,gr9
133
134         set_gr_limmed   0x2000,0x0001,gr7       ; 31 bit result
135         set_gr_immed    -2,gr8
136         set_icc         0x7,0
137         csmulcc         gr7,gr8,gr8,cc4,1
138         test_icc        1 0 1 1 icc0
139         test_gr_limmed  0xffff,0xffff,gr8
140         test_gr_limmed  0xbfff,0xfffe,gr9
141
142         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
143         set_gr_immed    -2,gr8
144         set_icc         0x4,0
145         csmulcc         gr7,gr8,gr8,cc0,1
146         test_icc        1 0 0 0 icc0
147         test_gr_limmed  0xffff,0xffff,gr8
148         test_gr_limmed  0x8000,0x0000,gr9
149
150         set_gr_limmed   0x4000,0x0001,gr7       ; 32 bit result
151         set_gr_immed    -2,gr8
152         set_icc         0x5,0
153         csmulcc         gr7,gr8,gr8,cc0,1
154         test_icc        1 0 0 1 icc0
155         test_gr_limmed  0xffff,0xffff,gr8
156         test_gr_limmed  0x7fff,0xfffe,gr9
157
158         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
159         set_gr_immed    -4,gr8
160         set_icc         0x6,0
161         csmulcc         gr7,gr8,gr8,cc4,1
162         test_icc        1 0 1 0 icc0
163         test_gr_limmed  0xffff,0xffff,gr8
164         test_gr_limmed  0x0000,0x0000,gr9
165
166         set_gr_limmed   0x7fff,0xffff,gr7       ; max negative result
167         set_gr_limmed   0x8000,0x0000,gr8
168         set_icc         0x7,0
169         csmulcc         gr7,gr8,gr8,cc4,1
170         test_icc        1 0 1 1 icc0
171         test_gr_limmed  0xc000,0x0000,gr8
172         test_gr_limmed  0x8000,0x0000,gr9
173
174         ; Negative operands
175         set_gr_immed    -3,gr7          ; multiply small numbers
176         set_gr_immed    -2,gr8
177         set_icc         0xc,0
178         csmulcc         gr7,gr8,gr8,cc0,1
179         test_icc        0 0 0 0 icc0
180         test_gr_immed   0,gr8
181         test_gr_immed   6,gr9
182
183         set_gr_immed    -1,gr7          ; multiply by 1
184         set_gr_immed    -2,gr8
185         set_icc         0xd,0
186         csmulcc         gr7,gr8,gr8,cc0,1
187         test_icc        0 0 0 1 icc0
188         test_gr_immed   0,gr8
189         test_gr_immed   2,gr9
190
191         set_gr_immed    -2,gr7          ; multiply by 1
192         set_gr_immed    -1,gr8
193         set_icc         0xe,0
194         csmulcc         gr7,gr8,gr8,cc4,1
195         test_icc        0 0 1 0 icc0
196         test_gr_immed   0,gr8
197         test_gr_immed   2,gr9
198
199         set_gr_limmed   0xc000,0x0001,gr7       ; 31 bit result
200         set_gr_immed    -2,gr8
201         set_icc         0xf,0
202         csmulcc         gr7,gr8,gr8,cc4,1
203         test_icc        0 0 1 1 icc0
204         test_gr_immed   0,gr8
205         test_gr_limmed  0x7fff,0xfffe,gr9
206
207         set_gr_limmed   0xc000,0x0000,gr7       ; 32 bit result
208         set_gr_immed    -2,gr8
209         set_icc         0xc,0
210         csmulcc         gr7,gr8,gr8,cc0,1
211         test_icc        0 0 0 0 icc0
212         test_gr_immed   0,gr8
213         test_gr_limmed  0x8000,0x0000,gr9
214
215         set_gr_limmed   0xc000,0x0000,gr7       ; 33 bit result
216         set_gr_immed    -4,gr8
217         set_icc         0xd,0
218         csmulcc         gr7,gr8,gr8,cc0,1
219         test_icc        0 0 0 1 icc0
220         test_gr_immed   1,gr8
221         test_gr_immed   0x00000000,gr9
222
223         set_gr_limmed   0x8000,0x0001,gr7       ; almost max positive result
224         set_gr_limmed   0x8000,0x0001,gr8
225         set_icc         0xe,0
226         csmulcc         gr7,gr8,gr8,cc4,1
227         test_icc        0 0 1 0 icc0
228         test_gr_limmed  0x3fff,0xffff,gr8
229         test_gr_immed   0x00000001,gr9
230
231
232         set_gr_limmed   0x8000,0x0000,gr7       ; max positive result
233         set_gr_limmed   0x8000,0x0000,gr8
234         set_icc         0xf,0
235         csmulcc         gr7,gr8,gr8,cc4,1
236         test_icc        0 0 1 1 icc0
237         test_gr_limmed  0x4000,0x0000,gr8
238         test_gr_immed   0x00000000,gr9
239
240         ; Positive operands
241         set_gr_immed    3,gr7           ; multiply small numbers
242         set_gr_immed    2,gr8
243         set_icc         0x0,0
244         csmulcc         gr7,gr8,gr8,cc0,0
245         test_icc        0 0 0 0 icc0
246         test_gr_immed   2,gr8
247         test_gr_immed   0,gr9
248
249         set_gr_immed    1,gr7           ; multiply by 1
250         set_gr_immed    2,gr8
251         set_icc         0x1,0
252         csmulcc         gr7,gr8,gr8,cc0,0
253         test_icc        0 0 0 1 icc0
254         test_gr_immed   2,gr8
255         test_gr_immed   0,gr9
256
257         set_gr_immed    2,gr7           ; multiply by 1
258         set_gr_immed    1,gr8
259         set_icc         0x2,0
260         csmulcc         gr7,gr8,gr8,cc4,0
261         test_icc        0 0 1 0 icc0
262         test_gr_immed   1,gr8
263         test_gr_immed   0,gr9
264
265         set_gr_immed    0,gr7           ; multiply by 0
266         set_gr_immed    2,gr8
267         set_icc         0x3,0
268         csmulcc         gr7,gr8,gr8,cc4,0
269         test_icc        0 0 1 1 icc0
270         test_gr_immed   2,gr8
271         test_gr_immed   0,gr9
272
273         set_gr_immed    2,gr7           ; multiply by 0
274         set_gr_immed    0,gr8
275         set_icc         0x4,0
276         csmulcc         gr7,gr8,gr8,cc0,0
277         test_icc        0 1 0 0 icc0
278         test_gr_immed   0,gr8
279         test_gr_immed   0,gr9
280
281         set_gr_limmed   0x3fff,0xffff,gr7       ; 31 bit result
282         set_gr_immed    2,gr8
283         set_icc         0x5,0
284         csmulcc         gr7,gr8,gr8,cc0,0
285         test_icc        0 1 0 1 icc0
286         test_gr_immed   2,gr8
287         test_gr_immed   0,gr9
288
289         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
290         set_gr_immed    2,gr8
291         set_icc         0x6,0
292         csmulcc         gr7,gr8,gr8,cc4,0
293         test_icc        0 1 1 0 icc0
294         test_gr_immed   2,gr8
295         test_gr_immed   0,gr9
296
297         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
298         set_gr_immed    4,gr8
299         set_icc         0x7,0
300         csmulcc         gr7,gr8,gr8,cc4,0
301         test_icc        0 1 1 1 icc0
302         test_gr_immed   4,gr8
303         test_gr_immed   0,gr9
304
305         set_gr_limmed   0x7fff,0xffff,gr7       ; max positive result
306         set_gr_limmed   0x7fff,0xffff,gr8
307         set_icc         0x8,0
308         csmulcc         gr7,gr8,gr8,cc0,0
309         test_icc        1 0 0 0 icc0
310         test_gr_limmed  0x7fff,0xffff,gr8
311         test_gr_immed   0,gr9
312
313         ; Mixed operands
314         set_gr_immed    -3,gr7          ; multiply small numbers
315         set_gr_immed    2,gr8
316         set_icc         0x9,0
317         csmulcc         gr7,gr8,gr8,cc0,0
318         test_icc        1 0 0 1 icc0
319         test_gr_immed   2,gr8
320         test_gr_immed   0,gr9
321
322         set_gr_immed    3,gr7           ; multiply small numbers
323         set_gr_immed    -2,gr8
324         set_icc         0xa,0
325         csmulcc         gr7,gr8,gr8,cc4,0
326         test_icc        1 0 1 0 icc0
327         test_gr_immed   -2,gr8
328         test_gr_immed   0,gr9
329
330         set_gr_immed    1,gr7           ; multiply by 1
331         set_gr_immed    -2,gr8
332         set_icc         0xb,0
333         csmulcc         gr7,gr8,gr8,cc4,0
334         test_icc        1 0 1 1 icc0
335         test_gr_immed   -2,gr8
336         test_gr_immed   0,gr9
337
338         set_gr_immed    -2,gr7          ; multiply by 1
339         set_gr_immed    1,gr8
340         set_icc         0xc,0
341         csmulcc         gr7,gr8,gr8,cc0,0
342         test_icc        1 1 0 0 icc0
343         test_gr_immed   1,gr8
344         test_gr_immed   0,gr9
345
346         set_gr_immed    0,gr7           ; multiply by 0
347         set_gr_immed    -2,gr8
348         set_icc         0xd,0
349         csmulcc         gr7,gr8,gr8,cc0,0
350         test_icc        1 1 0 1 icc0
351         test_gr_immed   -2,gr8
352         test_gr_immed   0,gr9
353
354         set_gr_immed    -2,gr7          ; multiply by 0
355         set_gr_immed    0,gr8
356         set_icc         0xe,0
357         csmulcc         gr7,gr8,gr8,cc4,0
358         test_icc        1 1 1 0 icc0
359         test_gr_immed   0,gr8
360         test_gr_immed   0,gr9
361
362         set_gr_limmed   0x2000,0x0001,gr7       ; 31 bit result
363         set_gr_immed    -2,gr8
364         set_icc         0xf,0
365         csmulcc         gr7,gr8,gr8,cc4,0
366         test_icc        1 1 1 1 icc0
367         test_gr_immed   -2,gr8
368         test_gr_immed   0,gr9
369
370         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
371         set_gr_immed    -2,gr8
372         set_icc         0x0,0
373         csmulcc         gr7,gr8,gr8,cc0,0
374         test_icc        0 0 0 0 icc0
375         test_gr_immed   -2,gr8
376         test_gr_immed   0,gr9
377
378         set_gr_limmed   0x4000,0x0001,gr7       ; 32 bit result
379         set_gr_immed    -2,gr8
380         set_icc         0x1,0
381         csmulcc         gr7,gr8,gr8,cc0,0
382         test_icc        0 0 0 1 icc0
383         test_gr_immed   -2,gr8
384         test_gr_immed   0,gr9
385
386         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
387         set_gr_immed    -4,gr8
388         set_icc         0x2,0
389         csmulcc         gr7,gr8,gr8,cc4,0
390         test_icc        0 0 1 0 icc0
391         test_gr_immed   -4,gr8
392         test_gr_immed   0,gr9
393
394         set_gr_limmed   0x7fff,0xffff,gr7       ; max negative result
395         set_gr_limmed   0x8000,0x0000,gr8
396         set_icc         0x3,0
397         csmulcc         gr7,gr8,gr8,cc4,0
398         test_icc        0 0 1 1 icc0
399         test_gr_limmed  0x8000,0x0000,gr8
400         test_gr_immed   0,gr9
401
402         ; Negative operands
403         set_gr_immed    -3,gr7          ; multiply small numbers
404         set_gr_immed    -2,gr8
405         set_icc         0x4,0
406         csmulcc         gr7,gr8,gr8,cc0,0
407         test_icc        0 1 0 0 icc0
408         test_gr_immed   -2,gr8
409         test_gr_immed   0,gr9
410
411         set_gr_immed    -1,gr7          ; multiply by 1
412         set_gr_immed    -2,gr8
413         set_icc         0x5,0
414         csmulcc         gr7,gr8,gr8,cc0,0
415         test_icc        0 1 0 1 icc0
416         test_gr_immed   -2,gr8
417         test_gr_immed   0,gr9
418
419         set_gr_immed    -2,gr7          ; multiply by 1
420         set_gr_immed    -1,gr8
421         set_icc         0x6,0
422         csmulcc         gr7,gr8,gr8,cc4,0
423         test_icc        0 1 1 0 icc0
424         test_gr_immed   -1,gr8
425         test_gr_immed   0,gr9
426
427         set_gr_limmed   0xc000,0x0001,gr7       ; 31 bit result
428         set_gr_immed    -2,gr8
429         set_icc         0x7,0
430         csmulcc         gr7,gr8,gr8,cc4,0
431         test_icc        0 1 1 1 icc0
432         test_gr_immed   -2,gr8
433         test_gr_immed   0,gr9
434
435         set_gr_limmed   0xc000,0x0000,gr7       ; 32 bit result
436         set_gr_immed    -2,gr8
437         set_icc         0x8,0
438         csmulcc         gr7,gr8,gr8,cc0,0
439         test_icc        1 0 0 0 icc0
440         test_gr_immed   -2,gr8
441         test_gr_immed   0,gr9
442
443         set_gr_limmed   0xc000,0x0000,gr7       ; 33 bit result
444         set_gr_immed    -4,gr8
445         set_icc         0x9,0
446         csmulcc         gr7,gr8,gr8,cc0,0
447         test_icc        1 0 0 1 icc0
448         test_gr_immed   -4,gr8
449         test_gr_immed   0,gr9
450
451         set_gr_limmed   0x8000,0x0001,gr7       ; almost max positive result
452         set_gr_limmed   0x8000,0x0001,gr8
453         set_icc         0xa,0
454         csmulcc         gr7,gr8,gr8,cc4,0
455         test_icc        1 0 1 0 icc0
456         test_gr_limmed  0x8000,0x0001,gr8
457         test_gr_immed   0,gr9
458
459
460         set_gr_limmed   0x8000,0x0000,gr7       ; max positive result
461         set_gr_limmed   0x8000,0x0000,gr8
462         set_icc         0xb,0
463         csmulcc         gr7,gr8,gr8,cc4,0
464         test_icc        1 0 1 1 icc0
465         test_gr_limmed  0x8000,0x0000,gr8
466         test_gr_immed   0,gr9
467
468         ; Positive operands
469         set_gr_immed    3,gr7           ; multiply small numbers
470         set_gr_immed    2,gr8
471         set_icc         0xc,1
472         csmulcc         gr7,gr8,gr8,cc1,0
473         test_icc        0 0 0 0 icc1
474         test_gr_immed   0,gr8
475         test_gr_immed   6,gr9
476
477         set_gr_immed    1,gr7           ; multiply by 1
478         set_gr_immed    2,gr8
479         set_icc         0xd,1
480         csmulcc         gr7,gr8,gr8,cc1,0
481         test_icc        0 0 0 1 icc1
482         test_gr_immed   0,gr8
483         test_gr_immed   2,gr9
484
485         set_gr_immed    2,gr7           ; multiply by 1
486         set_gr_immed    1,gr8
487         set_icc         0xe,1
488         csmulcc         gr7,gr8,gr8,cc5,0
489         test_icc        0 0 1 0 icc1
490         test_gr_immed   0,gr8
491         test_gr_immed   2,gr9
492
493         set_gr_immed    0,gr7           ; multiply by 0
494         set_gr_immed    2,gr8
495         set_icc         0xb,1
496         csmulcc         gr7,gr8,gr8,cc5,0
497         test_icc        0 1 1 1 icc1
498         test_gr_immed   0,gr8
499         test_gr_immed   0,gr9
500
501         set_gr_immed    2,gr7           ; multiply by 0
502         set_gr_immed    0,gr8
503         set_icc         0x8,1
504         csmulcc         gr7,gr8,gr8,cc1,0
505         test_icc        0 1 0 0 icc1
506         test_gr_immed   0,gr8
507         test_gr_immed   0,gr9
508
509         set_gr_limmed   0x3fff,0xffff,gr7       ; 31 bit result
510         set_gr_immed    2,gr8
511         set_icc         0xd,1
512         csmulcc         gr7,gr8,gr8,cc1,0
513         test_icc        0 0 0 1 icc1
514         test_gr_immed   0,gr8
515         test_gr_limmed  0x7fff,0xfffe,gr9
516
517         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
518         set_gr_immed    2,gr8
519         set_icc         0xe,1
520         csmulcc         gr7,gr8,gr8,cc5,0
521         test_icc        0 0 1 0 icc1
522         test_gr_immed   0,gr8
523         test_gr_limmed  0x8000,0x0000,gr9
524
525         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
526         set_gr_immed    4,gr8
527         set_icc         0xf,1
528         csmulcc         gr7,gr8,gr8,cc5,0
529         test_icc        0 0 1 1 icc1
530         test_gr_immed   1,gr8
531         test_gr_limmed  0x0000,0x0000,gr9
532
533         set_gr_limmed   0x7fff,0xffff,gr7       ; max positive result
534         set_gr_limmed   0x7fff,0xffff,gr8
535         set_icc         0xc,1
536         csmulcc         gr7,gr8,gr8,cc1,0
537         test_icc        0 0 0 0 icc1
538         test_gr_limmed  0x3fff,0xffff,gr8
539         test_gr_immed   0x00000001,gr9
540
541         ; Mixed operands
542         set_gr_immed    -3,gr7          ; multiply small numbers
543         set_gr_immed    2,gr8
544         set_icc         0x5,1
545         csmulcc         gr7,gr8,gr8,cc1,0
546         test_icc        1 0 0 1 icc1
547         test_gr_immed   -1,gr8
548         test_gr_immed   -6,gr9
549
550         set_gr_immed    3,gr7           ; multiply small numbers
551         set_gr_immed    -2,gr8
552         set_icc         0x6,1
553         csmulcc         gr7,gr8,gr8,cc5,0
554         test_icc        1 0 1 0 icc1
555         test_gr_immed   -1,gr8
556         test_gr_immed   -6,gr9
557
558         set_gr_immed    1,gr7           ; multiply by 1
559         set_gr_immed    -2,gr8
560         set_icc         0x7,1
561         csmulcc         gr7,gr8,gr8,cc5,0
562         test_icc        1 0 1 1 icc1
563         test_gr_immed   -1,gr8
564         test_gr_immed   -2,gr9
565
566         set_gr_immed    -2,gr7          ; multiply by 1
567         set_gr_immed    1,gr8
568         set_icc         0x4,1
569         csmulcc         gr7,gr8,gr8,cc1,0
570         test_icc        1 0 0 0 icc1
571         test_gr_immed   -1,gr8
572         test_gr_immed   -2,gr9
573
574         set_gr_immed    0,gr7           ; multiply by 0
575         set_gr_immed    -2,gr8
576         set_icc         0x9,1
577         csmulcc         gr7,gr8,gr8,cc1,0
578         test_icc        0 1 0 1 icc1
579         test_gr_immed   0,gr8
580         test_gr_immed   0,gr9
581
582         set_gr_immed    -2,gr7          ; multiply by 0
583         set_gr_immed    0,gr8
584         set_icc         0xa,1
585         csmulcc         gr7,gr8,gr8,cc5,0
586         test_icc        0 1 1 0 icc1
587         test_gr_immed   0,gr8
588         test_gr_immed   0,gr9
589
590         set_gr_limmed   0x2000,0x0001,gr7       ; 31 bit result
591         set_gr_immed    -2,gr8
592         set_icc         0x7,1
593         csmulcc         gr7,gr8,gr8,cc5,0
594         test_icc        1 0 1 1 icc1
595         test_gr_limmed  0xffff,0xffff,gr8
596         test_gr_limmed  0xbfff,0xfffe,gr9
597
598         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
599         set_gr_immed    -2,gr8
600         set_icc         0x4,1
601         csmulcc         gr7,gr8,gr8,cc1,0
602         test_icc        1 0 0 0 icc1
603         test_gr_limmed  0xffff,0xffff,gr8
604         test_gr_limmed  0x8000,0x0000,gr9
605
606         set_gr_limmed   0x4000,0x0001,gr7       ; 32 bit result
607         set_gr_immed    -2,gr8
608         set_icc         0x5,1
609         csmulcc         gr7,gr8,gr8,cc1,0
610         test_icc        1 0 0 1 icc1
611         test_gr_limmed  0xffff,0xffff,gr8
612         test_gr_limmed  0x7fff,0xfffe,gr9
613
614         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
615         set_gr_immed    -4,gr8
616         set_icc         0x6,1
617         csmulcc         gr7,gr8,gr8,cc5,0
618         test_icc        1 0 1 0 icc1
619         test_gr_limmed  0xffff,0xffff,gr8
620         test_gr_limmed  0x0000,0x0000,gr9
621
622         set_gr_limmed   0x7fff,0xffff,gr7       ; max negative result
623         set_gr_limmed   0x8000,0x0000,gr8
624         set_icc         0x7,1
625         csmulcc         gr7,gr8,gr8,cc5,0
626         test_icc        1 0 1 1 icc1
627         test_gr_limmed  0xc000,0x0000,gr8
628         test_gr_limmed  0x8000,0x0000,gr9
629
630         ; Negative operands
631         set_gr_immed    -3,gr7          ; multiply small numbers
632         set_gr_immed    -2,gr8
633         set_icc         0xc,1
634         csmulcc         gr7,gr8,gr8,cc1,0
635         test_icc        0 0 0 0 icc1
636         test_gr_immed   0,gr8
637         test_gr_immed   6,gr9
638
639         set_gr_immed    -1,gr7          ; multiply by 1
640         set_gr_immed    -2,gr8
641         set_icc         0xd,1
642         csmulcc         gr7,gr8,gr8,cc1,0
643         test_icc        0 0 0 1 icc1
644         test_gr_immed   0,gr8
645         test_gr_immed   2,gr9
646
647         set_gr_immed    -2,gr7          ; multiply by 1
648         set_gr_immed    -1,gr8
649         set_icc         0xe,1
650         csmulcc         gr7,gr8,gr8,cc5,0
651         test_icc        0 0 1 0 icc1
652         test_gr_immed   0,gr8
653         test_gr_immed   2,gr9
654
655         set_gr_limmed   0xc000,0x0001,gr7       ; 31 bit result
656         set_gr_immed    -2,gr8
657         set_icc         0xf,1
658         csmulcc         gr7,gr8,gr8,cc5,0
659         test_icc        0 0 1 1 icc1
660         test_gr_immed   0,gr8
661         test_gr_limmed  0x7fff,0xfffe,gr9
662
663         set_gr_limmed   0xc000,0x0000,gr7       ; 32 bit result
664         set_gr_immed    -2,gr8
665         set_icc         0xc,1
666         csmulcc         gr7,gr8,gr8,cc1,0
667         test_icc        0 0 0 0 icc1
668         test_gr_immed   0,gr8
669         test_gr_limmed  0x8000,0x0000,gr9
670
671         set_gr_limmed   0xc000,0x0000,gr7       ; 33 bit result
672         set_gr_immed    -4,gr8
673         set_icc         0xd,1
674         csmulcc         gr7,gr8,gr8,cc1,0
675         test_icc        0 0 0 1 icc1
676         test_gr_immed   1,gr8
677         test_gr_immed   0x00000000,gr9
678
679         set_gr_limmed   0x8000,0x0001,gr7       ; almost max positive result
680         set_gr_limmed   0x8000,0x0001,gr8
681         set_icc         0xe,1
682         csmulcc         gr7,gr8,gr8,cc5,0
683         test_icc        0 0 1 0 icc1
684         test_gr_limmed  0x3fff,0xffff,gr8
685         test_gr_immed   0x00000001,gr9
686
687
688         set_gr_limmed   0x8000,0x0000,gr7       ; max positive result
689         set_gr_limmed   0x8000,0x0000,gr8
690         set_icc         0xf,1
691         csmulcc         gr7,gr8,gr8,cc5,0
692         test_icc        0 0 1 1 icc1
693         test_gr_limmed  0x4000,0x0000,gr8
694         test_gr_immed   0x00000000,gr9
695
696         ; Positive operands
697         set_gr_immed    3,gr7           ; multiply small numbers
698         set_gr_immed    2,gr8
699         set_icc         0x0,1
700         csmulcc         gr7,gr8,gr8,cc1,1
701         test_icc        0 0 0 0 icc1
702         test_gr_immed   2,gr8
703         test_gr_immed   0,gr9
704
705         set_gr_immed    1,gr7           ; multiply by 1
706         set_gr_immed    2,gr8
707         set_icc         0x1,1
708         csmulcc         gr7,gr8,gr8,cc1,1
709         test_icc        0 0 0 1 icc1
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         set_icc         0x2,1
716         csmulcc         gr7,gr8,gr8,cc5,1
717         test_icc        0 0 1 0 icc1
718         test_gr_immed   1,gr8
719         test_gr_immed   0,gr9
720
721         set_gr_immed    0,gr7           ; multiply by 0
722         set_gr_immed    2,gr8
723         set_icc         0x3,1
724         csmulcc         gr7,gr8,gr8,cc5,1
725         test_icc        0 0 1 1 icc1
726         test_gr_immed   2,gr8
727         test_gr_immed   0,gr9
728
729         set_gr_immed    2,gr7           ; multiply by 0
730         set_gr_immed    0,gr8
731         set_icc         0x4,1
732         csmulcc         gr7,gr8,gr8,cc1,1
733         test_icc        0 1 0 0 icc1
734         test_gr_immed   0,gr8
735         test_gr_immed   0,gr9
736
737         set_gr_limmed   0x3fff,0xffff,gr7       ; 31 bit result
738         set_gr_immed    2,gr8
739         set_icc         0x5,1
740         csmulcc         gr7,gr8,gr8,cc1,1
741         test_icc        0 1 0 1 icc1
742         test_gr_immed   2,gr8
743         test_gr_immed   0,gr9
744
745         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
746         set_gr_immed    2,gr8
747         set_icc         0x6,1
748         csmulcc         gr7,gr8,gr8,cc5,1
749         test_icc        0 1 1 0 icc1
750         test_gr_immed   2,gr8
751         test_gr_immed   0,gr9
752
753         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
754         set_gr_immed    4,gr8
755         set_icc         0x7,1
756         csmulcc         gr7,gr8,gr8,cc5,1
757         test_icc        0 1 1 1 icc1
758         test_gr_immed   4,gr8
759         test_gr_immed   0,gr9
760
761         set_gr_limmed   0x7fff,0xffff,gr7       ; max positive result
762         set_gr_limmed   0x7fff,0xffff,gr8
763         set_icc         0x8,1
764         csmulcc         gr7,gr8,gr8,cc1,1
765         test_icc        1 0 0 0 icc1
766         test_gr_limmed  0x7fff,0xffff,gr8
767         test_gr_immed   0,gr9
768
769         ; Mixed operands
770         set_gr_immed    -3,gr7          ; multiply small numbers
771         set_gr_immed    2,gr8
772         set_icc         0x9,1
773         csmulcc         gr7,gr8,gr8,cc1,1
774         test_icc        1 0 0 1 icc1
775         test_gr_immed   2,gr8
776         test_gr_immed   0,gr9
777
778         set_gr_immed    3,gr7           ; multiply small numbers
779         set_gr_immed    -2,gr8
780         set_icc         0xa,1
781         csmulcc         gr7,gr8,gr8,cc5,1
782         test_icc        1 0 1 0 icc1
783         test_gr_immed   -2,gr8
784         test_gr_immed   0,gr9
785
786         set_gr_immed    1,gr7           ; multiply by 1
787         set_gr_immed    -2,gr8
788         set_icc         0xb,1
789         csmulcc         gr7,gr8,gr8,cc5,1
790         test_icc        1 0 1 1 icc1
791         test_gr_immed   -2,gr8
792         test_gr_immed   0,gr9
793
794         set_gr_immed    -2,gr7          ; multiply by 1
795         set_gr_immed    1,gr8
796         set_icc         0xc,1
797         csmulcc         gr7,gr8,gr8,cc1,1
798         test_icc        1 1 0 0 icc1
799         test_gr_immed   1,gr8
800         test_gr_immed   0,gr9
801
802         set_gr_immed    0,gr7           ; multiply by 0
803         set_gr_immed    -2,gr8
804         set_icc         0xd,1
805         csmulcc         gr7,gr8,gr8,cc1,1
806         test_icc        1 1 0 1 icc1
807         test_gr_immed   -2,gr8
808         test_gr_immed   0,gr9
809
810         set_gr_immed    -2,gr7          ; multiply by 0
811         set_gr_immed    0,gr8
812         set_icc         0xe,1
813         csmulcc         gr7,gr8,gr8,cc5,1
814         test_icc        1 1 1 0 icc1
815         test_gr_immed   0,gr8
816         test_gr_immed   0,gr9
817
818         set_gr_limmed   0x2000,0x0001,gr7       ; 31 bit result
819         set_gr_immed    -2,gr8
820         set_icc         0xf,1
821         csmulcc         gr7,gr8,gr8,cc5,1
822         test_icc        1 1 1 1 icc1
823         test_gr_immed   -2,gr8
824         test_gr_immed   0,gr9
825
826         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
827         set_gr_immed    -2,gr8
828         set_icc         0x0,1
829         csmulcc         gr7,gr8,gr8,cc1,1
830         test_icc        0 0 0 0 icc1
831         test_gr_immed   -2,gr8
832         test_gr_immed   0,gr9
833
834         set_gr_limmed   0x4000,0x0001,gr7       ; 32 bit result
835         set_gr_immed    -2,gr8
836         set_icc         0x1,1
837         csmulcc         gr7,gr8,gr8,cc1,1
838         test_icc        0 0 0 1 icc1
839         test_gr_immed   -2,gr8
840         test_gr_immed   0,gr9
841
842         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
843         set_gr_immed    -4,gr8
844         set_icc         0x2,1
845         csmulcc         gr7,gr8,gr8,cc5,1
846         test_icc        0 0 1 0 icc1
847         test_gr_immed   -4,gr8
848         test_gr_immed   0,gr9
849
850         set_gr_limmed   0x7fff,0xffff,gr7       ; max negative result
851         set_gr_limmed   0x8000,0x0000,gr8
852         set_icc         0x3,1
853         csmulcc         gr7,gr8,gr8,cc5,1
854         test_icc        0 0 1 1 icc1
855         test_gr_limmed  0x8000,0x0000,gr8
856         test_gr_immed   0,gr9
857
858         ; Negative operands
859         set_gr_immed    -3,gr7          ; multiply small numbers
860         set_gr_immed    -2,gr8
861         set_icc         0x4,1
862         csmulcc         gr7,gr8,gr8,cc1,1
863         test_icc        0 1 0 0 icc1
864         test_gr_immed   -2,gr8
865         test_gr_immed   0,gr9
866
867         set_gr_immed    -1,gr7          ; multiply by 1
868         set_gr_immed    -2,gr8
869         set_icc         0x5,1
870         csmulcc         gr7,gr8,gr8,cc1,1
871         test_icc        0 1 0 1 icc1
872         test_gr_immed   -2,gr8
873         test_gr_immed   0,gr9
874
875         set_gr_immed    -2,gr7          ; multiply by 1
876         set_gr_immed    -1,gr8
877         set_icc         0x6,1
878         csmulcc         gr7,gr8,gr8,cc5,1
879         test_icc        0 1 1 0 icc1
880         test_gr_immed   -1,gr8
881         test_gr_immed   0,gr9
882
883         set_gr_limmed   0xc000,0x0001,gr7       ; 31 bit result
884         set_gr_immed    -2,gr8
885         set_icc         0x7,1
886         csmulcc         gr7,gr8,gr8,cc5,1
887         test_icc        0 1 1 1 icc1
888         test_gr_immed   -2,gr8
889         test_gr_immed   0,gr9
890
891         set_gr_limmed   0xc000,0x0000,gr7       ; 32 bit result
892         set_gr_immed    -2,gr8
893         set_icc         0x8,1
894         csmulcc         gr7,gr8,gr8,cc1,1
895         test_icc        1 0 0 0 icc1
896         test_gr_immed   -2,gr8
897         test_gr_immed   0,gr9
898
899         set_gr_limmed   0xc000,0x0000,gr7       ; 33 bit result
900         set_gr_immed    -4,gr8
901         set_icc         0x9,1
902         csmulcc         gr7,gr8,gr8,cc1,1
903         test_icc        1 0 0 1 icc1
904         test_gr_immed   -4,gr8
905         test_gr_immed   0,gr9
906
907         set_gr_limmed   0x8000,0x0001,gr7       ; almost max positive result
908         set_gr_limmed   0x8000,0x0001,gr8
909         set_icc         0xa,1
910         csmulcc         gr7,gr8,gr8,cc5,1
911         test_icc        1 0 1 0 icc1
912         test_gr_limmed  0x8000,0x0001,gr8
913         test_gr_immed   0,gr9
914
915
916         set_gr_limmed   0x8000,0x0000,gr7       ; max positive result
917         set_gr_limmed   0x8000,0x0000,gr8
918         set_icc         0xb,1
919         csmulcc         gr7,gr8,gr8,cc5,1
920         test_icc        1 0 1 1 icc1
921         test_gr_limmed  0x8000,0x0000,gr8
922         test_gr_immed   0,gr9
923
924         ; Positive operands
925         set_gr_immed    3,gr7           ; multiply small numbers
926         set_gr_immed    2,gr8
927         set_icc         0x0,2
928         csmulcc         gr7,gr8,gr8,cc2,0
929         test_icc        0 0 0 0 icc2
930         test_gr_immed   2,gr8
931         test_gr_immed   0,gr9
932
933         set_gr_immed    1,gr7           ; multiply by 1
934         set_gr_immed    2,gr8
935         set_icc         0x1,2
936         csmulcc         gr7,gr8,gr8,cc2,1
937         test_icc        0 0 0 1 icc2
938         test_gr_immed   2,gr8
939         test_gr_immed   0,gr9
940
941         set_gr_immed    2,gr7           ; multiply by 1
942         set_gr_immed    1,gr8
943         set_icc         0x2,2
944         csmulcc         gr7,gr8,gr8,cc6,0
945         test_icc        0 0 1 0 icc2
946         test_gr_immed   1,gr8
947         test_gr_immed   0,gr9
948
949         set_gr_immed    0,gr7           ; multiply by 0
950         set_gr_immed    2,gr8
951         set_icc         0x3,2
952         csmulcc         gr7,gr8,gr8,cc6,1
953         test_icc        0 0 1 1 icc2
954         test_gr_immed   2,gr8
955         test_gr_immed   0,gr9
956
957         set_gr_immed    2,gr7           ; multiply by 0
958         set_gr_immed    0,gr8
959         set_icc         0x4,2
960         csmulcc         gr7,gr8,gr8,cc2,0
961         test_icc        0 1 0 0 icc2
962         test_gr_immed   0,gr8
963         test_gr_immed   0,gr9
964
965         set_gr_limmed   0x3fff,0xffff,gr7       ; 31 bit result
966         set_gr_immed    2,gr8
967         set_icc         0x5,2
968         csmulcc         gr7,gr8,gr8,cc2,1
969         test_icc        0 1 0 1 icc2
970         test_gr_immed   2,gr8
971         test_gr_immed   0,gr9
972
973         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
974         set_gr_immed    2,gr8
975         set_icc         0x6,2
976         csmulcc         gr7,gr8,gr8,cc6,1
977         test_icc        0 1 1 0 icc2
978         test_gr_immed   2,gr8
979         test_gr_immed   0,gr9
980
981         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
982         set_gr_immed    4,gr8
983         set_icc         0x7,2
984         csmulcc         gr7,gr8,gr8,cc6,0
985         test_icc        0 1 1 1 icc2
986         test_gr_immed   4,gr8
987         test_gr_immed   0,gr9
988
989         set_gr_limmed   0x7fff,0xffff,gr7       ; max positive result
990         set_gr_limmed   0x7fff,0xffff,gr8
991         set_icc         0x8,2
992         csmulcc         gr7,gr8,gr8,cc2,1
993         test_icc        1 0 0 0 icc2
994         test_gr_limmed  0x7fff,0xffff,gr8
995         test_gr_immed   0,gr9
996
997         ; Mixed operands
998         set_gr_immed    -3,gr7          ; multiply small numbers
999         set_gr_immed    2,gr8
1000         set_icc         0x9,2
1001         csmulcc         gr7,gr8,gr8,cc2,0
1002         test_icc        1 0 0 1 icc2
1003         test_gr_immed   2,gr8
1004         test_gr_immed   0,gr9
1005
1006         set_gr_immed    3,gr7           ; multiply small numbers
1007         set_gr_immed    -2,gr8
1008         set_icc         0xa,2
1009         csmulcc         gr7,gr8,gr8,cc6,1
1010         test_icc        1 0 1 0 icc2
1011         test_gr_immed   -2,gr8
1012         test_gr_immed   0,gr9
1013
1014         set_gr_immed    1,gr7           ; multiply by 1
1015         set_gr_immed    -2,gr8
1016         set_icc         0xb,2
1017         csmulcc         gr7,gr8,gr8,cc6,0
1018         test_icc        1 0 1 1 icc2
1019         test_gr_immed   -2,gr8
1020         test_gr_immed   0,gr9
1021
1022         set_gr_immed    -2,gr7          ; multiply by 1
1023         set_gr_immed    1,gr8
1024         set_icc         0xc,2
1025         csmulcc         gr7,gr8,gr8,cc2,1
1026         test_icc        1 1 0 0 icc2
1027         test_gr_immed   1,gr8
1028         test_gr_immed   0,gr9
1029
1030         set_gr_immed    0,gr7           ; multiply by 0
1031         set_gr_immed    -2,gr8
1032         set_icc         0xd,2
1033         csmulcc         gr7,gr8,gr8,cc2,0
1034         test_icc        1 1 0 1 icc2
1035         test_gr_immed   -2,gr8
1036         test_gr_immed   0,gr9
1037
1038         set_gr_immed    -2,gr7          ; multiply by 0
1039         set_gr_immed    0,gr8
1040         set_icc         0xe,2
1041         csmulcc         gr7,gr8,gr8,cc6,1
1042         test_icc        1 1 1 0 icc2
1043         test_gr_immed   0,gr8
1044         test_gr_immed   0,gr9
1045
1046         set_gr_limmed   0x2000,0x0001,gr7       ; 31 bit result
1047         set_gr_immed    -2,gr8
1048         set_icc         0xf,2
1049         csmulcc         gr7,gr8,gr8,cc6,0
1050         test_icc        1 1 1 1 icc2
1051         test_gr_immed   -2,gr8
1052         test_gr_immed   0,gr9
1053
1054         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
1055         set_gr_immed    -2,gr8
1056         set_icc         0x0,2
1057         csmulcc         gr7,gr8,gr8,cc2,1
1058         test_icc        0 0 0 0 icc2
1059         test_gr_immed   -2,gr8
1060         test_gr_immed   0,gr9
1061
1062         set_gr_limmed   0x4000,0x0001,gr7       ; 32 bit result
1063         set_gr_immed    -2,gr8
1064         set_icc         0x1,2
1065         csmulcc         gr7,gr8,gr8,cc2,0
1066         test_icc        0 0 0 1 icc2
1067         test_gr_immed   -2,gr8
1068         test_gr_immed   0,gr9
1069
1070         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
1071         set_gr_immed    -4,gr8
1072         set_icc         0x2,2
1073         csmulcc         gr7,gr8,gr8,cc6,1
1074         test_icc        0 0 1 0 icc2
1075         test_gr_immed   -4,gr8
1076         test_gr_immed   0,gr9
1077
1078         set_gr_limmed   0x7fff,0xffff,gr7       ; max negative result
1079         set_gr_limmed   0x8000,0x0000,gr8
1080         set_icc         0x3,2
1081         csmulcc         gr7,gr8,gr8,cc6,0
1082         test_icc        0 0 1 1 icc2
1083         test_gr_limmed  0x8000,0x0000,gr8
1084         test_gr_immed   0,gr9
1085
1086         ; Negative operands
1087         set_gr_immed    -3,gr7          ; multiply small numbers
1088         set_gr_immed    -2,gr8
1089         set_icc         0x4,2
1090         csmulcc         gr7,gr8,gr8,cc2,1
1091         test_icc        0 1 0 0 icc2
1092         test_gr_immed   -2,gr8
1093         test_gr_immed   0,gr9
1094
1095         set_gr_immed    -1,gr7          ; multiply by 1
1096         set_gr_immed    -2,gr8
1097         set_icc         0x5,2
1098         csmulcc         gr7,gr8,gr8,cc2,0
1099         test_icc        0 1 0 1 icc2
1100         test_gr_immed   -2,gr8
1101         test_gr_immed   0,gr9
1102
1103         set_gr_immed    -2,gr7          ; multiply by 1
1104         set_gr_immed    -1,gr8
1105         set_icc         0x6,2
1106         csmulcc         gr7,gr8,gr8,cc6,1
1107         test_icc        0 1 1 0 icc2
1108         test_gr_immed   -1,gr8
1109         test_gr_immed   0,gr9
1110
1111         set_gr_limmed   0xc000,0x0001,gr7       ; 31 bit result
1112         set_gr_immed    -2,gr8
1113         set_icc         0x7,2
1114         csmulcc         gr7,gr8,gr8,cc6,0
1115         test_icc        0 1 1 1 icc2
1116         test_gr_immed   -2,gr8
1117         test_gr_immed   0,gr9
1118
1119         set_gr_limmed   0xc000,0x0000,gr7       ; 32 bit result
1120         set_gr_immed    -2,gr8
1121         set_icc         0x8,2
1122         csmulcc         gr7,gr8,gr8,cc2,1
1123         test_icc        1 0 0 0 icc2
1124         test_gr_immed   -2,gr8
1125         test_gr_immed   0,gr9
1126
1127         set_gr_limmed   0xc000,0x0000,gr7       ; 33 bit result
1128         set_gr_immed    -4,gr8
1129         set_icc         0x9,2
1130         csmulcc         gr7,gr8,gr8,cc2,0
1131         test_icc        1 0 0 1 icc2
1132         test_gr_immed   -4,gr8
1133         test_gr_immed   0,gr9
1134
1135         set_gr_limmed   0x8000,0x0001,gr7       ; almost max positive result
1136         set_gr_limmed   0x8000,0x0001,gr8
1137         set_icc         0xa,2
1138         csmulcc         gr7,gr8,gr8,cc6,1
1139         test_icc        1 0 1 0 icc2
1140         test_gr_limmed  0x8000,0x0001,gr8
1141         test_gr_immed   0,gr9
1142
1143
1144         set_gr_limmed   0x8000,0x0000,gr7       ; max positive result
1145         set_gr_limmed   0x8000,0x0000,gr8
1146         set_icc         0xb,2
1147         csmulcc         gr7,gr8,gr8,cc6,0
1148         test_icc        1 0 1 1 icc2
1149         test_gr_limmed  0x8000,0x0000,gr8
1150         test_gr_immed   0,gr9
1151
1152         ; Positive operands
1153         set_gr_immed    3,gr7           ; multiply small numbers
1154         set_gr_immed    2,gr8
1155         set_icc         0x0,3
1156         csmulcc         gr7,gr8,gr8,cc3,0
1157         test_icc        0 0 0 0 icc3
1158         test_gr_immed   2,gr8
1159         test_gr_immed   0,gr9
1160
1161         set_gr_immed    1,gr7           ; multiply by 1
1162         set_gr_immed    2,gr8
1163         set_icc         0x1,3
1164         csmulcc         gr7,gr8,gr8,cc3,1
1165         test_icc        0 0 0 1 icc3
1166         test_gr_immed   2,gr8
1167         test_gr_immed   0,gr9
1168
1169         set_gr_immed    2,gr7           ; multiply by 1
1170         set_gr_immed    1,gr8
1171         set_icc         0x2,3
1172         csmulcc         gr7,gr8,gr8,cc7,0
1173         test_icc        0 0 1 0 icc3
1174         test_gr_immed   1,gr8
1175         test_gr_immed   0,gr9
1176
1177         set_gr_immed    0,gr7           ; multiply by 0
1178         set_gr_immed    2,gr8
1179         set_icc         0x3,3
1180         csmulcc         gr7,gr8,gr8,cc7,1
1181         test_icc        0 0 1 1 icc3
1182         test_gr_immed   2,gr8
1183         test_gr_immed   0,gr9
1184
1185         set_gr_immed    2,gr7           ; multiply by 0
1186         set_gr_immed    0,gr8
1187         set_icc         0x4,3
1188         csmulcc         gr7,gr8,gr8,cc3,0
1189         test_icc        0 1 0 0 icc3
1190         test_gr_immed   0,gr8
1191         test_gr_immed   0,gr9
1192
1193         set_gr_limmed   0x3fff,0xffff,gr7       ; 31 bit result
1194         set_gr_immed    2,gr8
1195         set_icc         0x5,3
1196         csmulcc         gr7,gr8,gr8,cc3,1
1197         test_icc        0 1 0 1 icc3
1198         test_gr_immed   2,gr8
1199         test_gr_immed   0,gr9
1200
1201         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
1202         set_gr_immed    2,gr8
1203         set_icc         0x6,3
1204         csmulcc         gr7,gr8,gr8,cc7,1
1205         test_icc        0 1 1 0 icc3
1206         test_gr_immed   2,gr8
1207         test_gr_immed   0,gr9
1208
1209         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
1210         set_gr_immed    4,gr8
1211         set_icc         0x7,3
1212         csmulcc         gr7,gr8,gr8,cc7,0
1213         test_icc        0 1 1 1 icc3
1214         test_gr_immed   4,gr8
1215         test_gr_immed   0,gr9
1216
1217         set_gr_limmed   0x7fff,0xffff,gr7       ; max positive result
1218         set_gr_limmed   0x7fff,0xffff,gr8
1219         set_icc         0x8,3
1220         csmulcc         gr7,gr8,gr8,cc3,1
1221         test_icc        1 0 0 0 icc3
1222         test_gr_limmed  0x7fff,0xffff,gr8
1223         test_gr_immed   0,gr9
1224
1225         ; Mixed operands
1226         set_gr_immed    -3,gr7          ; multiply small numbers
1227         set_gr_immed    2,gr8
1228         set_icc         0x9,3
1229         csmulcc         gr7,gr8,gr8,cc3,0
1230         test_icc        1 0 0 1 icc3
1231         test_gr_immed   2,gr8
1232         test_gr_immed   0,gr9
1233
1234         set_gr_immed    3,gr7           ; multiply small numbers
1235         set_gr_immed    -2,gr8
1236         set_icc         0xa,3
1237         csmulcc         gr7,gr8,gr8,cc7,1
1238         test_icc        1 0 1 0 icc3
1239         test_gr_immed   -2,gr8
1240         test_gr_immed   0,gr9
1241
1242         set_gr_immed    1,gr7           ; multiply by 1
1243         set_gr_immed    -2,gr8
1244         set_icc         0xb,3
1245         csmulcc         gr7,gr8,gr8,cc7,0
1246         test_icc        1 0 1 1 icc3
1247         test_gr_immed   -2,gr8
1248         test_gr_immed   0,gr9
1249
1250         set_gr_immed    -2,gr7          ; multiply by 1
1251         set_gr_immed    1,gr8
1252         set_icc         0xc,3
1253         csmulcc         gr7,gr8,gr8,cc3,1
1254         test_icc        1 1 0 0 icc3
1255         test_gr_immed   1,gr8
1256         test_gr_immed   0,gr9
1257
1258         set_gr_immed    0,gr7           ; multiply by 0
1259         set_gr_immed    -2,gr8
1260         set_icc         0xd,3
1261         csmulcc         gr7,gr8,gr8,cc3,0
1262         test_icc        1 1 0 1 icc3
1263         test_gr_immed   -2,gr8
1264         test_gr_immed   0,gr9
1265
1266         set_gr_immed    -2,gr7          ; multiply by 0
1267         set_gr_immed    0,gr8
1268         set_icc         0xe,3
1269         csmulcc         gr7,gr8,gr8,cc7,1
1270         test_icc        1 1 1 0 icc3
1271         test_gr_immed   0,gr8
1272         test_gr_immed   0,gr9
1273
1274         set_gr_limmed   0x2000,0x0001,gr7       ; 31 bit result
1275         set_gr_immed    -2,gr8
1276         set_icc         0xf,3
1277         csmulcc         gr7,gr8,gr8,cc7,0
1278         test_icc        1 1 1 1 icc3
1279         test_gr_immed   -2,gr8
1280         test_gr_immed   0,gr9
1281
1282         set_gr_limmed   0x4000,0x0000,gr7       ; 32 bit result
1283         set_gr_immed    -2,gr8
1284         set_icc         0x0,3
1285         csmulcc         gr7,gr8,gr8,cc3,1
1286         test_icc        0 0 0 0 icc3
1287         test_gr_immed   -2,gr8
1288         test_gr_immed   0,gr9
1289
1290         set_gr_limmed   0x4000,0x0001,gr7       ; 32 bit result
1291         set_gr_immed    -2,gr8
1292         set_icc         0x1,3
1293         csmulcc         gr7,gr8,gr8,cc3,0
1294         test_icc        0 0 0 1 icc3
1295         test_gr_immed   -2,gr8
1296         test_gr_immed   0,gr9
1297
1298         set_gr_limmed   0x4000,0x0000,gr7       ; 33 bit result
1299         set_gr_immed    -4,gr8
1300         set_icc         0x2,3
1301         csmulcc         gr7,gr8,gr8,cc7,1
1302         test_icc        0 0 1 0 icc3
1303         test_gr_immed   -4,gr8
1304         test_gr_immed   0,gr9
1305
1306         set_gr_limmed   0x7fff,0xffff,gr7       ; max negative result
1307         set_gr_limmed   0x8000,0x0000,gr8
1308         set_icc         0x3,3
1309         csmulcc         gr7,gr8,gr8,cc7,0
1310         test_icc        0 0 1 1 icc3
1311         test_gr_limmed  0x8000,0x0000,gr8
1312         test_gr_immed   0,gr9
1313
1314         ; Negative operands
1315         set_gr_immed    -3,gr7          ; multiply small numbers
1316         set_gr_immed    -2,gr8
1317         set_icc         0x4,3
1318         csmulcc         gr7,gr8,gr8,cc3,1
1319         test_icc        0 1 0 0 icc3
1320         test_gr_immed   -2,gr8
1321         test_gr_immed   0,gr9
1322
1323         set_gr_immed    -1,gr7          ; multiply by 1
1324         set_gr_immed    -2,gr8
1325         set_icc         0x5,3
1326         csmulcc         gr7,gr8,gr8,cc3,0
1327         test_icc        0 1 0 1 icc3
1328         test_gr_immed   -2,gr8
1329         test_gr_immed   0,gr9
1330
1331         set_gr_immed    -2,gr7          ; multiply by 1
1332         set_gr_immed    -1,gr8
1333         set_icc         0x6,3
1334         csmulcc         gr7,gr8,gr8,cc7,1
1335         test_icc        0 1 1 0 icc3
1336         test_gr_immed   -1,gr8
1337         test_gr_immed   0,gr9
1338
1339         set_gr_limmed   0xc000,0x0001,gr7       ; 31 bit result
1340         set_gr_immed    -2,gr8
1341         set_icc         0x7,3
1342         csmulcc         gr7,gr8,gr8,cc7,0
1343         test_icc        0 1 1 1 icc3
1344         test_gr_immed   -2,gr8
1345         test_gr_immed   0,gr9
1346
1347         set_gr_limmed   0xc000,0x0000,gr7       ; 32 bit result
1348         set_gr_immed    -2,gr8
1349         set_icc         0x8,3
1350         csmulcc         gr7,gr8,gr8,cc3,1
1351         test_icc        1 0 0 0 icc3
1352         test_gr_immed   -2,gr8
1353         test_gr_immed   0,gr9
1354
1355         set_gr_limmed   0xc000,0x0000,gr7       ; 33 bit result
1356         set_gr_immed    -4,gr8
1357         set_icc         0x9,3
1358         csmulcc         gr7,gr8,gr8,cc3,0
1359         test_icc        1 0 0 1 icc3
1360         test_gr_immed   -4,gr8
1361         test_gr_immed   0,gr9
1362
1363         set_gr_limmed   0x8000,0x0001,gr7       ; almost max positive result
1364         set_gr_limmed   0x8000,0x0001,gr8
1365         set_icc         0xa,3
1366         csmulcc         gr7,gr8,gr8,cc7,1
1367         test_icc        1 0 1 0 icc3
1368         test_gr_limmed  0x8000,0x0001,gr8
1369         test_gr_immed   0,gr9
1370
1371
1372         set_gr_limmed   0x8000,0x0000,gr7       ; max positive result
1373         set_gr_limmed   0x8000,0x0000,gr8
1374         set_icc         0xb,3
1375         csmulcc         gr7,gr8,gr8,cc7,0
1376         test_icc        1 0 1 1 icc3
1377         test_gr_limmed  0x8000,0x0000,gr8
1378         test_gr_immed   0,gr9
1379
1380         pass