]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/testsuite/sim/or1k/mac.S
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / sim / testsuite / sim / or1k / mac.S
CommitLineData
702d582e
PG
1/* Tests the MAC instructions.
2
3666a048 3 Copyright (C) 2017-2021 Free Software Foundation, Inc.
702d582e
PG
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17
18# mach: or1k
19# output: report(0x00000000);\n
20# output: report(0x00000006);\n
21# output: report(0x00000000);\n
22# output: report(0x0000000c);\n
23# output: report(0x00000001);\n
24# output: report(0x00000000);\n
25# output: report(0x40000000);\n
26# output: report(0x00000000);\n
27# output: report(0x00000000);\n
28# output: report(0x00000000);\n
29# output: report(0xffffffff);\n
30# output: report(0x00000006);\n
31# output: report(0x80000000);\n
32# output: report(0x00000006);\n
33# output: report(0x00000000);\n
34# output: report(0x7ffffffe);\n
35# output: report(0x00000000);\n
36# output: report(0x80000000);\n
37# output: report(0x00000001);\n
38# output: report(0x00000000);\n
39# output: report(0x7fffffff);\n
40# output: report(0xffffffff);\n
41# output: report(0x00000000);\n
42# output: report(0x7ffffffd);\n
43# output: report(0x00000000);\n
44# output: report(0x00000000);\n
45# output: report(0xffffffff);\n
46# output: report(0x00000000);\n
47# output: report(0x00000000);\n
48# output: report(0x00000006);\n
49# output: report(0x00000000);\n
50# output: report(0x0000000c);\n
51# output: report(0x00000000);\n
52# output: report(0x00000005);\n
53# output: report(0xffffffff);\n
54# output: report(0xfffffffa);\n
55# output: report(0x00000000);\n
56# output: report(0x00000006);\n
57# output: report(0x00000000);\n
58# output: report(0xffffffff);\n
59# output: report(0x7fffffff);\n
60# output: report(0xfffffff9);\n
61# output: report(0xffffffff);\n
62# output: report(0xfffffff9);\n
63# output: report(0xfffffffe);\n
64# output: report(0xffffffff);\n
65# output: report(0x80000000);\n
66# output: report(0x00000000);\n
67# output: report(0xffffffff);\n
68# output: report(0x80000000);\n
69# output: report(0xffffffff);\n
70# output: report(0x80000006);\n
71# output: report(0x00000000);\n
72# output: report(0x00000000);\n
73# output: report(0x7fffffff);\n
74# output: report(0x7fffffff);\n
75# output: report(0xffffffff);\n
76# output: report(0x7fffffff);\n
77# output: report(0xfffffffe);\n
78# output: report(0xffffffff);\n
79# output: report(0x80000000);\n
80# output: report(0x00000000);\n
81# output: report(0x00000000);\n
82# output: report(0x00000006);\n
83# output: report(0x00000000);\n
84# output: report(0x0000000c);\n
85# output: report(0x00000001);\n
86# output: report(0x00000000);\n
87# output: report(0x40000000);\n
88# output: report(0x00000000);\n
89# output: report(0x00000000);\n
90# output: report(0x00000000);\n
91# output: report(0xffffffff);\n
92# output: report(0x00000006);\n
93# output: report(0x80000000);\n
94# output: report(0x00000006);\n
95# output: report(0x00000000);\n
96# output: report(0x7ffffffe);\n
97# output: report(0x00000000);\n
98# output: report(0x80000000);\n
99# output: report(0x00000001);\n
100# output: report(0x00000000);\n
101# output: report(0x7fffffff);\n
102# output: report(0xffffffff);\n
103# output: report(0x00000000);\n
104# output: report(0x7ffffffd);\n
105# output: report(0x00000000);\n
106# output: report(0x00000000);\n
107# output: report(0xffffffff);\n
108# output: report(0x00000000);\n
109# output: report(0x00000000);\n
110# output: report(0x00000006);\n
111# output: report(0x00000000);\n
112# output: report(0x0000000c);\n
113# output: report(0x00000000);\n
114# output: report(0x00000005);\n
115# output: report(0xffffffff);\n
116# output: report(0xfffffffa);\n
117# output: report(0x00000000);\n
118# output: report(0x00000006);\n
119# output: report(0x00000000);\n
120# output: report(0xffffffff);\n
121# output: report(0x7fffffff);\n
122# output: report(0xfffffff9);\n
123# output: report(0xffffffff);\n
124# output: report(0xfffffff9);\n
125# output: report(0xfffffffe);\n
126# output: report(0xffffffff);\n
127# output: report(0x80000000);\n
128# output: report(0x00000000);\n
129# output: report(0xffffffff);\n
130# output: report(0x80000000);\n
131# output: report(0xffffffff);\n
132# output: report(0x80000006);\n
133# output: report(0x00000000);\n
134# output: report(0x00000000);\n
135# output: report(0x7fffffff);\n
136# output: report(0x7fffffff);\n
137# output: report(0xffffffff);\n
138# output: report(0x7fffffff);\n
139# output: report(0xfffffffe);\n
140# output: report(0xffffffff);\n
141# output: report(0x80000000);\n
142# output: report(0x00000000);\n
143# output: report(0x00000006);\n
144# output: report(0x0000000c);\n
145# output: report(0x00000000);\n
146# output: report(0x00000000);\n
147# output: report(0x00000000);\n
148# output: report(0x00000006);\n
149# output: report(0x00000006);\n
150# output: report(0x7ffffffe);\n
151# output: report(0x80000000);\n
152# output: report(0x00000000);\n
153# output: report(0xffffffff);\n
154# output: report(0x7ffffffd);\n
155# output: report(0x00000000);\n
156# output: report(0x00000000);\n
157# output: report(0x00000006);\n
158# output: report(0x0000000c);\n
159# output: report(0x00000005);\n
160# output: report(0xfffffffa);\n
161# output: report(0x00000006);\n
162# output: report(0xffffffff);\n
163# output: report(0xfffffff9);\n
164# output: report(0xfffffff9);\n
165# output: report(0xffffffff);\n
166# output: report(0x00000000);\n
167# output: report(0x80000000);\n
168# output: report(0x80000006);\n
169# output: report(0x00000000);\n
170# output: report(0x7fffffff);\n
171# output: report(0x7fffffff);\n
172# output: report(0xffffffff);\n
173# output: report(0x00000000);\n
174# output: report(0xffffffff);\n
175# output: report(0xfffffffa);\n
176# output: report(0x00000000);\n
177# output: report(0x00000006);\n
178# output: report(0x00000000);\n
179# output: report(0xfffffffa);\n
180# output: report(0x3fffffff);\n
181# output: report(0xfffffffa);\n
182# output: report(0xffffffff);\n
183# output: report(0xfffffff4);\n
184# output: report(0xfffffffe);\n
185# output: report(0xffffffff);\n
186# output: report(0x80000000);\n
187# output: report(0x00000000);\n
188# output: report(0xffffffff);\n
189# output: report(0x80000002);\n
190# output: report(0xffffffff);\n
191# output: report(0x80000004);\n
192# output: report(0x00000000);\n
193# output: report(0x00000004);\n
194# output: report(0x7ffffffe);\n
195# output: report(0xffffffff);\n
196# output: report(0xffffffff);\n
197# output: report(0x80000001);\n
198# output: report(0xffffffff);\n
199# output: report(0x00000004);\n
200# output: report(0xfffffffe);\n
201# output: report(0x00000004);\n
202# output: report(0x00000000);\n
203# output: report(0x00000000);\n
204# output: report(0x00000000);\n
205# output: report(0x00000006);\n
206# output: report(0xffffffff);\n
207# output: report(0xfffffff9);\n
208# output: report(0x00000000);\n
209# output: report(0x00000006);\n
210# output: report(0x00000000);\n
211# output: report(0x0000000c);\n
212# output: report(0x00000001);\n
213# output: report(0x00000005);\n
214# output: report(0x7fffffff);\n
215# output: report(0xffffffff);\n
216# output: report(0xffffffff);\n
217# output: report(0xffffffff);\n
218# output: report(0xffffffff);\n
219# output: report(0x00000005);\n
220# output: report(0x80000000);\n
221# output: report(0x00000006);\n
222# output: report(0x00000000);\n
223# output: report(0x80000000);\n
224# output: report(0x00000000);\n
225# output: report(0x80000006);\n
226# output: report(0x00000001);\n
227# output: report(0x00000000);\n
228# output: report(0x7fffffff);\n
229# output: report(0xffffffff);\n
230# output: report(0x00000000);\n
231# output: report(0x7fffffff);\n
232# output: report(0xffffffff);\n
233# output: report(0x7fffffff);\n
234# output: report(0x80000000);\n
235# output: report(0x80000000);\n
236# output: exit(0)\n
237
238#include "or1k-asm-test-helpers.h"
239
240 .macro TEST_MACRC mac_hi, mac_lo, op1, op2
241 LOAD_IMMEDIATE r2, \mac_hi
242 MOVE_TO_SPR SPR_MACHI, r2
243 LOAD_IMMEDIATE r2, \mac_lo
244 MOVE_TO_SPR SPR_MACLO, r2
245 LOAD_IMMEDIATE r5, \op1
246 LOAD_IMMEDIATE r6, \op2
247 l.mac r5, r6
248 l.macrc r3
249 REPORT_REG_TO_CONSOLE r3
250 .endm
251
252 .macro TEST_MAC mac_hi, mac_lo, op1, op2
253 LOAD_IMMEDIATE r2, \mac_hi
254 MOVE_TO_SPR SPR_MACHI, r2
255 LOAD_IMMEDIATE r2, \mac_lo
256 MOVE_TO_SPR SPR_MACLO, r2
257 LOAD_IMMEDIATE r5, \op1
258 LOAD_IMMEDIATE r6, \op2
259 l.mac r5, r6
260 MOVE_FROM_SPR r3, SPR_MACHI
261 REPORT_REG_TO_CONSOLE r3
262 MOVE_FROM_SPR r3, SPR_MACLO
263 REPORT_REG_TO_CONSOLE r3
264 .endm
265
266 .macro TEST_MACI mac_hi, mac_lo, op1, op2_immediate
267 LOAD_IMMEDIATE r2, \mac_hi
268 MOVE_TO_SPR SPR_MACHI, r2
269 LOAD_IMMEDIATE r2, \mac_lo
270 MOVE_TO_SPR SPR_MACLO, r2
271 LOAD_IMMEDIATE r5, \op1
272 l.maci r5, \op2_immediate
273 MOVE_FROM_SPR r3, SPR_MACHI
274 REPORT_REG_TO_CONSOLE r3
275 MOVE_FROM_SPR r3, SPR_MACLO
276 REPORT_REG_TO_CONSOLE r3
277 .endm
278
279 .macro TEST_MSB mac_hi, mac_lo, op1, op2
280 LOAD_IMMEDIATE r2, \mac_hi
281 MOVE_TO_SPR SPR_MACHI, r2
282 LOAD_IMMEDIATE r2, \mac_lo
283 MOVE_TO_SPR SPR_MACLO, r2
284 LOAD_IMMEDIATE r5, \op1
285 LOAD_IMMEDIATE r6, \op2
286 l.msb r5, r6
287 MOVE_FROM_SPR r3, SPR_MACHI
288 REPORT_REG_TO_CONSOLE r3
289 MOVE_FROM_SPR r3, SPR_MACLO
290 REPORT_REG_TO_CONSOLE r3
291 .endm
292
293 STANDARD_TEST_ENVIRONMENT
294
295 .section .text
296start_tests:
297 PUSH LINK_REGISTER_R9
298
299 /* Test the l.mac instruction. */
300
301 /* two small positive numbers */
302
303 /* MAC two small positive numbers on a zero total */
304 TEST_MAC 0x00000000, 0x00000000, 0x00000002, 0x00000003
305
306 /* MAC two small positive numbers on a small positive total */
307 TEST_MAC 0x00000000, 0x00000006, 0x00000002, 0x00000003,
308
309 /* MAC two small positive numbers on a moderate positive total */
310 TEST_MAC 0x00000000, 0xfffffffa, 0x00000002, 0x00000003
311
312 /* MAC two small positive numbers on a large positive total */
313 TEST_MAC 0x3fffffff, 0xfffffffa, 0x00000002, 0x00000003
314
315 /* MAC two small positive numbers on a small negative total */
316 TEST_MAC 0xffffffff, 0xfffffffa, 0x00000002, 0x00000003
317
318 /* MAC two small positive numbers on a moderate negative total */
319 TEST_MAC 0xffffffff, 0x00000000, 0x00000002, 0x00000003
320
321 /* MAC two small positive numbers on a large negative total */
322 TEST_MAC 0x80000000, 0x00000000, 0x00000002, 0x00000003
323
324 /* two moderate positive numbers */
325
326 /* MAC two moderate positive numbers on a zero total */
327 TEST_MAC 0x00000000, 0x00000000, 0x00008001, 0x0000fffe
328
329 /* MAC two moderate positive numbers on a small positive total */
330 TEST_MAC 0x00000000, 0x00000002, 0x00008001, 0x0000fffe
331
332 /* MAC two moderate positive numbers on a moderate positive total */
333 TEST_MAC 0x00000000, 0x80000002, 0x00008001, 0x0000fffe
334
335 /* MAC two moderate positive numbers on a large positive total */
336 TEST_MAC 0x7fffffff, 0x80000001, 0x00008001, 0x0000fffe
337
338 /* MAC two moderate positive numbers on a small negative total */
339 TEST_MAC 0xffffffff, 0xffffffff, 0x00008001, 0x0000fffe
340
341 /* MAC two moderate positive numbers on a moderate negative total */
342 TEST_MAC 0xffffffff, 0x80000002, 0x00008001, 0x0000fffe
343
344 /* MAC two moderate positive numbers on a large negative total */
345 TEST_MAC 0xfffffffe, 0x80000002, 0x00008001, 0x0000fffe
346
347 /* two small negative numbers */
348
349 /* MAC two small negative numbers on a zero total */
350 TEST_MAC 0x00000000, 0x00000000, 0xfffffffe, 0xfffffffd
351
352 /* MAC two small negative numbers on a small positive total */
353 TEST_MAC 0x00000000, 0x00000006, 0xfffffffe, 0xfffffffd
354
355 /* MAC two small negative numbers on a small negative total */
356 TEST_MAC 0xffffffff, 0xffffffff, 0xfffffffe, 0xfffffffd
357
358 /* one small positive and one small negative */
359
360 /* MAC one small positive and one small negative number on a zero
361 total */
362 TEST_MAC 0x00000000, 0x00000000, 0x00000002, 0xfffffffd
363
364 /* MAC one small positive and one small negative number on a small
365 positive total */
366 TEST_MAC 0x00000000, 0x0000000c, 0x00000002, 0xfffffffd
367
368 /* MAC one small positive and one small negative number on a
369 moderate positive total */
370 TEST_MAC 0x00000001, 0x00000005, 0x00000002, 0xfffffffd
371
372 /* MAC one small positive and one small negative number on a large
373 positive total */
374 TEST_MAC 0x7fffffff, 0xffffffff, 0x00000002, 0xfffffffd
375
376 /* MAC one small positive and one small negative number on a small
377 negative total */
378 TEST_MAC 0xffffffff, 0xffffffff, 0x00000002, 0xfffffffd
379
380 /* MAC one small positive and one small negative number on a
381 moderate negative total */
382 TEST_MAC 0xffffffff, 0x00000005, 0x00000002, 0xfffffffd
383
384 /* MAC one small positive and one small negative number on a large
385 negative total */
386 TEST_MAC 0x80000000, 0x00000006, 0x00000002, 0xfffffffd
387
388 /* one moderate positive and one moderate negative number */
389
390 /* MAC one moderate positive and one moderate negative number on a
391 zero total */
392 TEST_MAC 0x00000000, 0x00000000, 0x00008000, 0xffff0000
393
394 /* MAC one moderate positive and one moderate negative number on a
395 small positive total */
396 TEST_MAC 0x00000000, 0x00000006, 0x00008000, 0xffff0000
397
398 /* MAC one moderate positive and one moderate negative number on a
399 moderate positive total */
400 TEST_MAC 0x00000000, 0x80000000, 0x00008000, 0xffff0000
401
402 /* MAC one moderate positive and one moderate negative number on a
403 large positive total */
404 TEST_MAC 0x7fffffff, 0xffffffff, 0x00008000, 0xffff0000
405
406 /* MAC one moderate positive and one moderate negative number on a
407 small negative total */
408 TEST_MAC 0xffffffff, 0xffffffff, 0x00008000, 0xffff0000
409
410 /* MAC one moderate positive and one moderate negative number on a
411 moderate negative total */
412 TEST_MAC 0xffffffff, 0x7fffffff, 0x00008000, 0xffff0000
413
414 /* MAC one moderate positive and one moderate negative number on a
415 large negative total */
416 TEST_MAC 0x80000000, 0x80000000, 0x00008000, 0xffff0000
417
418 /* Test the l.maci instruction. */
419
420 /* two small positive numbers */
421
422 /* MAC two small positive numbers on a zero total */
423 TEST_MACI 0x00000000, 0x00000000, 0x00000002, 0x0003
424
425 /* MAC two small positive numbers on a small positive total */
426 TEST_MACI 0x00000000, 0x00000006, 0x00000002, 0x0003
427
428 /* MAC two small positive numbers on a moderate positive total */
429 TEST_MACI 0x00000000, 0xfffffffa, 0x00000002, 0x0003
430
431 /* MAC two small positive numbers on a large positive total */
432 TEST_MACI 0x3fffffff, 0xfffffffa, 0x00000002, 0x0003
433
434 /* MAC two small positive numbers on a small negative total */
435 TEST_MACI 0xffffffff, 0xfffffffa, 0x00000002, 0x0003
436
437 /* MAC two small positive numbers on a moderate negative total */
438 TEST_MACI 0xffffffff, 0x00000000, 0x00000002, 0x0003
439
440 /* MAC two small positive numbers on a large negative total */
441 TEST_MACI 0x80000000, 0x00000000, 0x00000002, 0x0003
442
443 /* two moderate positive numbers */
444
445 /* MAC two moderate positive numbers on a zero total */
446 TEST_MACI 0x00000000, 0x00000000, 0x00010002, 0x7fff
447
448 /* MAC two moderate positive numbers on a small positive total */
449 TEST_MACI 0x00000000, 0x00000002, 0x00010002, 0x7fff
450
451 /* MAC two moderate positive numbers on a moderate positive total */
452 TEST_MACI 0x00000000, 0x80000002, 0x00010002, 0x7fff
453
454 /* MAC two moderate positive numbers on a large positive total */
455 TEST_MACI 0x7fffffff, 0x80000001, 0x00010002, 0x7fff
456
457 /* MAC two moderate positive numbers on a small negative total */
458 TEST_MACI 0xffffffff, 0xffffffff, 0x00010002, 0x7fff
459
460 /* MAC two moderate positive numbers on a moderate negative total */
461 TEST_MACI 0xffffffff, 0x80000002, 0x00010002, 0x7fff
462
463 /* MAC two moderate positive numbers on a large negative total */
464 TEST_MACI 0xfffffffe, 0x80000002, 0x00010002, 0x7fff
465
466 /* two small negative numbers */
467
468 /* MAC two small negative numbers on a zero total */
469 TEST_MACI 0x00000000, 0x00000000, 0xfffffffe, 0xfffd
470
471 /* MAC two small negative numbers on a small positive total */
472 TEST_MACI 0x00000000, 0x00000006, 0xfffffffe, 0xfffd
473
474 /* MAC two small negative numbers on a small negative total */
475 TEST_MACI 0xffffffff, 0xffffffff, 0xfffffffe, 0xfffd
476
477 /* one small positive and one small negative */
478
479 /* MAC one small positive and one small negative number on a zero
480 total */
481 TEST_MACI 0x00000000, 0x00000000, 0x00000002, 0xfffd
482
483 /* MAC one small positive and one small negative number on a small
484 positive total */
485 TEST_MACI 0x00000000, 0x0000000c, 0x00000002, 0xfffd
486
487 /* MAC one small positive and one small negative number on a
488 moderate positive total */
489 TEST_MACI 0x00000001, 0x00000005, 0x00000002, 0xfffd
490
491 /* MAC one small positive and one small negative number on a large
492 positive total */
493 TEST_MACI 0x7fffffff, 0xffffffff, 0x00000002, 0xfffd
494
495 /* MAC one small positive and one small negative number on a small
496 negative total */
497 TEST_MACI 0xffffffff, 0xffffffff, 0x00000002, 0xfffd
498
499 /* MAC one small positive and one small negative number on a
500 moderate negative total */
501 TEST_MACI 0xffffffff, 0x00000005, 0x00000002, 0xfffd
502
503 /* MAC one small positive and one small negative number on a large
504 negative total */
505 TEST_MACI 0x80000000, 0x00000006, 0x00000002, 0xfffd
506
507 /* one moderate positive and one moderate negative */
508
509 /* MAC one moderate positive and one moderate negative number on a
510 zero total */
511 TEST_MACI 0x00000000, 0x00000000, 0x00010000, 0x8000
512
513 /* MAC one moderate positive and one moderate negative number on a
514 small positive total */
515 TEST_MACI 0x00000000, 0x00000006, 0x00010000, 0x8000
516
517 /* MAC one moderate positive and one moderate negative number on a
518 moderate positive total */
519 TEST_MACI 0x00000000, 0x80000000, 0x00010000, 0x8000
520
521 /* MAC one moderate positive and one moderate negative number on a
522 large positive total */
523 TEST_MACI 0x7fffffff, 0xffffffff, 0x00010000, 0x8000
524
525 /* MAC one moderate positive and one moderate negative number on a
526 small negative total */
527 TEST_MACI 0xffffffff, 0xffffffff, 0x00010000, 0x8000
528
529 /* MAC one moderate positive and one moderate negative number on a
530 moderate negative total */
531 TEST_MACI 0xffffffff, 0x7fffffff, 0x00010000, 0x8000
532
533 /* MAC one moderate positive and one moderate negative number on a
534 large negative total */
535 TEST_MACI 0x80000000, 0x80000000, 0x00010000, 0x8000
536
537 /* Test the l.macrc instruction.
538
539 Note that these tests use the same input data as the ones for
540 l.mac above. The results are the same, but only the low 32-bits
541 are compared. */
542
543 /* two small positive numbers */
544
545 /* MAC two small positive numbers on a zero total */
546 TEST_MACRC 0x00000000, 0x00000000, 0x00000002, 0x00000003
547
548 /* MAC two small positive numbers on a small positive total */
549 TEST_MACRC 0x00000000, 0x00000006, 0x00000002, 0x00000003
550
551 /* MAC two small positive numbers on a moderate positive total */
552 TEST_MACRC 0x00000000, 0xfffffffa, 0x00000002, 0x00000003
553
554 /* MAC two small positive numbers on a large positive total */
555 TEST_MACRC 0x3fffffff, 0xfffffffa, 0x00000002, 0x00000003
556
557 /* MAC two small positive numbers on a small negative total */
558 TEST_MACRC 0xffffffff, 0xfffffffa, 0x00000002, 0x00000003
559
560 /* MAC two small positive numbers on a moderate negative total */
561 TEST_MACRC 0xffffffff, 0x00000000, 0x00000002, 0x00000003
562
563 /* MAC two small positive numbers on a large negative total */
564 TEST_MACRC 0x80000000, 0x00000000, 0x00000002, 0x00000003
565
566 /* two moderate positive numbers */
567
568 /* MAC two moderate positive numbers on a zero total */
569 TEST_MACRC 0x00000000, 0x00000000, 0x00008001, 0x0000fffe
570
571 /* MAC two moderate positive numbers on a small positive total */
572 TEST_MACRC 0x00000000, 0x00000002, 0x00008001, 0x0000fffe
573
574 /* MAC two moderate positive numbers on a moderate positive total */
575 TEST_MACRC 0x00000000, 0x80000002, 0x00008001, 0x0000fffe
576
577 /* MAC two moderate positive numbers on a large positive total */
578 TEST_MACRC 0x7fffffff, 0x80000001, 0x00008001, 0x0000fffe
579
580 /* MAC two moderate positive numbers on a small negative total */
581 TEST_MACRC 0xffffffff, 0xffffffff, 0x00008001, 0x0000fffe
582
583 /* MAC two moderate positive numbers on a moderate negative total */
584 TEST_MACRC 0xffffffff, 0x80000002, 0x00008001, 0x0000fffe
585
586 /* MAC two moderate positive numbers on a large negative total */
587 TEST_MACRC 0xfffffffe, 0x80000002, 0x00008001, 0x0000fffe
588
589 /* two small negative numbers */
590
591 /* MAC two small negative numbers on a zero total */
592 TEST_MACRC 0x00000000, 0x00000000, 0xfffffffe, 0xfffffffd
593
594 /* MAC two small negative numbers on a small positive total */
595 TEST_MACRC 0x00000000, 0x00000006, 0xfffffffe, 0xfffffffd
596
597 /* MAC two small negative numbers on a small negative total */
598 TEST_MACRC 0xffffffff, 0xffffffff, 0xfffffffe, 0xfffffffd
599
600 /* one small positive and one small negative number */
601
602 /* MAC one small positive and one small negative number on a zero
603 total */
604 TEST_MACRC 0x00000000, 0x00000000, 0x00000002, 0xfffffffd
605
606 /* MAC one small positive and one small negative number on a small
607 positive total */
608 TEST_MACRC 0x00000000, 0x0000000c, 0x00000002, 0xfffffffd
609
610 /* MAC one small positive and one small negative number on a
611 moderate positive total */
612 TEST_MACRC 0x00000001, 0x00000005, 0x00000002, 0xfffffffd
613
614 /* MAC one small positive and one small negative number on a large
615 positive total */
616 TEST_MACRC 0x7fffffff, 0xffffffff, 0x00000002, 0xfffffffd
617
618 /* MAC one small positive and one small negative number on a small
619 negative total */
620 TEST_MACRC 0xffffffff, 0xffffffff, 0x00000002, 0xfffffffd
621
622 /* MAC one small positive and one small negative number on a
623 moderate negative total */
624 TEST_MACRC 0xffffffff, 0x00000005, 0x00000002, 0xfffffffd
625
626 /* MAC one small positive and one small negative number on a large
627 negative total */
628 TEST_MACRC 0x80000000, 0x00000006, 0x00000002, 0xfffffffd
629
630 /* one moderate positive and one moderate negative */
631
632 /* MAC one moderate positive and one moderate negative number on a
633 zero total */
634 TEST_MACRC 0x00000000, 0x00000000, 0x00008000, 0xffff0000
635
636 /* MAC one moderate positive and one moderate negative number on a
637 small positive total */
638 TEST_MACRC 0x00000000, 0x00000006, 0x00008000, 0xffff0000
639
640 /* MAC one moderate positive and one moderate negative number on a
641 moderate positive total */
642 TEST_MACRC 0x00000000, 0x80000000, 0x00008000, 0xffff0000
643
644 /* MAC one moderate positive and one moderate negative number on a
645 large positive total */
646 TEST_MACRC 0x7fffffff, 0xffffffff, 0x00008000, 0xffff0000
647
648 /* MAC one moderate positive and one moderate negative number on a
649 small negative total */
650 TEST_MACRC 0xffffffff, 0xffffffff, 0x00008000, 0xffff0000
651
652 /* MAC one moderate positive and one moderate negative number on a
653 moderate negative total */
654 TEST_MACRC 0xffffffff, 0x7fffffff, 0x00008000, 0xffff0000
655
656 /* MAC one moderate positive and one moderate negative number on a
657 large negative total */
658 TEST_MACRC 0x80000000, 0x80000000, 0x00008000, 0xffff0000
659
660 /* Test the l.msb instruction. */
661
662 /* MSB two small positive numbers on a zero total */
663 TEST_MSB 0x00000000, 0x00000000, 0x00000002, 0x00000003
664
665 /* MSB two small positive numbers on a small positive total */
666 TEST_MSB 0x00000000, 0x0000000c, 0x00000002, 0x00000003
667
668 /* MSB two small positive numbers on a moderate positive total */
669 TEST_MSB 0x00000001, 0x00000000, 0x00000002, 0x00000003
670
671 /* MSB two small positive numbers on a large positive total */
672 TEST_MSB 0x40000000, 0x00000000, 0x00000002, 0x00000003
673
674 /* MSB two small positive numbers on a small negative total */
675 TEST_MSB 0xffffffff, 0xfffffffa, 0x00000002, 0x00000003
676
677 /* MSB two small positive numbers on a moderate negative total */
678 TEST_MSB 0xffffffff, 0x00000005, 0x00000002, 0x00000003
679
680 /* MSB two small positive numbers on a large negative total */
681 TEST_MSB 0x80000000, 0x00000006, 0x00000002, 0x00000003
682
683 /* two moderate positive numbers */
684
685 /* MSB two moderate positive numbers on a zero total */
686 TEST_MSB 0x00000000, 0x00000000, 0x00008001, 0x0000fffe
687
688 /* MSB two moderate positive numbers on a small positive total */
689 TEST_MSB 0x00000000, 0x00000002, 0x00008001, 0x0000fffe
690
691 /* MSB two moderate positive numbers on a moderate positive total */
692 TEST_MSB 0x00000000, 0x80000002, 0x00008001, 0x0000fffe
693
694 /* MSB two moderate positive numbers on a large positive total */
695 TEST_MSB 0x7fffffff, 0x7ffffffd, 0x00008001, 0x0000fffe
696
697 /* MSB two moderate positive numbers on a small negative total */
698 TEST_MSB 0xffffffff, 0xffffffff, 0x00008001, 0x0000fffe
699
700 /* MSB two moderate positive numbers on a moderate negative total */
701 TEST_MSB 0xffffffff, 0x80000002, 0x00008001, 0x0000fffe
702
703 /* MSB two moderate positive numbers on a large negative total */
704 TEST_MSB 0xfffffffe, 0x80000002, 0x00008001, 0x0000fffe
705
706 /* two small negative numbers */
707
708 /* MSB two small negative numbers on a zero total */
709 TEST_MSB 0x00000000, 0x00000006, 0xfffffffe, 0xfffffffd
710
711 /* MSB two small negative numbers on a small positive total */
712 TEST_MSB 0x00000000, 0x0000000c, 0xfffffffe, 0xfffffffd
713
714 /* MSB two small negative numbers on a small negative total */
715 TEST_MSB 0xffffffff, 0xffffffff, 0xfffffffe, 0xfffffffd
716
717 /* one small positive and one small negative number */
718
719 /* MSB one small positive and one small negative number on a zero
720 total */
721 TEST_MSB 0x00000000, 0x00000000, 0x00000002, 0xfffffffd
722
723 /* MSB one small positive and one small negative number on a small
724 positive total */
725 TEST_MSB 0x00000000, 0x00000006, 0x00000002, 0xfffffffd
726
727 /* MSB one small positive and one small negative number on a
728 moderate positive total */
729 TEST_MSB 0x00000000, 0xffffffff, 0x00000002, 0xfffffffd
730
731 /* MSB one small positive and one small negative number on a large
732 positive total */
733 TEST_MSB 0x7fffffff, 0xfffffff9, 0x00000002, 0xfffffffd
734
735 /* MSB one small positive and one small negative number on a small
736 negative total */
737 TEST_MSB 0xffffffff, 0xfffffff9, 0x00000002, 0xfffffffd
738
739 /* MSB one small positive and one small negative number on a
740 moderate negative total */
741 TEST_MSB 0xfffffffe, 0xffffffff, 0x00000002, 0xfffffffd
742
743 /* MSB one small positive and one small negative number on a large
744 negative total */
745 TEST_MSB 0x80000000, 0x00000000, 0x00000002, 0xfffffffd
746
747 /* one moderate positive and one moderate negative number */
748
749 /* MSB one moderate positive and one moderate negative number on a
750 zero total */
751 TEST_MSB 0x00000000, 0x00000000, 0x00008000, 0xffff0000
752
753 /* MSB one moderate positive and one moderate negative number on a
754 small positive total */
755 TEST_MSB 0x00000000, 0x00000006, 0x00008000, 0xffff0000
756
757 /* MSB one moderate positive and one moderate negative number on a
758 moderate positive total */
759 TEST_MSB 0x00000000, 0x80000000, 0x00008000, 0xffff0000
760
761 /* MSB one moderate positive and one moderate negative number on a
762 large positive total */
763 TEST_MSB 0x7fffffff, 0x7fffffff, 0x00008000, 0xffff0000
764
765 /* MSB one moderate positive and one moderate negative number on a
766 small negative total */
767 TEST_MSB 0xffffffff, 0xffffffff, 0x00008000, 0xffff0000
768
769 /* MSB one moderate positive and one moderate negative number on a
770 moderate negative total */
771 TEST_MSB 0xfffffffe, 0xffffffff, 0x00008000, 0xffff0000
772
773 /* MSB one moderate positive and one moderate negative number on a
774 large negative total */
775 TEST_MSB 0x80000000, 0x00000000, 0x00008000, 0xffff0000
776
777 POP LINK_REGISTER_R9
778 RETURN_TO_LINK_REGISTER_R9