OSDN Git Service

PR testsuite/41288
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / dfp / pr39034.c
1 /* { dg-do run } */
2 /* { dg-options "-O" } */
3
4 /* DFP TR 24732 == WG14 / N1176, N1312 */
5 /* Based on a test from Fred Tydeman.  */
6
7 #include "dfp-dbg.h"
8
9 /* Test runtime computations.  */
10
11 void
12 runtime32 (void)
13 {
14   volatile float v1 = 28.f, v2 = 3.f, v3 = 9.f, v4 = 31.f, v5 = 3.f, v6 = 10.f;
15   float      b32 = (float)((v1/v2-v3) - (v4/v5-v6));
16   _Decimal32 d32 = (float)((v1/v2-v3) - (v4/v5-v6));
17
18   if (b32)
19     FAILURE
20   if (d32)
21     FAILURE
22 }
23
24 void
25 runtime64 (void)
26 {
27   volatile double v1 = 28., v2 = 3., v3 = 9., v4 = 31., v5 = 3., v6 = 10.;
28   double     b64 = (double)((v1/v2-v3) - (v4/v5-v6));
29   _Decimal64 d64 = (double)((v1/v2-v3) - (v4/v5-v6));
30
31   if (b64)
32     FAILURE
33   if (d64)
34     FAILURE
35 }
36
37 void
38 runtime128 (void)
39 {
40   volatile long double v1 = 28.l, v2 = 3.l, v3 = 9.l,
41                        v4 = 31.l, v5 = 3.l, v6 = 10.l;
42   long double b128 = (long double)((v1/v2-v3) - (v4/v5-v6));
43   _Decimal128 d128 = (long double)((v1/v2-v3) - (v4/v5-v6));
44
45   if (b128)
46     FAILURE
47   if (d128)
48     FAILURE
49 }
50
51 /* Test constant folding.  */
52
53 void
54 fold32 (void)
55 {
56   double     d32 = (float)((28.f/3.f-9.f) - (31.f/3.f-10.f));
57   _Decimal32 b32 = (float)((28.f/3.f-9.f) - (31.f/3.f-10.f));
58
59   if (b32)
60     FAILURE
61   if (d32)
62     FAILURE
63 }
64
65 void
66 fold64 (void)
67 {
68   double     b64 = (double)((28./3.-9.) - (31./3.-10.));
69   _Decimal64 d64 = (double)((28./3.-9.) - (31./3.-10.));
70
71   if (b64)
72     FAILURE
73   if (d64)
74     FAILURE
75 }
76
77 void
78 fold128 (void)
79 {
80   long double b128 = (long double)((28./3.-9.) - (31./3.-10.));
81   _Decimal128 d128 = (long double)((28./3.-9.) - (31./3.-10.));
82
83   if (b128)
84     FAILURE
85   if (d128)
86     FAILURE
87 }
88
89 int
90 main ()
91 {
92   runtime32 ();
93   runtime64 ();
94   runtime128 ();
95   fold32 ();
96   fold64 ();
97   fold128 ();
98
99   FINISH
100 }