Update copyright year range in all GDB files.
[deliverable/binutils-gdb.git] / sim / testsuite / sim / or1k / add.S
CommitLineData
702d582e
PG
1/* Tests instructions l.add, l.addc, l.addi and l.addic.
2
b811d2c2 3 Copyright (C) 2017-2020 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(0x00000001);\n
20# output: report(0x00000002);\n
21# output: report(0x00000003);\n
22# output: report(0x00000000);\n
23# output: report(0x00000000);\n
24# output: report(0x00000000);\n
25# output: \n
26# output: report(0x00000001);\n
27# output: report(0x00000002);\n
28# output: report(0x00000003);\n
29# output: report(0x00000000);\n
30# output: report(0x00000000);\n
31# output: report(0x00000000);\n
32# output: \n
33# output: report(0xffffffff);\n
34# output: report(0xfffffffe);\n
35# output: report(0xfffffffd);\n
36# output: report(0x00000001);\n
37# output: report(0x00000000);\n
38# output: report(0x00000000);\n
39# output: \n
40# output: report(0x40000000);\n
41# output: report(0x3fffffff);\n
42# output: report(0x7fffffff);\n
43# output: report(0x00000000);\n
44# output: report(0x00000000);\n
45# output: report(0x00000000);\n
46# output: \n
47# output: report(0x40000000);\n
48# output: report(0x40000000);\n
49# output: report(0x80000000);\n
50# output: report(0x00000000);\n
51# output: report(0x00000001);\n
52# output: report(0x00000000);\n
53# output: \n
54# output: report(0xc0000000);\n
55# output: report(0xc0000000);\n
56# output: report(0x80000000);\n
57# output: report(0x00000001);\n
58# output: report(0x00000000);\n
59# output: report(0x00000000);\n
60# output: \n
61# output: report(0xbfffffff);\n
62# output: report(0xbfffffff);\n
63# output: report(0x7ffffffe);\n
64# output: report(0x00000001);\n
65# output: report(0x00000001);\n
66# output: report(0x00000000);\n
67# output: \n
68# output: report(0x40000000);\n
69# output: report(0x40000000);\n
70# output: report(0x80000000);\n
71# output: report(0x00000000);\n
72# output: report(0x00000001);\n
73# output: report(0x00000001);\n
74# output: \n
75# output: report(0xffffffff);\n
76# output: report(0xfffffffe);\n
77# output: report(0xfffffffd);\n
78# output: report(0x00000001);\n
79# output: report(0x00000000);\n
80# output: report(0x00000000);\n
81# output: \n
82# output: report(0xbfffffff);\n
83# output: report(0xbfffffff);\n
84# output: report(0x7ffffffe);\n
85# output: report(0x00000001);\n
86# output: report(0x00000001);\n
87# output: report(0x00000001);\n
88# output: \n
89# output: report(0x00000001);\n
90# output: report(0x00000002);\n
91# output: report(0x00000003);\n
92# output: report(0x00000000);\n
93# output: report(0x00000000);\n
94# output: report(0x00000000);\n
95# output: \n
96# output: report(0xffffffff);\n
97# output: report(0xfffffffe);\n
98# output: report(0xfffffffd);\n
99# output: report(0x00000001);\n
100# output: report(0x00000000);\n
101# output: report(0x00000000);\n
102# output: \n
103# output: report(0x40000000);\n
104# output: report(0x3fffffff);\n
105# output: report(0x7fffffff);\n
106# output: report(0x00000000);\n
107# output: report(0x00000000);\n
108# output: report(0x00000000);\n
109# output: \n
110# output: report(0x40000000);\n
111# output: report(0x3fffffff);\n
112# output: report(0x80000000);\n
113# output: report(0x00000000);\n
114# output: report(0x00000001);\n
115# output: report(0x00000000);\n
116# output: \n
117# output: report(0x40000000);\n
118# output: report(0x40000000);\n
119# output: report(0x80000000);\n
120# output: report(0x00000000);\n
121# output: report(0x00000001);\n
122# output: report(0x00000000);\n
123# output: \n
124# output: report(0xffffffff);\n
125# output: report(0x00000000);\n
126# output: report(0x00000000);\n
127# output: report(0x00000001);\n
128# output: report(0x00000000);\n
129# output: report(0x00000000);\n
130# output: \n
131# output: report(0x00000000);\n
132# output: report(0xffffffff);\n
133# output: report(0x00000000);\n
134# output: report(0x00000001);\n
135# output: report(0x00000000);\n
136# output: report(0x00000000);\n
137# output: \n
138# output: report(0xc0000000);\n
139# output: report(0xc0000000);\n
140# output: report(0x80000000);\n
141# output: report(0x00000001);\n
142# output: report(0x00000000);\n
143# output: report(0x00000000);\n
144# output: \n
145# output: report(0xc0000000);\n
146# output: report(0xbfffffff);\n
147# output: report(0x80000000);\n
148# output: report(0x00000001);\n
149# output: report(0x00000000);\n
150# output: report(0x00000000);\n
151# output: \n
152# output: report(0xbfffffff);\n
153# output: report(0xbfffffff);\n
154# output: report(0x7ffffffe);\n
155# output: report(0x00000001);\n
156# output: report(0x00000001);\n
157# output: report(0x00000000);\n
158# output: \n
159# output: report(0x40000000);\n
160# output: report(0x40000000);\n
161# output: report(0x80000000);\n
162# output: report(0x00000000);\n
163# output: report(0x00000001);\n
164# output: report(0x00000001);\n
165# output: \n
166# output: report(0x40000000);\n
167# output: report(0x3fffffff);\n
168# output: report(0x80000000);\n
169# output: report(0x00000000);\n
170# output: report(0x00000001);\n
171# output: report(0x00000001);\n
172# output: \n
173# output: report(0xffffffff);\n
174# output: report(0xfffffffe);\n
175# output: report(0xfffffffd);\n
176# output: report(0x00000001);\n
177# output: report(0x00000000);\n
178# output: report(0x00000000);\n
179# output: \n
180# output: report(0x00000000);\n
181# output: report(0xffffffff);\n
182# output: report(0x00000000);\n
183# output: report(0x00000001);\n
184# output: report(0x00000000);\n
185# output: report(0x00000000);\n
186# output: \n
187# output: report(0xbfffffff);\n
188# output: report(0xbfffffff);\n
189# output: report(0x7ffffffe);\n
190# output: report(0x00000001);\n
191# output: report(0x00000001);\n
192# output: report(0x00000001);\n
193# output: \n
194# output: report(0x00000001);\n
195# output: report(0x00000002);\n
196# output: report(0x00000003);\n
197# output: report(0x00000000);\n
198# output: report(0x00000000);\n
199# output: report(0x00000000);\n
200# output: \n
201# output: report(0x00000001);\n
202# output: report(0x00000002);\n
203# output: report(0x00000003);\n
204# output: report(0x00000000);\n
205# output: report(0x00000000);\n
206# output: report(0x00000000);\n
207# output: \n
208# output: report(0xffffffff);\n
209# output: report(0x0000fffe);\n
210# output: report(0xfffffffd);\n
211# output: report(0x00000001);\n
212# output: report(0x00000000);\n
213# output: report(0x00000000);\n
214# output: \n
215# output: report(0x7fff8000);\n
216# output: report(0x00007fff);\n
217# output: report(0x7fffffff);\n
218# output: report(0x00000000);\n
219# output: report(0x00000000);\n
220# output: report(0x00000000);\n
221# output: \n
222# output: report(0x7fffc000);\n
223# output: report(0x00004000);\n
224# output: report(0x80000000);\n
225# output: report(0x00000000);\n
226# output: report(0x00000001);\n
227# output: report(0x00000000);\n
228# output: \n
229# output: report(0x80008000);\n
230# output: report(0x00008000);\n
231# output: report(0x80000000);\n
232# output: report(0x00000001);\n
233# output: report(0x00000000);\n
234# output: report(0x00000000);\n
235# output: \n
236# output: report(0x80007fff);\n
237# output: report(0x00008000);\n
238# output: report(0x7fffffff);\n
239# output: report(0x00000001);\n
240# output: report(0x00000001);\n
241# output: report(0x00000000);\n
242# output: \n
243# output: report(0x7fffc000);\n
244# output: report(0x00004000);\n
245# output: report(0x80000000);\n
246# output: report(0x00000000);\n
247# output: report(0x00000001);\n
248# output: report(0x00000001);\n
249# output: \n
250# output: report(0xffffffff);\n
251# output: report(0x0000fffe);\n
252# output: report(0xfffffffd);\n
253# output: report(0x00000001);\n
254# output: report(0x00000000);\n
255# output: report(0x00000000);\n
256# output: \n
257# output: report(0x80007fff);\n
258# output: report(0x00008000);\n
259# output: report(0x7fffffff);\n
260# output: report(0x00000001);\n
261# output: report(0x00000001);\n
262# output: report(0x00000001);\n
263# output: \n
264# output: report(0x00000001);\n
265# output: report(0x00000002);\n
266# output: report(0x00000003);\n
267# output: report(0x00000000);\n
268# output: report(0x00000000);\n
269# output: report(0x00000000);\n
270# output: \n
271# output: report(0xffffffff);\n
272# output: report(0x0000fffe);\n
273# output: report(0xfffffffd);\n
274# output: report(0x00000001);\n
275# output: report(0x00000000);\n
276# output: report(0x00000000);\n
277# output: \n
278# output: report(0x7fff8000);\n
279# output: report(0x00007fff);\n
280# output: report(0x7fffffff);\n
281# output: report(0x00000000);\n
282# output: report(0x00000000);\n
283# output: report(0x00000000);\n
284# output: \n
285# output: report(0x7fff8000);\n
286# output: report(0x00007fff);\n
287# output: report(0x80000000);\n
288# output: report(0x00000000);\n
289# output: report(0x00000001);\n
290# output: report(0x00000000);\n
291# output: \n
292# output: report(0x7fffc000);\n
293# output: report(0x00004000);\n
294# output: report(0x80000000);\n
295# output: report(0x00000000);\n
296# output: report(0x00000001);\n
297# output: report(0x00000000);\n
298# output: \n
299# output: report(0xffffffff);\n
300# output: report(0x00000000);\n
301# output: report(0x00000000);\n
302# output: report(0x00000001);\n
303# output: report(0x00000000);\n
304# output: report(0x00000000);\n
305# output: \n
306# output: report(0x00000000);\n
307# output: report(0x0000ffff);\n
308# output: report(0x00000000);\n
309# output: report(0x00000001);\n
310# output: report(0x00000000);\n
311# output: report(0x00000000);\n
312# output: \n
313# output: report(0x80008000);\n
314# output: report(0x00008000);\n
315# output: report(0x80000000);\n
316# output: report(0x00000001);\n
317# output: report(0x00000000);\n
318# output: report(0x00000000);\n
319# output: \n
320# output: report(0x80007fff);\n
321# output: report(0x00008000);\n
322# output: report(0x80000000);\n
323# output: report(0x00000001);\n
324# output: report(0x00000000);\n
325# output: report(0x00000000);\n
326# output: \n
327# output: report(0x80007fff);\n
328# output: report(0x00008000);\n
329# output: report(0x7fffffff);\n
330# output: report(0x00000001);\n
331# output: report(0x00000001);\n
332# output: report(0x00000000);\n
333# output: \n
334# output: report(0x7fffc000);\n
335# output: report(0x00004000);\n
336# output: report(0x80000000);\n
337# output: report(0x00000000);\n
338# output: report(0x00000001);\n
339# output: report(0x00000001);\n
340# output: \n
341# output: report(0x7fffc000);\n
342# output: report(0x00003fff);\n
343# output: report(0x80000000);\n
344# output: report(0x00000000);\n
345# output: report(0x00000001);\n
346# output: report(0x00000001);\n
347# output: \n
348# output: report(0xffffffff);\n
349# output: report(0x0000fffe);\n
350# output: report(0xfffffffd);\n
351# output: report(0x00000001);\n
352# output: report(0x00000000);\n
353# output: report(0x00000000);\n
354# output: \n
355# output: report(0x00000000);\n
356# output: report(0x0000ffff);\n
357# output: report(0x00000000);\n
358# output: report(0x00000001);\n
359# output: report(0x00000000);\n
360# output: report(0x00000000);\n
361# output: \n
362# output: report(0x80007fff);\n
363# output: report(0x00008000);\n
364# output: report(0x7fffffff);\n
365# output: report(0x00000001);\n
366# output: report(0x00000001);\n
367# output: report(0x00000001);\n
368# output: \n
369# output: exit(0)\n
370
371#include "or1k-asm-test-helpers.h"
372
373 STANDARD_TEST_ENVIRONMENT
374
375 .section .exception_vectors
376
377 /* Range exception. */
378 .org 0xb00
379
380 /* The handling is a bit dubious at present. We just patch the
381 instruction with l.nop and restart. This will go wrong in branch
382 delay slots. But we don't have those in this test. */
383 l.addi r1, r1, -EXCEPTION_STACK_SKIP_SIZE
384 PUSH r2
385 PUSH r3
386 /* Save the address of the instruction that caused the problem. */
387 MOVE_FROM_SPR r2, SPR_EPCR_BASE
388 LOAD_IMMEDIATE r3, 0x15000000 /* Opcode for l.nop */
389 l.sw 0(r2), r3
390 POP r3
391 POP r2
392 l.addi r1, r1, EXCEPTION_STACK_SKIP_SIZE
393 l.rfe
394
395 .section .text
396start_tests:
397 PUSH LINK_REGISTER_R9
398
399 /* Test l.add */
400
401 /* Add two small positive numbers */
402 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, 1, 2
403
404 /* The carry flag should be ignored. */
405 TEST_INST_FF_I32_I32 SPR_SR_CY, SPR_SR_OV, l.add, 1, 2
406
407 /* Add two small negative numbers, which should set the carry flag
408 but not the overflow flag. */
409 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, -1, -2
410
411 /* Add two quite large positive numbers. Should set neither the
412 overflow nor the carry flag. */
413 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, 0x40000000, \
414 0x3fffffff
415
416 /* Add two large positive numbers. Should set the overflow, but
417 not the carry flag. */
418 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, 0x40000000, \
419 0x40000000
420
421 /* Add two quite large negative numbers. Should set the carry, but
422 not the overflow flag. */
423 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, -1073741824, \
424 -1073741824 /* -1073741824 = 0xC0000000 */
425
426 /* Add two large negative numbers. Should set both the overflow
427 and carry flags. */
428 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, 0xbfffffff, \
429 0xbfffffff
430
431 /* Check that range exceptions are triggered. */
432
433 SET_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
434
435 /* Check that an overflow alone causes a RANGE Exception. */
436 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, 0x40000000, \
437 0x40000000
438
439 /* Check that a carry alone does not cause a RANGE Exception. */
440 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, 0xffffffff, \
441 0xfffffffe
442
443 /* Check that carry and overflow together cause an exception. */
444 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.add, 0xbfffffff, \
445 0xbfffffff
446
447 CLEAR_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
448
449 /* Test l.addc */
450
451 /* Add two small positive numbers */
452 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, 1, 2
453
454 /* Add two small negative numbers. Sets the carry flag but not the
455 overflow flag. */
456 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, -1, -2
457
458 /* Add two quite large positive numbers. Should set neither the
459 overflow nor the carry flag. */
460 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, 0x40000000, \
461 0x3fffffff
462
463 /* Add two quite large positive numbers with a carry in. Should
464 set the overflow but not the carry flag. */
465 TEST_INST_FF_I32_I32 SPR_SR_CY, SPR_SR_OV, l.addc, 0x40000000, \
466 0x3fffffff
467
468 /* Add two large positive numbers. Should set the overflow, but
469 not the carry flag. */
470 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, 0x40000000, \
471 0x40000000
472
473 /* Add the largest unsigned value to zero with a carry. This
474 potentially can break a simplistic test for carry that does not
475 consider the carry flag properly. Do it both ways around. */
476 TEST_INST_FF_I32_I32 SPR_SR_CY, SPR_SR_OV, l.addc, -1, 0
477 TEST_INST_FF_I32_I32 SPR_SR_CY, SPR_SR_OV, l.addc, 0, -1
478
479 /* Add two quite large negative numbers. Should set the carry, but
480 not the overflow flag. Here -1073741824 is 0xC0000000. */
481 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, -1073741824, \
482 -1073741824
483
484 /* Add two quite large negative numbers that would overflow, with a
485 carry that just avoids the overflow. Should set the carry, but
486 not the overflow flag. Here -1073741824 is 0xC0000000 and
487 -1073741825 is 0xBFFFFFFF. */
488 TEST_INST_FF_I32_I32 SPR_SR_CY, SPR_SR_OV, l.addc, -1073741824, \
489 -1073741825
490
491 /* Add two large negative numbers. Should set both the overflow
492 and carry flags. */
493 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, -1073741825, \
494 -1073741825
495
496 /* Check that range exceptions are triggered. */
497
498 SET_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
499
500 /* Check that an overflow alone causes a RANGE Exception, even when
501 it is the carry that causes the overflow. */
502 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, 0x40000000, \
503 0x40000000
504 TEST_INST_FF_I32_I32 SPR_SR_CY, SPR_SR_OV, l.addc, 0x40000000, \
505 0x3fffffff
506
507 /* Check that a carry alone does not cause a RANGE Exception, even
508 when it is the carry that causes the overflow. */
509 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, 0xffffffff, \
510 0xfffffffe
511 TEST_INST_FF_I32_I32 SPR_SR_CY, SPR_SR_OV, l.addc, 0x00000000, \
512 0xffffffff
513
514 /* Check that carry and overflow together cause an exception. */
515 TEST_INST_FF_I32_I32 0, SPR_SR_CY | SPR_SR_OV, l.addc, 0xbfffffff, \
516 0xbfffffff
517
518 CLEAR_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
519
520 /* Test l.addi */
521
522 /* Add two small positive numbers */
523 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 1, 2
524
525 /* Check carry in is ignored. */
526 TEST_INST_FF_I32_I16 SPR_SR_CY, SPR_SR_OV, l.addi, 1, 2
527
528 /* Add two small negative numbers. Sets the carry flag but not the
529 overflow flag. */
530 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 0xffffffff, \
531 0xfffe
532
533 /* Add two quite large positive numbers. Should set neither the
534 overflow nor the carry flag. */
535 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 0x7fff8000, \
536 0x7fff
537
538 /* Add two large positive numbers. Should set the overflow, but
539 not the carry flag. */
540 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 0x7fffc000, \
541 0x4000
542
543 /* Add two quite large negative numbers. Should set the carry, but
544 not the overflow flag. */
545 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 0x80008000, \
546 0x8000
547
548 /* Add two large negative numbers. Should set both the overflow
549 and carry flags. */
550 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 0x80007fff, \
551 0x8000
552
553 /* Check that range exceptions are triggered. */
554
555 SET_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
556
557 /* Check that an overflow alone causes a RANGE Exception. */
558 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 0x7fffc000, \
559 0x4000
560
561 /* Check that a carry alone does not cause a RANGE Exception. */
562 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 0xffffffff, \
563 0xfffe
564
565 /* Check that carry and overflow together cause an exception. */
566 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addi, 0x80007fff, \
567 0x8000
568
569 CLEAR_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
570
571 /* Test l.addi */
572
573 /* Add two small positive numbers */
574 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 1, 2
575
576 /* Add two small negative numbers. Sets the carry flag but not the
577 overflow flag. */
578 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 0xffffffff, \
579 0xfffe
580
581 /* Add two quite large positive numbers. Should set neither the
582 overflow nor the carry flag. */
583 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 0x7fff8000, \
584 0x7fff
585
586 /* Add two quite large positive numbers with a carry in. Should
587 set the overflow but not the carry flag. */
588 TEST_INST_FF_I32_I16 SPR_SR_CY, SPR_SR_OV, l.addic, 0x7fff8000, 0x7fff
589
590 /* Add two large positive numbers. Should set the overflow, but
591 not the carry flag. */
592 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 0x7fffc000, \
593 0x4000
594
595 /* Add the largest unsigned value to zero with a carry. This
596 potentially can break a simplistic test for carry that does not
597 consider the carry flag properly. Do it both ways around. */
598 TEST_INST_FF_I32_I16 SPR_SR_CY, SPR_SR_OV, l.addic, 0xffffffff, 0x0000
599 TEST_INST_FF_I32_I16 SPR_SR_CY, SPR_SR_OV, l.addic, 0x00000000, 0xffff
600
601 /* Add two quite large negative numbers. Should set the carry, but
602 not the overflow flag. */
603 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 0x80008000, \
604 0x8000
605
606 /* Add two quite large negative numbers that would overflow, with a
607 carry that just avoids the overflow. This should set the carry,
608 but not the overflow flag. */
609 TEST_INST_FF_I32_I16 SPR_SR_CY, SPR_SR_OV, l.addic, 0x80007fff, 0x8000
610
611 /* Add two large negative numbers. Should set both the overflow
612 and carry flags. */
613 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 0x80007fff, \
614 0x8000
615
616 /* Check that range exceptions are triggered. */
617
618 SET_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
619
620 /* Check that an overflow alone causes a RANGE Exception, even when
621 it is the carry that causes the overflow. */
622 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 0x7fffc000, \
623 0x4000
624 TEST_INST_FF_I32_I16 SPR_SR_CY, SPR_SR_OV, l.addic, 0x7fffc000, 0x3fff
625
626 /* Check that a carry alone does not cause a RANGE Exception, even
627 when it is the carry that causes the overflow. */
628 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 0xffffffff, \
629 0xfffe
630 TEST_INST_FF_I32_I16 SPR_SR_CY, SPR_SR_OV, l.addic, 0x00000000, 0xffff
631
632 /* Check that carry and overflow together cause an exception. */
633 TEST_INST_FF_I32_I16 0, SPR_SR_CY | SPR_SR_OV, l.addic, 0x80007fff, \
634 0x8000
635
636 CLEAR_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
637
638 POP LINK_REGISTER_R9
639 RETURN_TO_LINK_REGISTER_R9
This page took 0.129893 seconds and 4 git commands to generate.