1 /* Excess precision tests. Test that excess precision is carried
2 through various operations. */
4 /* { dg-options "-O2 -mfpmath=387 -fexcess-precision=standard" } */
8 extern void abort (void);
9 extern void exit (int);
11 volatile float f1
= 1.0f
;
12 volatile float f2
= 0x1.0p
-30f
;
13 volatile float f3
= 0x1.0p
-60f
;
14 volatile double d1
= 1.0;
15 volatile double d2
= 0x1.0p
-30;
16 volatile double d3
= 0x1.0p
-60;
17 volatile float fadd1
= 1.0f
+ 0x1.0p
-30f
;
18 volatile double dadd2
= 1.0 + 0x1.0p
-30 + 0x1.0p
-60;
19 volatile long double ldadd1
= 1.0l + 0x1.0p
-30l;
20 volatile long double ldadd2
= 1.0l + 0x1.0p
-30l + 0x1.0p
-60l;
25 if (f1
+ f2
!= ldadd1
)
27 if (f1
+ f2
+ f3
!= ldadd2
)
29 if (d1
+ d2
!= ldadd1
)
31 if (d1
+ d2
+ d3
!= ldadd2
)
33 if (f1
+ d2
+ f3
!= ldadd2
)
41 if (sizeof(long double) > sizeof(double)) {
42 if ( d1
+ d2
+ d3
== dadd2
)
44 if (!(d1
+ d2
+ d3
> dadd2
))
46 if (!(d1
+ d2
+ d3
>= dadd2
))
50 if ( d1
+ d2
+ d3
!= dadd2
)
52 if ( d1
+ d2
+ d3
< dadd2
)
54 if ( d1
+ d2
+ d3
> dadd2
)
59 volatile long double ldsub1
= 1.0l - 0x1.0p
-30l;
60 volatile long double ldsub2
= 1.0l - 0x1.0p
-30l - 0x1.0p
-60l;
65 if (f1
- f2
!= ldsub1
)
67 if (f1
- f2
- f3
!= ldsub2
)
69 if (d1
- d2
!= ldsub1
)
71 if (d1
- d2
- d3
!= ldsub2
)
73 if (f1
- d2
- f3
!= ldsub2
)
75 if (+(f1
- d2
- f3
) != ldsub2
)
77 if (-(f1
- d2
- f3
) != -ldsub2
)
81 volatile float flt_min
= FLT_MIN
;
82 volatile double dbl_min
= DBL_MIN
;
83 volatile long double flt_min2
= (long double)FLT_MIN
* (long double)FLT_MIN
;
84 volatile long double dbl_min3
= (long double)DBL_MIN
* (long double)DBL_MIN
* (long double)DBL_MIN
;
89 if (flt_min
* flt_min
!= flt_min2
)
91 if (flt_min
* flt_min
== 0)
93 if (flt_min
* flt_min
== 0)
95 if (!(flt_min
* flt_min
))
97 if (dbl_min
* dbl_min
* dbl_min
!= dbl_min3
)
99 if ((long double)(dbl_min
* dbl_min
* dbl_min
) != dbl_min3
)
101 if ((0, dbl_min
* dbl_min
* dbl_min
) != dbl_min3
)
103 if (sizeof(long double) > sizeof(double) ) {
104 if (dbl_min
* dbl_min
* dbl_min
== 0)
106 if ((flt_min
* flt_min
? dbl_min
* dbl_min
* dbl_min
: 0) == 0)
110 if (dbl_min
* dbl_min
* dbl_min
!= 0)
112 if ((flt_min
* flt_min
? dbl_min
* dbl_min
* dbl_min
: 1) != 0)
115 if ((flt_min
* flt_min
? : 0) == 0)
119 volatile float f4
= 0x1.0p100f
;
120 volatile double d4
= 0x1.0p100
;
121 volatile long double flt_div
= 0x1.0p100l
/ (long double) FLT_MIN
;
122 volatile long double dbl_div
= 0x1.0p100l
/ (long double) DBL_MIN
;
127 if (f4
/ flt_min
!= flt_div
)
129 if (d4
/ dbl_min
!= dbl_div
)
133 volatile float f5
= 0x1.0p30
;
138 if ((int)(f1
+ f5
) != 0x40000001)
142 volatile float _Complex f1c
= 1.0f
+ 1.0if;
143 volatile float _Complex f2c
= 0x1.0p
-30f
+ 0x1.0p
-31if;
144 volatile float _Complex f3c
= 0x1.0p
-60f
+ 0x1.0p
-59if;
145 volatile double _Complex d1c
= 1.0 + 1.0i
;
146 volatile double _Complex d2c
= 0x1.0p
-30 + 0x1.0p
-31i
;
147 volatile double _Complex d3c
= 0x1.0p
-60 + 0x1.0p
-59i
;
148 volatile long double _Complex ldadd1c
= 1.0l + 0x1.0p
-30l + 1.0il
+ 0x1.0p
-31il
;
149 volatile long double _Complex ldadd2c
= 1.0l + 0x1.0p
-30l + 0x1.0p
-60l + 1.0il
+ 0x1.0p
-31il
+ 0x1.0p
-59il
;
150 volatile long double _Complex ldadd2cc
= 1.0l + 0x1.0p
-30l + 0x1.0p
-60l - 1.0il
- 0x1.0p
-31il
- 0x1.0p
-59il
;
151 volatile float _Complex flt_minc
= FLT_MIN
;
152 volatile double _Complex dbl_minc
= DBL_MIN
;
153 volatile float _Complex f4c
= 0x1.0p100f
;
154 volatile double _Complex d4c
= 0x1.0p100
;
159 if (f1c
+ f2c
!= ldadd1c
)
161 if (f1c
+ f2c
+ f3c
!= ldadd2c
)
163 if (d1c
+ d2c
!= ldadd1c
)
165 if (d1c
+ d2c
+ d3c
!= ldadd2c
)
167 if (__real__ (f1c
+ f2c
+ f3c
) != ldadd2
)
169 if (__imag__ (d1c
+ d2c
+ d3c
) != __imag__ ldadd2c
)
171 if (~(d1c
+ d2c
+ d3c
) != ldadd2cc
)
173 /* The following call libgcc functions and so would fail unless they
174 call those for long double. */
175 if (flt_minc
* flt_minc
!= flt_min2
)
177 if (dbl_minc
* dbl_minc
* dbl_minc
!= dbl_min3
)
179 if (f4c
/ flt_minc
!= flt_div
)
181 if (d4c
/ dbl_minc
!= dbl_div
)
183 if (f4
/ flt_minc
!= flt_div
)
185 if (d4
/ dbl_minc
!= dbl_div
)
187 if (f4c
/ flt_min
!= flt_div
)
189 if (d4c
/ dbl_min
!= dbl_div
)