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