1 /* { dg-do run { target powerpc*-*-darwin* } } */
2 /* { dg-options "" } */
3 /* No options so 'long long' can be used. */
7 typedef unsigned long long uint64_t;
8 typedef uint64_t ldbits[2];
21 /* Test of values that add to near +Inf. */
22 { { 0x7FEFFFFFFFFFFFFFLL, 0xFC88000000000000LL },
23 { 0x7C94000000000000LL, 0x0000000000000000LL },
24 { 0x7FEFFFFFFFFFFFFFLL, 0x7C80000000000000LL } },
25 { { 0x7FEFFFFFFFFFFFFFLL, 0x7C8FFFFFFFFFFFFFLL },
26 { 0x792FFFFFFFFFFFFFLL, 0x0000000000000000LL },
27 { 0x7FEFFFFFFFFFFFFFLL, 0x7C8FFFFFFFFFFFFFLL } },
28 { { 0x7FEFFFFFFFFFFFFFLL, 0x7C8FFFFFFFFFFFFFLL },
29 { 0x7930000000000000LL, 0xF5DFFFFFFFFFFFFFLL },
30 /* correct result is: { 0x7FEFFFFFFFFFFFFFLL, 0x7C8FFFFFFFFFFFFFLL } */
31 { 0x7FF0000000000000LL, 0x0000000000000000LL } },
32 /* Test of values that add to +Inf. */
33 { { 0x7FEFFFFFFFFFFFFFLL, 0x7C8FFFFFFFFFFFFFLL },
34 { 0x7930000000000000LL, 0x0000000000000000LL },
35 { 0x7FF0000000000000LL, 0x0000000000000000LL } },
36 /* Tests of Inf addition. */
37 { { 0x7FF0000000000000LL, 0x0000000000000000LL },
38 { 0x0000000000000000LL, 0x0000000000000000LL },
39 { 0x7FF0000000000000LL, 0x0000000000000000LL } },
40 { { 0x7FF0000000000000LL, 0x0000000000000000LL },
41 { 0x7FF0000000000000LL, 0x0000000000000000LL },
42 { 0x7FF0000000000000LL, 0x0000000000000000LL } },
43 /* Test of Inf addition producing NaN. */
44 { { 0x7FF0000000000000LL, 0x0000000000000000LL },
45 { 0xFFF0000000000000LL, 0x0000000000000000LL },
46 { 0x7FF8000000000000LL, 0x0000000000000000LL } },
47 /* Tests of NaN addition. */
48 { { 0x7FF8000000000000LL, 0x0000000000000000LL },
49 { 0x0000000000000000LL, 0x0000000000000000LL },
50 { 0x7FF8000000000000LL, 0x7FF8000000000000LL } },
51 { { 0x7FF8000000000000LL, 0x0000000000000000LL },
52 { 0x7FF0000000000000LL, 0x0000000000000000LL },
53 { 0x7FF8000000000000LL, 0x7FF8000000000000LL } },
54 /* Addition of positive integers, with interesting rounding properties. */
55 { { 0x4690000000000000LL, 0x4330000000000000LL },
56 { 0x4650000000000009LL, 0xC2FFFFFFFFFFFFF2LL },
57 /* correct result is: { 0x4691000000000001LL, 0xC32C000000000000LL } */
58 { 0x4691000000000001LL, 0xc32bfffffffffffeLL } },
59 { { 0x4690000000000000LL, 0x4330000000000000LL },
60 { 0x4650000000000008LL, 0x42F0000000000010LL },
61 { 0x4691000000000001LL, 0xC32E000000000000LL } },
62 { { 0x469FFFFFFFFFFFFFLL, 0x433FFFFFFFFFFFFFLL },
63 { 0x4340000000000000LL, 0x3FF0000000000000LL },
64 { 0x46A0000000000000LL, 0x0000000000000000LL } },
65 { { 0x469FFFFFFFFFFFFFLL, 0x433FFFFFFFFFFFFFLL },
66 { 0x4340000000000000LL, 0x0000000000000000LL },
67 { 0x46A0000000000000LL, 0xBFF0000000000000LL } },
68 /* Subtraction of integers, with cancellation. */
69 { { 0x4690000000000000LL, 0x4330000000000000LL },
70 { 0xC690000000000000LL, 0xC330000000000000LL },
71 { 0x0000000000000000LL, 0x0000000000000000LL } },
72 { { 0x4690000000000000LL, 0x4330000000000000LL },
73 { 0xC330000000000000LL, 0x0000000000000000LL },
74 { 0x4690000000000000LL, 0x0000000000000000LL } },
75 { { 0x4690000000000000LL, 0x4330000000000000LL },
76 { 0xC330000000000000LL, 0x3FA0000000000000LL },
77 { 0x4690000000000000LL, 0x3FA0000000000000LL } },
78 { { 0x4690000000000000LL, 0x4330000000000000LL },
79 { 0xC690000000000000LL, 0x3FA0000000000000LL },
80 /* correct result is: { 0x4330000000000000LL, 0x3FA0000000000000LL } */
81 { 0x4330000000000000LL, 0x0000000000000000LL } }
87 run_single_tests (void)
90 for (i = 0; i < sizeof (single_tests) / sizeof (single_tests[0]); i++)
92 union ldu a, b, result, expected;
93 memcpy (a.lb, single_tests[i].a, sizeof (ldbits));
94 memcpy (b.lb, single_tests[i].b, sizeof (ldbits));
95 memcpy (expected.lb, single_tests[i].result, sizeof (ldbits));
96 result.ld = a.ld + b.ld;
97 if (memcmp (result.lb, expected.lb,
98 result.ld == result.ld ? sizeof (ldbits) : sizeof (double))
101 printf ("FAIL: %016llx %016llx + %016llx %016llx\n",
102 a.lb[0], a.lb[1], b.lb[0], b.lb[1]);
103 printf (" = %016llx %016llx not %016llx %016llx\n",
104 result.lb[0], result.lb[1], expected.lb[0], expected.lb[1]);