sim: testsuite: drop most specific istarget checks
[binutils-gdb.git] / sim / testsuite / frv / cmcpxrs.cgs
1 # frv testcase for cmcpxrs $GRi,$GRj,$ACCk,$CCi,$cond
2 # mach: all
3
4 .include "testutils.inc"
5
6 start
7
8 .global cmcpxrs
9 cmcpxrs:
10 set_spr_immed 0x1b1b,cccr
11
12 ; Positive operands
13 set_fr_iimmed 2,4,fr7 ; multiply small numbers
14 set_fr_iimmed 3,5,fr8
15 cmcpxrs fr7,fr8,acc0,cc0,1
16 test_accg_immed 0xff,accg0
17 test_acc_immed -14,acc0
18
19 set_fr_iimmed 3,1,fr7 ; multiply by 0
20 set_fr_iimmed 2,0,fr8
21 cmcpxrs fr7,fr8,acc0,cc0,1
22 test_accg_immed 0,accg0
23 test_acc_immed 6,acc0
24
25 set_fr_iimmed 2,1,fr7 ; multiply by 1
26 set_fr_iimmed 1,1,fr8
27 cmcpxrs fr7,fr8,acc0,cc0,1
28 test_accg_immed 0,accg0
29 test_acc_immed 1,acc0
30
31 set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
32 set_fr_iimmed 2,0x0007,fr8
33 cmcpxrs fr7,fr8,acc0,cc0,1
34 test_accg_immed 0,accg0
35 test_acc_limmed 0,0x7ff0,acc0
36
37 set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
38 set_fr_iimmed 2,0x2000,fr8
39 cmcpxrs fr7,fr8,acc0,cc0,1
40 test_accg_immed 0,accg0
41 test_acc_limmed 0x0000,0x4000,acc0
42
43 set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
44 set_fr_iimmed 0x7fff,0x7fff,fr8
45 cmcpxrs fr7,fr8,acc0,cc0,1
46 test_accg_immed 0,accg0
47 test_acc_limmed 0x3fff,0x0001,acc0
48
49 ; Mixed operands
50 set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
51 set_fr_iimmed 0xfffd,1,fr8
52 cmcpxrs fr7,fr8,acc0,cc0,1
53 test_accg_immed 0xff,accg0
54 test_acc_immed -3,acc0
55
56 set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
57 set_fr_iimmed 1,0xfffe,fr8
58 cmcpxrs fr7,fr8,acc0,cc4,1
59 test_accg_immed 0,accg0
60 test_acc_immed 2,acc0
61
62 set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
63 set_fr_iimmed 1,0xfffe,fr8
64 cmcpxrs fr7,fr8,acc0,cc4,1
65 test_accg_immed 0xff,accg0
66 test_acc_immed -2,acc0
67
68 set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
69 set_fr_iimmed 0xfffe,0xfff9,fr8
70 cmcpxrs fr7,fr8,acc0,cc4,1
71 test_accg_immed 0xff,accg0
72 test_acc_limmed 0xffff,0xbff0,acc0
73
74 set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
75 set_fr_iimmed 0xfffe,0x0003,fr8
76 cmcpxrs fr7,fr8,acc0,cc4,1
77 test_accg_immed 0xff,accg0
78 test_acc_limmed 0xffff,0x8006,acc0
79
80 set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
81 set_fr_iimmed 0x8000,0x8000,fr8
82 cmcpxrs fr7,fr8,acc0,cc4,1
83 test_accg_immed 0xff,accg0
84 test_acc_limmed 0x8000,0x8000,acc0
85
86 set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
87 set_fr_iimmed 0x8000,0x8000,fr8
88 cmcpxrs fr7,fr8,acc0,cc4,1
89 test_accg_immed 0,accg0
90 test_acc_limmed 0x7fff,0x8000,acc0
91
92 ; Negative operands
93 set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
94 set_fr_iimmed 0xfffd,0xfffb,fr8
95 cmcpxrs fr7,fr8,acc0,cc4,1
96 test_accg_immed 0xff,accg0
97 test_acc_immed -14,acc0
98
99 set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
100 set_fr_iimmed 0xfffe,0xffff,fr8
101 cmcpxrs fr7,fr8,acc0,cc4,1
102 test_accg_immed 0,accg0
103 test_acc_immed 1,acc0
104
105 set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
106 set_fr_iimmed 0x7fff,0x8001,fr8
107 cmcpxrs fr7,fr8,acc0,cc0,1
108 test_accg_immed 0,accg0
109 test_acc_immed 0x3fff0001,acc0
110
111 set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
112 set_fr_iimmed 0x8000,0x8000,fr8
113 cmcpxrs fr7,fr8,acc0,cc4,1
114 test_accg_immed 0,accg0
115 test_acc_immed 0x40000000,acc0
116
117 set_fr_iimmed 2,4,fr7 ; multiply small numbers
118 set_fr_iimmed 3,5,fr8
119 cmcpxrs fr7,fr8,acc0,cc1,0
120 test_accg_immed 0xff,accg0
121 test_acc_immed -14,acc0
122
123 set_fr_iimmed 3,1,fr7 ; multiply by 0
124 set_fr_iimmed 2,0,fr8
125 cmcpxrs fr7,fr8,acc0,cc1,0
126 test_accg_immed 0,accg0
127 test_acc_immed 6,acc0
128
129 set_fr_iimmed 2,1,fr7 ; multiply by 1
130 set_fr_iimmed 1,1,fr8
131 cmcpxrs fr7,fr8,acc0,cc1,0
132 test_accg_immed 0,accg0
133 test_acc_immed 1,acc0
134
135 set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
136 set_fr_iimmed 2,0x0007,fr8
137 cmcpxrs fr7,fr8,acc0,cc1,0
138 test_accg_immed 0,accg0
139 test_acc_limmed 0,0x7ff0,acc0
140
141 set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
142 set_fr_iimmed 2,0x2000,fr8
143 cmcpxrs fr7,fr8,acc0,cc1,0
144 test_accg_immed 0,accg0
145 test_acc_limmed 0x0000,0x4000,acc0
146
147 set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
148 set_fr_iimmed 0x7fff,0x7fff,fr8
149 cmcpxrs fr7,fr8,acc0,cc1,0
150 test_accg_immed 0,accg0
151 test_acc_limmed 0x3fff,0x0001,acc0
152
153 ; Mixed operands
154 set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
155 set_fr_iimmed 0xfffd,1,fr8
156 cmcpxrs fr7,fr8,acc0,cc1,0
157 test_accg_immed 0xff,accg0
158 test_acc_immed -3,acc0
159
160 set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
161 set_fr_iimmed 1,0xfffe,fr8
162 cmcpxrs fr7,fr8,acc0,cc5,0
163 test_accg_immed 0,accg0
164 test_acc_immed 2,acc0
165
166 set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
167 set_fr_iimmed 1,0xfffe,fr8
168 cmcpxrs fr7,fr8,acc0,cc5,0
169 test_accg_immed 0xff,accg0
170 test_acc_immed -2,acc0
171
172 set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
173 set_fr_iimmed 0xfffe,0xfff9,fr8
174 cmcpxrs fr7,fr8,acc0,cc5,0
175 test_accg_immed 0xff,accg0
176 test_acc_limmed 0xffff,0xbff0,acc0
177
178 set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
179 set_fr_iimmed 0xfffe,0x0003,fr8
180 cmcpxrs fr7,fr8,acc0,cc5,0
181 test_accg_immed 0xff,accg0
182 test_acc_limmed 0xffff,0x8006,acc0
183
184 set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
185 set_fr_iimmed 0x8000,0x8000,fr8
186 cmcpxrs fr7,fr8,acc0,cc5,0
187 test_accg_immed 0xff,accg0
188 test_acc_limmed 0x8000,0x8000,acc0
189
190 set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
191 set_fr_iimmed 0x8000,0x8000,fr8
192 cmcpxrs fr7,fr8,acc0,cc5,0
193 test_accg_immed 0,accg0
194 test_acc_limmed 0x7fff,0x8000,acc0
195
196 ; Negative operands
197 set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
198 set_fr_iimmed 0xfffd,0xfffb,fr8
199 cmcpxrs fr7,fr8,acc0,cc5,0
200 test_accg_immed 0xff,accg0
201 test_acc_immed -14,acc0
202
203 set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
204 set_fr_iimmed 0xfffe,0xffff,fr8
205 cmcpxrs fr7,fr8,acc0,cc5,0
206 test_accg_immed 0,accg0
207 test_acc_immed 1,acc0
208
209 set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
210 set_fr_iimmed 0x7fff,0x8001,fr8
211 cmcpxrs fr7,fr8,acc0,cc5,0
212 test_accg_immed 0,accg0
213 test_acc_immed 0x3fff0001,acc0
214
215 set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
216 set_fr_iimmed 0x8000,0x8000,fr8
217 cmcpxrs fr7,fr8,acc0,cc5,0
218 test_accg_immed 0,accg0
219 test_acc_immed 0x40000000,acc0
220
221 ; Positive operands
222 set_accg_immed 0x00000011,accg0
223 set_acc_immed 0x11111111,acc0
224 set_fr_iimmed 2,4,fr7 ; multiply small numbers
225 set_fr_iimmed 3,5,fr8
226 cmcpxrs fr7,fr8,acc0,cc0,0
227 test_accg_immed 0x00000011,accg0
228 test_acc_immed 0x11111111,acc0
229
230 set_fr_iimmed 3,1,fr7 ; multiply by 0
231 set_fr_iimmed 2,0,fr8
232 cmcpxrs fr7,fr8,acc0,cc0,0
233 test_accg_immed 0x00000011,accg0
234 test_acc_immed 0x11111111,acc0
235
236 set_fr_iimmed 2,1,fr7 ; multiply by 1
237 set_fr_iimmed 1,1,fr8
238 cmcpxrs fr7,fr8,acc0,cc0,0
239 test_accg_immed 0x00000011,accg0
240 test_acc_immed 0x11111111,acc0
241
242 set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
243 set_fr_iimmed 2,0x0007,fr8
244 cmcpxrs fr7,fr8,acc0,cc0,0
245 test_accg_immed 0x00000011,accg0
246 test_acc_immed 0x11111111,acc0
247
248 set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
249 set_fr_iimmed 2,0x2000,fr8
250 cmcpxrs fr7,fr8,acc0,cc0,0
251 test_accg_immed 0x00000011,accg0
252 test_acc_immed 0x11111111,acc0
253
254 set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
255 set_fr_iimmed 0x7fff,0x7fff,fr8
256 cmcpxrs fr7,fr8,acc0,cc0,0
257 test_accg_immed 0x00000011,accg0
258 test_acc_immed 0x11111111,acc0
259
260 ; Mixed operands
261 set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
262 set_fr_iimmed 0xfffd,1,fr8
263 cmcpxrs fr7,fr8,acc0,cc0,0
264 test_accg_immed 0x00000011,accg0
265 test_acc_immed 0x11111111,acc0
266
267 set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
268 set_fr_iimmed 1,0xfffe,fr8
269 cmcpxrs fr7,fr8,acc0,cc4,0
270 test_accg_immed 0x00000011,accg0
271 test_acc_immed 0x11111111,acc0
272
273 set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
274 set_fr_iimmed 1,0xfffe,fr8
275 cmcpxrs fr7,fr8,acc0,cc4,0
276 test_accg_immed 0x00000011,accg0
277 test_acc_immed 0x11111111,acc0
278
279 set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
280 set_fr_iimmed 0xfffe,0xfff9,fr8
281 cmcpxrs fr7,fr8,acc0,cc4,0
282 test_accg_immed 0x00000011,accg0
283 test_acc_immed 0x11111111,acc0
284
285 set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
286 set_fr_iimmed 0xfffe,0x0003,fr8
287 cmcpxrs fr7,fr8,acc0,cc4,0
288 test_accg_immed 0x00000011,accg0
289 test_acc_immed 0x11111111,acc0
290
291 set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
292 set_fr_iimmed 0x8000,0x8000,fr8
293 cmcpxrs fr7,fr8,acc0,cc4,0
294 test_accg_immed 0x00000011,accg0
295 test_acc_immed 0x11111111,acc0
296
297 set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
298 set_fr_iimmed 0x8000,0x8000,fr8
299 cmcpxrs fr7,fr8,acc0,cc4,0
300 test_accg_immed 0x00000011,accg0
301 test_acc_immed 0x11111111,acc0
302
303 ; Negative operands
304 set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
305 set_fr_iimmed 0xfffd,0xfffb,fr8
306 cmcpxrs fr7,fr8,acc0,cc4,0
307 test_accg_immed 0x00000011,accg0
308 test_acc_immed 0x11111111,acc0
309
310 set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
311 set_fr_iimmed 0xfffe,0xffff,fr8
312 cmcpxrs fr7,fr8,acc0,cc4,0
313 test_accg_immed 0x00000011,accg0
314 test_acc_immed 0x11111111,acc0
315
316 set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
317 set_fr_iimmed 0x7fff,0x8001,fr8
318 cmcpxrs fr7,fr8,acc0,cc4,0
319 test_accg_immed 0x00000011,accg0
320 test_acc_immed 0x11111111,acc0
321
322 set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
323 set_fr_iimmed 0x8000,0x8000,fr8
324 cmcpxrs fr7,fr8,acc0,cc4,0
325 test_accg_immed 0x00000011,accg0
326 test_acc_immed 0x11111111,acc0
327
328 ; Positive operands
329 set_accg_immed 0x00000011,accg0
330 set_acc_immed 0x11111111,acc0
331 set_fr_iimmed 2,4,fr7 ; multiply small numbers
332 set_fr_iimmed 3,5,fr8
333 cmcpxrs fr7,fr8,acc0,cc1,1
334 test_accg_immed 0x00000011,accg0
335 test_acc_immed 0x11111111,acc0
336
337 set_fr_iimmed 3,1,fr7 ; multiply by 0
338 set_fr_iimmed 2,0,fr8
339 cmcpxrs fr7,fr8,acc0,cc1,1
340 test_accg_immed 0x00000011,accg0
341 test_acc_immed 0x11111111,acc0
342
343 set_fr_iimmed 2,1,fr7 ; multiply by 1
344 set_fr_iimmed 1,1,fr8
345 cmcpxrs fr7,fr8,acc0,cc1,1
346 test_accg_immed 0x00000011,accg0
347 test_acc_immed 0x11111111,acc0
348
349 set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
350 set_fr_iimmed 2,0x0007,fr8
351 cmcpxrs fr7,fr8,acc0,cc1,1
352 test_accg_immed 0x00000011,accg0
353 test_acc_immed 0x11111111,acc0
354
355 set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
356 set_fr_iimmed 2,0x2000,fr8
357 cmcpxrs fr7,fr8,acc0,cc1,1
358 test_accg_immed 0x00000011,accg0
359 test_acc_immed 0x11111111,acc0
360
361 set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
362 set_fr_iimmed 0x7fff,0x7fff,fr8
363 cmcpxrs fr7,fr8,acc0,cc1,1
364 test_accg_immed 0x00000011,accg0
365 test_acc_immed 0x11111111,acc0
366
367 ; Mixed operands
368 set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
369 set_fr_iimmed 0xfffd,1,fr8
370 cmcpxrs fr7,fr8,acc0,cc1,1
371 test_accg_immed 0x00000011,accg0
372 test_acc_immed 0x11111111,acc0
373
374 set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
375 set_fr_iimmed 1,0xfffe,fr8
376 cmcpxrs fr7,fr8,acc0,cc5,1
377 test_accg_immed 0x00000011,accg0
378 test_acc_immed 0x11111111,acc0
379
380 set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
381 set_fr_iimmed 1,0xfffe,fr8
382 cmcpxrs fr7,fr8,acc0,cc5,1
383 test_accg_immed 0x00000011,accg0
384 test_acc_immed 0x11111111,acc0
385
386 set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
387 set_fr_iimmed 0xfffe,0xfff9,fr8
388 cmcpxrs fr7,fr8,acc0,cc5,1
389 test_accg_immed 0x00000011,accg0
390 test_acc_immed 0x11111111,acc0
391
392 set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
393 set_fr_iimmed 0xfffe,0x0003,fr8
394 cmcpxrs fr7,fr8,acc0,cc5,1
395 test_accg_immed 0x00000011,accg0
396 test_acc_immed 0x11111111,acc0
397
398 set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
399 set_fr_iimmed 0x8000,0x8000,fr8
400 cmcpxrs fr7,fr8,acc0,cc5,1
401 test_accg_immed 0x00000011,accg0
402 test_acc_immed 0x11111111,acc0
403
404 set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
405 set_fr_iimmed 0x8000,0x8000,fr8
406 cmcpxrs fr7,fr8,acc0,cc5,1
407 test_accg_immed 0x00000011,accg0
408 test_acc_immed 0x11111111,acc0
409
410 ; Negative operands
411 set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
412 set_fr_iimmed 0xfffd,0xfffb,fr8
413 cmcpxrs fr7,fr8,acc0,cc5,1
414 test_accg_immed 0x00000011,accg0
415 test_acc_immed 0x11111111,acc0
416
417 set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
418 set_fr_iimmed 0xfffe,0xffff,fr8
419 cmcpxrs fr7,fr8,acc0,cc5,1
420 test_accg_immed 0x00000011,accg0
421 test_acc_immed 0x11111111,acc0
422
423 set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
424 set_fr_iimmed 0x7fff,0x8001,fr8
425 cmcpxrs fr7,fr8,acc0,cc5,1
426 test_accg_immed 0x00000011,accg0
427 test_acc_immed 0x11111111,acc0
428
429 set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
430 set_fr_iimmed 0x8000,0x8000,fr8
431 cmcpxrs fr7,fr8,acc0,cc5,1
432 test_accg_immed 0x00000011,accg0
433 test_acc_immed 0x11111111,acc0
434
435 ; Positive operands
436 set_accg_immed 0x00000011,accg0
437 set_acc_immed 0x11111111,acc0
438 set_fr_iimmed 2,4,fr7 ; multiply small numbers
439 set_fr_iimmed 3,5,fr8
440 cmcpxrs fr7,fr8,acc0,cc2,1
441 test_accg_immed 0x00000011,accg0
442 test_acc_immed 0x11111111,acc0
443
444 set_fr_iimmed 3,1,fr7 ; multiply by 0
445 set_fr_iimmed 2,0,fr8
446 cmcpxrs fr7,fr8,acc0,cc2,1
447 test_accg_immed 0x00000011,accg0
448 test_acc_immed 0x11111111,acc0
449
450 set_fr_iimmed 2,1,fr7 ; multiply by 1
451 set_fr_iimmed 1,1,fr8
452 cmcpxrs fr7,fr8,acc0,cc2,1
453 test_accg_immed 0x00000011,accg0
454 test_acc_immed 0x11111111,acc0
455
456 set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
457 set_fr_iimmed 2,0x0007,fr8
458 cmcpxrs fr7,fr8,acc0,cc2,1
459 test_accg_immed 0x00000011,accg0
460 test_acc_immed 0x11111111,acc0
461
462 set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
463 set_fr_iimmed 2,0x2000,fr8
464 cmcpxrs fr7,fr8,acc0,cc2,1
465 test_accg_immed 0x00000011,accg0
466 test_acc_immed 0x11111111,acc0
467
468 set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
469 set_fr_iimmed 0x7fff,0x7fff,fr8
470 cmcpxrs fr7,fr8,acc0,cc2,1
471 test_accg_immed 0x00000011,accg0
472 test_acc_immed 0x11111111,acc0
473
474 ; Mixed operands
475 set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
476 set_fr_iimmed 0xfffd,1,fr8
477 cmcpxrs fr7,fr8,acc0,cc2,1
478 test_accg_immed 0x00000011,accg0
479 test_acc_immed 0x11111111,acc0
480
481 set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
482 set_fr_iimmed 1,0xfffe,fr8
483 cmcpxrs fr7,fr8,acc0,cc6,1
484 test_accg_immed 0x00000011,accg0
485 test_acc_immed 0x11111111,acc0
486
487 set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
488 set_fr_iimmed 1,0xfffe,fr8
489 cmcpxrs fr7,fr8,acc0,cc6,1
490 test_accg_immed 0x00000011,accg0
491 test_acc_immed 0x11111111,acc0
492
493 set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
494 set_fr_iimmed 0xfffe,0xfff9,fr8
495 cmcpxrs fr7,fr8,acc0,cc6,1
496 test_accg_immed 0x00000011,accg0
497 test_acc_immed 0x11111111,acc0
498
499 set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
500 set_fr_iimmed 0xfffe,0x0003,fr8
501 cmcpxrs fr7,fr8,acc0,cc6,1
502 test_accg_immed 0x00000011,accg0
503 test_acc_immed 0x11111111,acc0
504
505 set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
506 set_fr_iimmed 0x8000,0x8000,fr8
507 cmcpxrs fr7,fr8,acc0,cc6,1
508 test_accg_immed 0x00000011,accg0
509 test_acc_immed 0x11111111,acc0
510
511 set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
512 set_fr_iimmed 0x8000,0x8000,fr8
513 cmcpxrs fr7,fr8,acc0,cc6,1
514 test_accg_immed 0x00000011,accg0
515 test_acc_immed 0x11111111,acc0
516
517 ; Negative operands
518 set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
519 set_fr_iimmed 0xfffd,0xfffb,fr8
520 cmcpxrs fr7,fr8,acc0,cc6,1
521 test_accg_immed 0x00000011,accg0
522 test_acc_immed 0x11111111,acc0
523
524 set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
525 set_fr_iimmed 0xfffe,0xffff,fr8
526 cmcpxrs fr7,fr8,acc0,cc6,1
527 test_accg_immed 0x00000011,accg0
528 test_acc_immed 0x11111111,acc0
529
530 set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
531 set_fr_iimmed 0x7fff,0x8001,fr8
532 cmcpxrs fr7,fr8,acc0,cc6,1
533 test_accg_immed 0x00000011,accg0
534 test_acc_immed 0x11111111,acc0
535
536 set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
537 set_fr_iimmed 0x8000,0x8000,fr8
538 cmcpxrs fr7,fr8,acc0,cc6,1
539 test_accg_immed 0x00000011,accg0
540 test_acc_immed 0x11111111,acc0
541 ;
542 ; Positive operands
543 set_accg_immed 0x00000011,accg0
544 set_acc_immed 0x11111111,acc0
545 set_fr_iimmed 2,4,fr7 ; multiply small numbers
546 set_fr_iimmed 3,5,fr8
547 cmcpxrs fr7,fr8,acc0,cc3,1
548 test_accg_immed 0x00000011,accg0
549 test_acc_immed 0x11111111,acc0
550
551 set_fr_iimmed 3,1,fr7 ; multiply by 0
552 set_fr_iimmed 2,0,fr8
553 cmcpxrs fr7,fr8,acc0,cc3,1
554 test_accg_immed 0x00000011,accg0
555 test_acc_immed 0x11111111,acc0
556
557 set_fr_iimmed 2,1,fr7 ; multiply by 1
558 set_fr_iimmed 1,1,fr8
559 cmcpxrs fr7,fr8,acc0,cc3,1
560 test_accg_immed 0x00000011,accg0
561 test_acc_immed 0x11111111,acc0
562
563 set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
564 set_fr_iimmed 2,0x0007,fr8
565 cmcpxrs fr7,fr8,acc0,cc3,1
566 test_accg_immed 0x00000011,accg0
567 test_acc_immed 0x11111111,acc0
568
569 set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
570 set_fr_iimmed 2,0x2000,fr8
571 cmcpxrs fr7,fr8,acc0,cc3,1
572 test_accg_immed 0x00000011,accg0
573 test_acc_immed 0x11111111,acc0
574
575 set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
576 set_fr_iimmed 0x7fff,0x7fff,fr8
577 cmcpxrs fr7,fr8,acc0,cc3,1
578 test_accg_immed 0x00000011,accg0
579 test_acc_immed 0x11111111,acc0
580
581 ; Mixed operands
582 set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
583 set_fr_iimmed 0xfffd,1,fr8
584 cmcpxrs fr7,fr8,acc0,cc3,1
585 test_accg_immed 0x00000011,accg0
586 test_acc_immed 0x11111111,acc0
587
588 set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
589 set_fr_iimmed 1,0xfffe,fr8
590 cmcpxrs fr7,fr8,acc0,cc7,1
591 test_accg_immed 0x00000011,accg0
592 test_acc_immed 0x11111111,acc0
593
594 set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
595 set_fr_iimmed 1,0xfffe,fr8
596 cmcpxrs fr7,fr8,acc0,cc7,1
597 test_accg_immed 0x00000011,accg0
598 test_acc_immed 0x11111111,acc0
599
600 set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
601 set_fr_iimmed 0xfffe,0xfff9,fr8
602 cmcpxrs fr7,fr8,acc0,cc7,1
603 test_accg_immed 0x00000011,accg0
604 test_acc_immed 0x11111111,acc0
605
606 set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
607 set_fr_iimmed 0xfffe,0x0003,fr8
608 cmcpxrs fr7,fr8,acc0,cc7,1
609 test_accg_immed 0x00000011,accg0
610 test_acc_immed 0x11111111,acc0
611
612 set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
613 set_fr_iimmed 0x8000,0x8000,fr8
614 cmcpxrs fr7,fr8,acc0,cc7,1
615 test_accg_immed 0x00000011,accg0
616 test_acc_immed 0x11111111,acc0
617
618 set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
619 set_fr_iimmed 0x8000,0x8000,fr8
620 cmcpxrs fr7,fr8,acc0,cc7,1
621 test_accg_immed 0x00000011,accg0
622 test_acc_immed 0x11111111,acc0
623
624 ; Negative operands
625 set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
626 set_fr_iimmed 0xfffd,0xfffb,fr8
627 cmcpxrs fr7,fr8,acc0,cc7,1
628 test_accg_immed 0x00000011,accg0
629 test_acc_immed 0x11111111,acc0
630
631 set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
632 set_fr_iimmed 0xfffe,0xffff,fr8
633 cmcpxrs fr7,fr8,acc0,cc7,1
634 test_accg_immed 0x00000011,accg0
635 test_acc_immed 0x11111111,acc0
636
637 set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
638 set_fr_iimmed 0x7fff,0x8001,fr8
639 cmcpxrs fr7,fr8,acc0,cc7,1
640 test_accg_immed 0x00000011,accg0
641 test_acc_immed 0x11111111,acc0
642
643 set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
644 set_fr_iimmed 0x8000,0x8000,fr8
645 cmcpxrs fr7,fr8,acc0,cc7,1
646 test_accg_immed 0x00000011,accg0
647 test_acc_immed 0x11111111,acc0
648
649 pass