daily update
[external/binutils.git] / sim / testsuite / sim / frv / cmmulhs.cgs
1 # frv testcase for cmmulhs $GRi,$GRj,$ACCk,$CCi,$cond
2 # mach: all
3
4         .include "testutils.inc"
5
6         start
7
8         .global cmmulhs
9 cmmulhs:
10         set_spr_immed   0x1b1b,cccr
11
12         ; Positive operands
13         set_fr_iimmed   2,3,fr7         ; multiply small numbers
14         set_fr_iimmed   3,2,fr8
15         cmmulhs         fr7,fr8,acc0,cc0,1
16         test_accg_immed         0,accg0
17         test_acc_immed  6,acc0
18         test_accg_immed         0,accg1
19         test_acc_immed  6,acc1
20
21         set_fr_iimmed   0,1,fr7         ; multiply by 0
22         set_fr_iimmed   2,0,fr8
23         cmmulhs         fr7,fr8,acc0,cc0,1
24         test_accg_immed         0,accg0
25         test_acc_immed  0,acc0
26         test_accg_immed         0,accg1
27         test_acc_immed  0,acc1
28
29         set_fr_iimmed   2,1,fr7         ; multiply by 1
30         set_fr_iimmed   1,2,fr8
31         cmmulhs         fr7,fr8,acc0,cc0,1
32         test_accg_immed         0,accg0
33         test_acc_immed  2,acc0
34         test_accg_immed         0,accg1
35         test_acc_immed  2,acc1
36
37         set_fr_iimmed   0x3fff,2,fr7    ; 15 bit result
38         set_fr_iimmed   2,0x3fff,fr8
39         cmmulhs         fr7,fr8,acc0,cc0,1
40         test_accg_immed         0,accg0
41         test_acc_limmed 0,0x7ffe,acc0
42         test_accg_immed         0,accg1
43         test_acc_limmed 0,0x7ffe,acc1
44
45         set_fr_iimmed   0x4000,2,fr7    ; 16 bit result
46         set_fr_iimmed   2,0x4000,fr8
47         cmmulhs         fr7,fr8,acc0,cc0,1
48         test_accg_immed         0,accg0
49         test_acc_limmed 0x0000,0x8000,acc0
50         test_accg_immed         0,accg1
51         test_acc_limmed 0x0000,0x8000,acc1
52
53         set_fr_iimmed   0x7fff,0x7fff,fr7       ; max positive result
54         set_fr_iimmed   0x7fff,0x7fff,fr8
55         cmmulhs         fr7,fr8,acc0,cc0,1
56         test_accg_immed         0,accg0
57         test_acc_limmed 0x3fff,0x0001,acc0
58         test_accg_immed         0,accg1
59         test_acc_limmed 0x3fff,0x0001,acc1
60
61         ; Mixed operands
62         set_fr_iimmed   2,0xfffd,fr7            ; multiply small numbers
63         set_fr_iimmed   0xfffd,2,fr8
64         cmmulhs         fr7,fr8,acc0,cc0,1
65         test_accg_immed         0xff,accg0
66         test_acc_immed  -6,acc0
67         test_accg_immed         0xff,accg1
68         test_acc_immed  -6,acc1
69
70         set_fr_iimmed   0xfffe,1,fr7            ; multiply by 1
71         set_fr_iimmed   1,0xfffe,fr8
72         cmmulhs         fr7,fr8,acc0,cc0,1
73         test_accg_immed         0xff,accg0
74         test_acc_immed  -2,acc0
75         test_accg_immed         0xff,accg1
76         test_acc_immed  -2,acc1
77
78         set_fr_iimmed   0xfffe,0,fr7            ; multiply by 0
79         set_fr_iimmed   0,0xfffe,fr8
80         cmmulhs         fr7,fr8,acc0,cc4,1
81         test_accg_immed         0,accg0
82         test_acc_immed  0,acc0
83         test_accg_immed         0,accg1
84         test_acc_immed  0,acc1
85
86         set_fr_iimmed   0x2001,0xfffe,fr7       ; 15 bit result
87         set_fr_iimmed   0xfffe,0x2001,fr8
88         cmmulhs         fr7,fr8,acc0,cc4,1
89         test_accg_immed         0xff,accg0
90         test_acc_limmed 0xffff,0xbffe,acc0
91         test_accg_immed         0xff,accg1
92         test_acc_limmed 0xffff,0xbffe,acc1
93
94         set_fr_iimmed   0x4000,0xfffe,fr7       ; 16 bit result
95         set_fr_iimmed   0xfffe,0x4000,fr8
96         cmmulhs         fr7,fr8,acc0,cc4,1
97         test_accg_immed         0xff,accg0
98         test_acc_limmed 0xffff,0x8000,acc0
99         test_accg_immed         0xff,accg1
100         test_acc_limmed 0xffff,0x8000,acc1
101
102         set_fr_iimmed   0x7fff,0x8000,fr7       ; max negative result
103         set_fr_iimmed   0x8000,0x7fff,fr8
104         cmmulhs         fr7,fr8,acc0,cc4,1
105         test_accg_immed         0xff,accg0
106         test_acc_limmed 0xc000,0x8000,acc0
107         test_accg_immed         0xff,accg1
108         test_acc_limmed 0xc000,0x8000,acc1
109
110         ; Negative operands
111         set_fr_iimmed   0xfffe,0xfffd,fr7               ; multiply small numbers
112         set_fr_iimmed   0xfffd,0xfffe,fr8
113         cmmulhs         fr7,fr8,acc0,cc4,1
114         test_accg_immed         0,accg0
115         test_acc_immed  6,acc0
116         test_accg_immed         0,accg1
117         test_acc_immed  6,acc1
118
119         set_fr_iimmed   0xffff,0xfffe,fr7               ; multiply by -1
120         set_fr_iimmed   0xfffe,0xffff,fr8
121         cmmulhs         fr7,fr8,acc0,cc4,1
122         test_accg_immed         0,accg0
123         test_acc_immed  2,acc0
124         test_accg_immed         0,accg1
125         test_acc_immed  2,acc1
126
127         set_fr_iimmed   0x8001,0x8001,fr7       ; almost max positive result
128         set_fr_iimmed   0x8001,0x8001,fr8
129         cmmulhs         fr7,fr8,acc0,cc4,1
130         test_accg_immed         0,accg0
131         test_acc_immed  0x3fff0001,acc0
132         test_accg_immed         0,accg1
133         test_acc_immed  0x3fff0001,acc1
134
135         set_fr_iimmed   0x8000,0x8000,fr7       ; max positive result
136         set_fr_iimmed   0x8000,0x8000,fr8
137         cmmulhs         fr7,fr8,acc0,cc4,1
138         test_accg_immed         0,accg0
139         test_acc_immed  0x40000000,acc0
140         test_accg_immed         0,accg1
141         test_acc_immed  0x40000000,acc1
142
143         ; Positive operands
144         set_fr_iimmed   2,3,fr7         ; multiply small numbers
145         set_fr_iimmed   3,2,fr8
146         cmmulhs         fr7,fr8,acc0,cc1,0
147         test_accg_immed         0,accg0
148         test_acc_immed  6,acc0
149         test_accg_immed         0,accg1
150         test_acc_immed  6,acc1
151
152         set_fr_iimmed   0,1,fr7         ; multiply by 0
153         set_fr_iimmed   2,0,fr8
154         cmmulhs         fr7,fr8,acc0,cc1,0
155         test_accg_immed         0,accg0
156         test_acc_immed  0,acc0
157         test_accg_immed         0,accg1
158         test_acc_immed  0,acc1
159
160         set_fr_iimmed   2,1,fr7         ; multiply by 1
161         set_fr_iimmed   1,2,fr8
162         cmmulhs         fr7,fr8,acc0,cc1,0
163         test_accg_immed         0,accg0
164         test_acc_immed  2,acc0
165         test_accg_immed         0,accg1
166         test_acc_immed  2,acc1
167
168         set_fr_iimmed   0x3fff,2,fr7    ; 15 bit result
169         set_fr_iimmed   2,0x3fff,fr8
170         cmmulhs         fr7,fr8,acc0,cc1,0
171         test_accg_immed         0,accg0
172         test_acc_limmed 0,0x7ffe,acc0
173         test_accg_immed         0,accg1
174         test_acc_limmed 0,0x7ffe,acc1
175
176         set_fr_iimmed   0x4000,2,fr7    ; 16 bit result
177         set_fr_iimmed   2,0x4000,fr8
178         cmmulhs         fr7,fr8,acc0,cc1,0
179         test_accg_immed         0,accg0
180         test_acc_limmed 0x0000,0x8000,acc0
181         test_accg_immed         0,accg1
182         test_acc_limmed 0x0000,0x8000,acc1
183
184         set_fr_iimmed   0x7fff,0x7fff,fr7       ; max positive result
185         set_fr_iimmed   0x7fff,0x7fff,fr8
186         cmmulhs         fr7,fr8,acc0,cc1,0
187         test_accg_immed         0,accg0
188         test_acc_limmed 0x3fff,0x0001,acc0
189         test_accg_immed         0,accg1
190         test_acc_limmed 0x3fff,0x0001,acc1
191
192         ; Mixed operands
193         set_fr_iimmed   2,0xfffd,fr7            ; multiply small numbers
194         set_fr_iimmed   0xfffd,2,fr8
195         cmmulhs         fr7,fr8,acc0,cc1,0
196         test_accg_immed         0xff,accg0
197         test_acc_immed  -6,acc0
198         test_accg_immed         0xff,accg1
199         test_acc_immed  -6,acc1
200
201         set_fr_iimmed   0xfffe,1,fr7            ; multiply by 1
202         set_fr_iimmed   1,0xfffe,fr8
203         cmmulhs         fr7,fr8,acc0,cc1,0
204         test_accg_immed         0xff,accg0
205         test_acc_immed  -2,acc0
206         test_accg_immed         0xff,accg1
207         test_acc_immed  -2,acc1
208
209         set_fr_iimmed   0xfffe,0,fr7            ; multiply by 0
210         set_fr_iimmed   0,0xfffe,fr8
211         cmmulhs         fr7,fr8,acc0,cc5,0
212         test_accg_immed         0,accg0
213         test_acc_immed  0,acc0
214         test_accg_immed         0,accg1
215         test_acc_immed  0,acc1
216
217         set_fr_iimmed   0x2001,0xfffe,fr7       ; 15 bit result
218         set_fr_iimmed   0xfffe,0x2001,fr8
219         cmmulhs         fr7,fr8,acc0,cc5,0
220         test_accg_immed         0xff,accg0
221         test_acc_limmed 0xffff,0xbffe,acc0
222         test_accg_immed         0xff,accg1
223         test_acc_limmed 0xffff,0xbffe,acc1
224
225         set_fr_iimmed   0x4000,0xfffe,fr7       ; 16 bit result
226         set_fr_iimmed   0xfffe,0x4000,fr8
227         cmmulhs         fr7,fr8,acc0,cc5,0
228         test_accg_immed         0xff,accg0
229         test_acc_limmed 0xffff,0x8000,acc0
230         test_accg_immed         0xff,accg1
231         test_acc_limmed 0xffff,0x8000,acc1
232
233         set_fr_iimmed   0x7fff,0x8000,fr7       ; max negative result
234         set_fr_iimmed   0x8000,0x7fff,fr8
235         cmmulhs         fr7,fr8,acc0,cc5,0
236         test_accg_immed         0xff,accg0
237         test_acc_limmed 0xc000,0x8000,acc0
238         test_accg_immed         0xff,accg1
239         test_acc_limmed 0xc000,0x8000,acc1
240
241         ; Negative operands
242         set_fr_iimmed   0xfffe,0xfffd,fr7               ; multiply small numbers
243         set_fr_iimmed   0xfffd,0xfffe,fr8
244         cmmulhs         fr7,fr8,acc0,cc5,0
245         test_accg_immed         0,accg0
246         test_acc_immed  6,acc0
247         test_accg_immed         0,accg1
248         test_acc_immed  6,acc1
249
250         set_fr_iimmed   0xffff,0xfffe,fr7               ; multiply by -1
251         set_fr_iimmed   0xfffe,0xffff,fr8
252         cmmulhs         fr7,fr8,acc0,cc5,0
253         test_accg_immed         0,accg0
254         test_acc_immed  2,acc0
255         test_accg_immed         0,accg1
256         test_acc_immed  2,acc1
257
258         set_fr_iimmed   0x8001,0x8001,fr7       ; almost max positive result
259         set_fr_iimmed   0x8001,0x8001,fr8
260         cmmulhs         fr7,fr8,acc0,cc5,0
261         test_accg_immed         0,accg0
262         test_acc_immed  0x3fff0001,acc0
263         test_accg_immed         0,accg1
264         test_acc_immed  0x3fff0001,acc1
265
266         set_fr_iimmed   0x8000,0x8000,fr7       ; max positive result
267         set_fr_iimmed   0x8000,0x8000,fr8
268         cmmulhs         fr7,fr8,acc0,cc5,0
269         test_accg_immed         0,accg0
270         test_acc_immed  0x40000000,acc0
271         test_accg_immed         0,accg1
272         test_acc_immed  0x40000000,acc1
273
274         ; Positive operands
275         set_accg_immed  0x00000011,accg0
276         set_acc_immed   0x11111111,acc0
277         set_accg_immed  0x00000022,accg1
278         set_acc_immed   0x22222222,acc1
279         set_fr_iimmed   2,3,fr7         ; multiply small numbers
280         set_fr_iimmed   3,2,fr8
281         cmmulhs         fr7,fr8,acc0,cc0,0
282         test_accg_immed         0x00000011,accg0
283         test_acc_immed  0x11111111,acc0
284         test_accg_immed         0x00000022,accg1
285         test_acc_immed  0x22222222,acc1
286
287         set_fr_iimmed   0,1,fr7         ; multiply by 0
288         set_fr_iimmed   2,0,fr8
289         cmmulhs         fr7,fr8,acc0,cc0,0
290         test_accg_immed         0x00000011,accg0
291         test_acc_immed  0x11111111,acc0
292         test_accg_immed         0x00000022,accg1
293         test_acc_immed  0x22222222,acc1
294
295         set_fr_iimmed   2,1,fr7         ; multiply by 1
296         set_fr_iimmed   1,2,fr8
297         cmmulhs         fr7,fr8,acc0,cc0,0
298         test_accg_immed         0x00000011,accg0
299         test_acc_immed  0x11111111,acc0
300         test_accg_immed         0x00000022,accg1
301         test_acc_immed  0x22222222,acc1
302
303         set_fr_iimmed   0x3fff,2,fr7    ; 15 bit result
304         set_fr_iimmed   2,0x3fff,fr8
305         cmmulhs         fr7,fr8,acc0,cc0,0
306         test_accg_immed         0x00000011,accg0
307         test_acc_immed  0x11111111,acc0
308         test_accg_immed         0x00000022,accg1
309         test_acc_immed  0x22222222,acc1
310
311         set_fr_iimmed   0x4000,2,fr7    ; 16 bit result
312         set_fr_iimmed   2,0x4000,fr8
313         cmmulhs         fr7,fr8,acc0,cc0,0
314         test_accg_immed         0x00000011,accg0
315         test_acc_immed  0x11111111,acc0
316         test_accg_immed         0x00000022,accg1
317         test_acc_immed  0x22222222,acc1
318
319         set_fr_iimmed   0x7fff,0x7fff,fr7       ; max positive result
320         set_fr_iimmed   0x7fff,0x7fff,fr8
321         cmmulhs         fr7,fr8,acc0,cc0,0
322         test_accg_immed         0x00000011,accg0
323         test_acc_immed  0x11111111,acc0
324         test_accg_immed         0x00000022,accg1
325         test_acc_immed  0x22222222,acc1
326
327         ; Mixed operands
328         set_fr_iimmed   2,0xfffd,fr7            ; multiply small numbers
329         set_fr_iimmed   0xfffd,2,fr8
330         cmmulhs         fr7,fr8,acc0,cc0,0
331         test_accg_immed         0x00000011,accg0
332         test_acc_immed  0x11111111,acc0
333         test_accg_immed         0x00000022,accg1
334         test_acc_immed  0x22222222,acc1
335
336         set_fr_iimmed   0xfffe,1,fr7            ; multiply by 1
337         set_fr_iimmed   1,0xfffe,fr8
338         cmmulhs         fr7,fr8,acc0,cc0,0
339         test_accg_immed         0x00000011,accg0
340         test_acc_immed  0x11111111,acc0
341         test_accg_immed         0x00000022,accg1
342         test_acc_immed  0x22222222,acc1
343
344         set_fr_iimmed   0xfffe,0,fr7            ; multiply by 0
345         set_fr_iimmed   0,0xfffe,fr8
346         cmmulhs         fr7,fr8,acc0,cc4,0
347         test_accg_immed         0x00000011,accg0
348         test_acc_immed  0x11111111,acc0
349         test_accg_immed         0x00000022,accg1
350         test_acc_immed  0x22222222,acc1
351
352         set_fr_iimmed   0x2001,0xfffe,fr7       ; 15 bit result
353         set_fr_iimmed   0xfffe,0x2001,fr8
354         cmmulhs         fr7,fr8,acc0,cc4,0
355         test_accg_immed         0x00000011,accg0
356         test_acc_immed  0x11111111,acc0
357         test_accg_immed         0x00000022,accg1
358         test_acc_immed  0x22222222,acc1
359
360         set_fr_iimmed   0x4000,0xfffe,fr7       ; 16 bit result
361         set_fr_iimmed   0xfffe,0x4000,fr8
362         cmmulhs         fr7,fr8,acc0,cc4,0
363         test_accg_immed         0x00000011,accg0
364         test_acc_immed  0x11111111,acc0
365         test_accg_immed         0x00000022,accg1
366         test_acc_immed  0x22222222,acc1
367
368         set_fr_iimmed   0x7fff,0x8000,fr7       ; max negative result
369         set_fr_iimmed   0x8000,0x7fff,fr8
370         cmmulhs         fr7,fr8,acc0,cc4,0
371         test_accg_immed         0x00000011,accg0
372         test_acc_immed  0x11111111,acc0
373         test_accg_immed         0x00000022,accg1
374         test_acc_immed  0x22222222,acc1
375
376         ; Negative operands
377         set_fr_iimmed   0xfffe,0xfffd,fr7               ; multiply small numbers
378         set_fr_iimmed   0xfffd,0xfffe,fr8
379         cmmulhs         fr7,fr8,acc0,cc4,0
380         test_accg_immed         0x00000011,accg0
381         test_acc_immed  0x11111111,acc0
382         test_accg_immed         0x00000022,accg1
383         test_acc_immed  0x22222222,acc1
384
385         set_fr_iimmed   0xffff,0xfffe,fr7               ; multiply by -1
386         set_fr_iimmed   0xfffe,0xffff,fr8
387         cmmulhs         fr7,fr8,acc0,cc4,0
388         test_accg_immed         0x00000011,accg0
389         test_acc_immed  0x11111111,acc0
390         test_accg_immed         0x00000022,accg1
391         test_acc_immed  0x22222222,acc1
392
393         set_fr_iimmed   0x8001,0x8001,fr7       ; almost max positive result
394         set_fr_iimmed   0x8001,0x8001,fr8
395         cmmulhs         fr7,fr8,acc0,cc4,0
396         test_accg_immed         0x00000011,accg0
397         test_acc_immed  0x11111111,acc0
398         test_accg_immed         0x00000022,accg1
399         test_acc_immed  0x22222222,acc1
400
401         set_fr_iimmed   0x8000,0x8000,fr7       ; max positive result
402         set_fr_iimmed   0x8000,0x8000,fr8
403         cmmulhs         fr7,fr8,acc0,cc4,0
404         test_accg_immed         0x00000011,accg0
405         test_acc_immed  0x11111111,acc0
406         test_accg_immed         0x00000022,accg1
407         test_acc_immed  0x22222222,acc1
408
409         ; Positive operands
410         set_accg_immed  0x00000011,accg0
411         set_acc_immed   0x11111111,acc0
412         set_accg_immed  0x00000022,accg1
413         set_acc_immed   0x22222222,acc1
414         set_fr_iimmed   2,3,fr7         ; multiply small numbers
415         set_fr_iimmed   3,2,fr8
416         cmmulhs         fr7,fr8,acc0,cc1,1
417         test_accg_immed         0x00000011,accg0
418         test_acc_immed  0x11111111,acc0
419         test_accg_immed         0x00000022,accg1
420         test_acc_immed  0x22222222,acc1
421
422         set_fr_iimmed   0,1,fr7         ; multiply by 0
423         set_fr_iimmed   2,0,fr8
424         cmmulhs         fr7,fr8,acc0,cc1,1
425         test_accg_immed         0x00000011,accg0
426         test_acc_immed  0x11111111,acc0
427         test_accg_immed         0x00000022,accg1
428         test_acc_immed  0x22222222,acc1
429
430         set_fr_iimmed   2,1,fr7         ; multiply by 1
431         set_fr_iimmed   1,2,fr8
432         cmmulhs         fr7,fr8,acc0,cc1,1
433         test_accg_immed         0x00000011,accg0
434         test_acc_immed  0x11111111,acc0
435         test_accg_immed         0x00000022,accg1
436         test_acc_immed  0x22222222,acc1
437
438         set_fr_iimmed   0x3fff,2,fr7    ; 15 bit result
439         set_fr_iimmed   2,0x3fff,fr8
440         cmmulhs         fr7,fr8,acc0,cc1,1
441         test_accg_immed         0x00000011,accg0
442         test_acc_immed  0x11111111,acc0
443         test_accg_immed         0x00000022,accg1
444         test_acc_immed  0x22222222,acc1
445
446         set_fr_iimmed   0x4000,2,fr7    ; 16 bit result
447         set_fr_iimmed   2,0x4000,fr8
448         cmmulhs         fr7,fr8,acc0,cc1,1
449         test_accg_immed         0x00000011,accg0
450         test_acc_immed  0x11111111,acc0
451         test_accg_immed         0x00000022,accg1
452         test_acc_immed  0x22222222,acc1
453
454         set_fr_iimmed   0x7fff,0x7fff,fr7       ; max positive result
455         set_fr_iimmed   0x7fff,0x7fff,fr8
456         cmmulhs         fr7,fr8,acc0,cc1,1
457         test_accg_immed         0x00000011,accg0
458         test_acc_immed  0x11111111,acc0
459         test_accg_immed         0x00000022,accg1
460         test_acc_immed  0x22222222,acc1
461
462         ; Mixed operands
463         set_fr_iimmed   2,0xfffd,fr7            ; multiply small numbers
464         set_fr_iimmed   0xfffd,2,fr8
465         cmmulhs         fr7,fr8,acc0,cc1,1
466         test_accg_immed         0x00000011,accg0
467         test_acc_immed  0x11111111,acc0
468         test_accg_immed         0x00000022,accg1
469         test_acc_immed  0x22222222,acc1
470
471         set_fr_iimmed   0xfffe,1,fr7            ; multiply by 1
472         set_fr_iimmed   1,0xfffe,fr8
473         cmmulhs         fr7,fr8,acc0,cc1,1
474         test_accg_immed         0x00000011,accg0
475         test_acc_immed  0x11111111,acc0
476         test_accg_immed         0x00000022,accg1
477         test_acc_immed  0x22222222,acc1
478
479         set_fr_iimmed   0xfffe,0,fr7            ; multiply by 0
480         set_fr_iimmed   0,0xfffe,fr8
481         cmmulhs         fr7,fr8,acc0,cc5,1
482         test_accg_immed         0x00000011,accg0
483         test_acc_immed  0x11111111,acc0
484         test_accg_immed         0x00000022,accg1
485         test_acc_immed  0x22222222,acc1
486
487         set_fr_iimmed   0x2001,0xfffe,fr7       ; 15 bit result
488         set_fr_iimmed   0xfffe,0x2001,fr8
489         cmmulhs         fr7,fr8,acc0,cc5,1
490         test_accg_immed         0x00000011,accg0
491         test_acc_immed  0x11111111,acc0
492         test_accg_immed         0x00000022,accg1
493         test_acc_immed  0x22222222,acc1
494
495         set_fr_iimmed   0x4000,0xfffe,fr7       ; 16 bit result
496         set_fr_iimmed   0xfffe,0x4000,fr8
497         cmmulhs         fr7,fr8,acc0,cc5,1
498         test_accg_immed         0x00000011,accg0
499         test_acc_immed  0x11111111,acc0
500         test_accg_immed         0x00000022,accg1
501         test_acc_immed  0x22222222,acc1
502
503         set_fr_iimmed   0x7fff,0x8000,fr7       ; max negative result
504         set_fr_iimmed   0x8000,0x7fff,fr8
505         cmmulhs         fr7,fr8,acc0,cc5,1
506         test_accg_immed         0x00000011,accg0
507         test_acc_immed  0x11111111,acc0
508         test_accg_immed         0x00000022,accg1
509         test_acc_immed  0x22222222,acc1
510
511         ; Negative operands
512         set_fr_iimmed   0xfffe,0xfffd,fr7               ; multiply small numbers
513         set_fr_iimmed   0xfffd,0xfffe,fr8
514         cmmulhs         fr7,fr8,acc0,cc5,1
515         test_accg_immed         0x00000011,accg0
516         test_acc_immed  0x11111111,acc0
517         test_accg_immed         0x00000022,accg1
518         test_acc_immed  0x22222222,acc1
519
520         set_fr_iimmed   0xffff,0xfffe,fr7               ; multiply by -1
521         set_fr_iimmed   0xfffe,0xffff,fr8
522         cmmulhs         fr7,fr8,acc0,cc5,1
523         test_accg_immed         0x00000011,accg0
524         test_acc_immed  0x11111111,acc0
525         test_accg_immed         0x00000022,accg1
526         test_acc_immed  0x22222222,acc1
527
528         set_fr_iimmed   0x8001,0x8001,fr7       ; almost max positive result
529         set_fr_iimmed   0x8001,0x8001,fr8
530         cmmulhs         fr7,fr8,acc0,cc5,1
531         test_accg_immed         0x00000011,accg0
532         test_acc_immed  0x11111111,acc0
533         test_accg_immed         0x00000022,accg1
534         test_acc_immed  0x22222222,acc1
535
536         set_fr_iimmed   0x8000,0x8000,fr7       ; max positive result
537         set_fr_iimmed   0x8000,0x8000,fr8
538         cmmulhs         fr7,fr8,acc0,cc5,1
539         test_accg_immed         0x00000011,accg0
540         test_acc_immed  0x11111111,acc0
541         test_accg_immed         0x00000022,accg1
542         test_acc_immed  0x22222222,acc1
543
544         ; Positive operands
545         set_accg_immed  0x00000011,accg0
546         set_acc_immed   0x11111111,acc0
547         set_accg_immed  0x00000022,accg1
548         set_acc_immed   0x22222222,acc1
549         set_fr_iimmed   2,3,fr7         ; multiply small numbers
550         set_fr_iimmed   3,2,fr8
551         cmmulhs         fr7,fr8,acc0,cc2,1
552         test_accg_immed         0x00000011,accg0
553         test_acc_immed  0x11111111,acc0
554         test_accg_immed         0x00000022,accg1
555         test_acc_immed  0x22222222,acc1
556
557         set_fr_iimmed   0,1,fr7         ; multiply by 0
558         set_fr_iimmed   2,0,fr8
559         cmmulhs         fr7,fr8,acc0,cc2,0
560         test_accg_immed         0x00000011,accg0
561         test_acc_immed  0x11111111,acc0
562         test_accg_immed         0x00000022,accg1
563         test_acc_immed  0x22222222,acc1
564
565         set_fr_iimmed   2,1,fr7         ; multiply by 1
566         set_fr_iimmed   1,2,fr8
567         cmmulhs         fr7,fr8,acc0,cc2,1
568         test_accg_immed         0x00000011,accg0
569         test_acc_immed  0x11111111,acc0
570         test_accg_immed         0x00000022,accg1
571         test_acc_immed  0x22222222,acc1
572
573         set_fr_iimmed   0x3fff,2,fr7    ; 15 bit result
574         set_fr_iimmed   2,0x3fff,fr8
575         cmmulhs         fr7,fr8,acc0,cc2,0
576         test_accg_immed         0x00000011,accg0
577         test_acc_immed  0x11111111,acc0
578         test_accg_immed         0x00000022,accg1
579         test_acc_immed  0x22222222,acc1
580
581         set_fr_iimmed   0x4000,2,fr7    ; 16 bit result
582         set_fr_iimmed   2,0x4000,fr8
583         cmmulhs         fr7,fr8,acc0,cc2,1
584         test_accg_immed         0x00000011,accg0
585         test_acc_immed  0x11111111,acc0
586         test_accg_immed         0x00000022,accg1
587         test_acc_immed  0x22222222,acc1
588
589         set_fr_iimmed   0x7fff,0x7fff,fr7       ; max positive result
590         set_fr_iimmed   0x7fff,0x7fff,fr8
591         cmmulhs         fr7,fr8,acc0,cc2,0
592         test_accg_immed         0x00000011,accg0
593         test_acc_immed  0x11111111,acc0
594         test_accg_immed         0x00000022,accg1
595         test_acc_immed  0x22222222,acc1
596
597         ; Mixed operands
598         set_fr_iimmed   2,0xfffd,fr7            ; multiply small numbers
599         set_fr_iimmed   0xfffd,2,fr8
600         cmmulhs         fr7,fr8,acc0,cc2,1
601         test_accg_immed         0x00000011,accg0
602         test_acc_immed  0x11111111,acc0
603         test_accg_immed         0x00000022,accg1
604         test_acc_immed  0x22222222,acc1
605
606         set_fr_iimmed   0xfffe,1,fr7            ; multiply by 1
607         set_fr_iimmed   1,0xfffe,fr8
608         cmmulhs         fr7,fr8,acc0,cc2,0
609         test_accg_immed         0x00000011,accg0
610         test_acc_immed  0x11111111,acc0
611         test_accg_immed         0x00000022,accg1
612         test_acc_immed  0x22222222,acc1
613
614         set_fr_iimmed   0xfffe,0,fr7            ; multiply by 0
615         set_fr_iimmed   0,0xfffe,fr8
616         cmmulhs         fr7,fr8,acc0,cc6,1
617         test_accg_immed         0x00000011,accg0
618         test_acc_immed  0x11111111,acc0
619         test_accg_immed         0x00000022,accg1
620         test_acc_immed  0x22222222,acc1
621
622         set_fr_iimmed   0x2001,0xfffe,fr7       ; 15 bit result
623         set_fr_iimmed   0xfffe,0x2001,fr8
624         cmmulhs         fr7,fr8,acc0,cc6,0
625         test_accg_immed         0x00000011,accg0
626         test_acc_immed  0x11111111,acc0
627         test_accg_immed         0x00000022,accg1
628         test_acc_immed  0x22222222,acc1
629
630         set_fr_iimmed   0x4000,0xfffe,fr7       ; 16 bit result
631         set_fr_iimmed   0xfffe,0x4000,fr8
632         cmmulhs         fr7,fr8,acc0,cc6,1
633         test_accg_immed         0x00000011,accg0
634         test_acc_immed  0x11111111,acc0
635         test_accg_immed         0x00000022,accg1
636         test_acc_immed  0x22222222,acc1
637
638         set_fr_iimmed   0x7fff,0x8000,fr7       ; max negative result
639         set_fr_iimmed   0x8000,0x7fff,fr8
640         cmmulhs         fr7,fr8,acc0,cc6,0
641         test_accg_immed         0x00000011,accg0
642         test_acc_immed  0x11111111,acc0
643         test_accg_immed         0x00000022,accg1
644         test_acc_immed  0x22222222,acc1
645
646         ; Negative operands
647         set_fr_iimmed   0xfffe,0xfffd,fr7               ; multiply small numbers
648         set_fr_iimmed   0xfffd,0xfffe,fr8
649         cmmulhs         fr7,fr8,acc0,cc6,1
650         test_accg_immed         0x00000011,accg0
651         test_acc_immed  0x11111111,acc0
652         test_accg_immed         0x00000022,accg1
653         test_acc_immed  0x22222222,acc1
654
655         set_fr_iimmed   0xffff,0xfffe,fr7               ; multiply by -1
656         set_fr_iimmed   0xfffe,0xffff,fr8
657         cmmulhs         fr7,fr8,acc0,cc6,0
658         test_accg_immed         0x00000011,accg0
659         test_acc_immed  0x11111111,acc0
660         test_accg_immed         0x00000022,accg1
661         test_acc_immed  0x22222222,acc1
662
663         set_fr_iimmed   0x8001,0x8001,fr7       ; almost max positive result
664         set_fr_iimmed   0x8001,0x8001,fr8
665         cmmulhs         fr7,fr8,acc0,cc6,0
666         test_accg_immed         0x00000011,accg0
667         test_acc_immed  0x11111111,acc0
668         test_accg_immed         0x00000022,accg1
669         test_acc_immed  0x22222222,acc1
670
671         set_fr_iimmed   0x8000,0x8000,fr7       ; max positive result
672         set_fr_iimmed   0x8000,0x8000,fr8
673         cmmulhs         fr7,fr8,acc0,cc6,0
674         test_accg_immed         0x00000011,accg0
675         test_acc_immed  0x11111111,acc0
676         test_accg_immed         0x00000022,accg1
677         test_acc_immed  0x22222222,acc1
678
679         ; Positive operands
680         set_accg_immed  0x00000011,accg0
681         set_acc_immed   0x11111111,acc0
682         set_accg_immed  0x00000022,accg1
683         set_acc_immed   0x22222222,acc1
684         set_fr_iimmed   2,3,fr7         ; multiply small numbers
685         set_fr_iimmed   3,2,fr8
686         cmmulhs         fr7,fr8,acc0,cc3,1
687         test_accg_immed         0x00000011,accg0
688         test_acc_immed  0x11111111,acc0
689         test_accg_immed         0x00000022,accg1
690         test_acc_immed  0x22222222,acc1
691
692         set_fr_iimmed   0,1,fr7         ; multiply by 0
693         set_fr_iimmed   2,0,fr8
694         cmmulhs         fr7,fr8,acc0,cc3,0
695         test_accg_immed         0x00000011,accg0
696         test_acc_immed  0x11111111,acc0
697         test_accg_immed         0x00000022,accg1
698         test_acc_immed  0x22222222,acc1
699
700         set_fr_iimmed   2,1,fr7         ; multiply by 1
701         set_fr_iimmed   1,2,fr8
702         cmmulhs         fr7,fr8,acc0,cc3,1
703         test_accg_immed         0x00000011,accg0
704         test_acc_immed  0x11111111,acc0
705         test_accg_immed         0x00000022,accg1
706         test_acc_immed  0x22222222,acc1
707
708         set_fr_iimmed   0x3fff,2,fr7    ; 15 bit result
709         set_fr_iimmed   2,0x3fff,fr8
710         cmmulhs         fr7,fr8,acc0,cc3,0
711         test_accg_immed         0x00000011,accg0
712         test_acc_immed  0x11111111,acc0
713         test_accg_immed         0x00000022,accg1
714         test_acc_immed  0x22222222,acc1
715
716         set_fr_iimmed   0x4000,2,fr7    ; 16 bit result
717         set_fr_iimmed   2,0x4000,fr8
718         cmmulhs         fr7,fr8,acc0,cc3,1
719         test_accg_immed         0x00000011,accg0
720         test_acc_immed  0x11111111,acc0
721         test_accg_immed         0x00000022,accg1
722         test_acc_immed  0x22222222,acc1
723
724         set_fr_iimmed   0x7fff,0x7fff,fr7       ; max positive result
725         set_fr_iimmed   0x7fff,0x7fff,fr8
726         cmmulhs         fr7,fr8,acc0,cc3,0
727         test_accg_immed         0x00000011,accg0
728         test_acc_immed  0x11111111,acc0
729         test_accg_immed         0x00000022,accg1
730         test_acc_immed  0x22222222,acc1
731
732         ; Mixed operands
733         set_fr_iimmed   2,0xfffd,fr7            ; multiply small numbers
734         set_fr_iimmed   0xfffd,2,fr8
735         cmmulhs         fr7,fr8,acc0,cc3,1
736         test_accg_immed         0x00000011,accg0
737         test_acc_immed  0x11111111,acc0
738         test_accg_immed         0x00000022,accg1
739         test_acc_immed  0x22222222,acc1
740
741         set_fr_iimmed   0xfffe,1,fr7            ; multiply by 1
742         set_fr_iimmed   1,0xfffe,fr8
743         cmmulhs         fr7,fr8,acc0,cc3,0
744         test_accg_immed         0x00000011,accg0
745         test_acc_immed  0x11111111,acc0
746         test_accg_immed         0x00000022,accg1
747         test_acc_immed  0x22222222,acc1
748
749         set_fr_iimmed   0xfffe,0,fr7            ; multiply by 0
750         set_fr_iimmed   0,0xfffe,fr8
751         cmmulhs         fr7,fr8,acc0,cc7,1
752         test_accg_immed         0x00000011,accg0
753         test_acc_immed  0x11111111,acc0
754         test_accg_immed         0x00000022,accg1
755         test_acc_immed  0x22222222,acc1
756
757         set_fr_iimmed   0x2001,0xfffe,fr7       ; 15 bit result
758         set_fr_iimmed   0xfffe,0x2001,fr8
759         cmmulhs         fr7,fr8,acc0,cc7,0
760         test_accg_immed         0x00000011,accg0
761         test_acc_immed  0x11111111,acc0
762         test_accg_immed         0x00000022,accg1
763         test_acc_immed  0x22222222,acc1
764
765         set_fr_iimmed   0x4000,0xfffe,fr7       ; 16 bit result
766         set_fr_iimmed   0xfffe,0x4000,fr8
767         cmmulhs         fr7,fr8,acc0,cc7,1
768         test_accg_immed         0x00000011,accg0
769         test_acc_immed  0x11111111,acc0
770         test_accg_immed         0x00000022,accg1
771         test_acc_immed  0x22222222,acc1
772
773         set_fr_iimmed   0x7fff,0x8000,fr7       ; max negative result
774         set_fr_iimmed   0x8000,0x7fff,fr8
775         cmmulhs         fr7,fr8,acc0,cc7,0
776         test_accg_immed         0x00000011,accg0
777         test_acc_immed  0x11111111,acc0
778         test_accg_immed         0x00000022,accg1
779         test_acc_immed  0x22222222,acc1
780
781         ; Negative operands
782         set_fr_iimmed   0xfffe,0xfffd,fr7               ; multiply small numbers
783         set_fr_iimmed   0xfffd,0xfffe,fr8
784         cmmulhs         fr7,fr8,acc0,cc7,1
785         test_accg_immed         0x00000011,accg0
786         test_acc_immed  0x11111111,acc0
787         test_accg_immed         0x00000022,accg1
788         test_acc_immed  0x22222222,acc1
789
790         set_fr_iimmed   0xffff,0xfffe,fr7               ; multiply by -1
791         set_fr_iimmed   0xfffe,0xffff,fr8
792         cmmulhs         fr7,fr8,acc0,cc7,0
793         test_accg_immed         0x00000011,accg0
794         test_acc_immed  0x11111111,acc0
795         test_accg_immed         0x00000022,accg1
796         test_acc_immed  0x22222222,acc1
797
798         set_fr_iimmed   0x8001,0x8001,fr7       ; almost max positive result
799         set_fr_iimmed   0x8001,0x8001,fr8
800         cmmulhs         fr7,fr8,acc0,cc7,0
801         test_accg_immed         0x00000011,accg0
802         test_acc_immed  0x11111111,acc0
803         test_accg_immed         0x00000022,accg1
804         test_acc_immed  0x22222222,acc1
805
806         set_fr_iimmed   0x8000,0x8000,fr7       ; max positive result
807         set_fr_iimmed   0x8000,0x8000,fr8
808         cmmulhs         fr7,fr8,acc0,cc7,0
809         test_accg_immed         0x00000011,accg0
810         test_acc_immed  0x11111111,acc0
811         test_accg_immed         0x00000022,accg1
812         test_acc_immed  0x22222222,acc1
813
814         pass