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 (d1
+ d2
+ d3
== dadd2
)
43 if (!(d1
+ d2
+ d3
> dadd2
))
45 if (!(d1
+ d2
+ d3
>= dadd2
))
49 volatile long double ldsub1
= 1.0l - 0x1.0p
-30l;
50 volatile long double ldsub2
= 1.0l - 0x1.0p
-30l - 0x1.0p
-60l;
55 if (f1
- f2
!= ldsub1
)
57 if (f1
- f2
- f3
!= ldsub2
)
59 if (d1
- d2
!= ldsub1
)
61 if (d1
- d2
- d3
!= ldsub2
)
63 if (f1
- d2
- f3
!= ldsub2
)
65 if (+(f1
- d2
- f3
) != ldsub2
)
67 if (-(f1
- d2
- f3
) != -ldsub2
)
71 volatile float flt_min
= FLT_MIN
;
72 volatile double dbl_min
= DBL_MIN
;
73 volatile long double flt_min2
= (long double)FLT_MIN
* (long double)FLT_MIN
;
74 volatile long double dbl_min3
= (long double)DBL_MIN
* (long double)DBL_MIN
* (long double)DBL_MIN
;
79 if (flt_min
* flt_min
!= flt_min2
)
81 if (flt_min
* flt_min
== 0)
83 if (flt_min
* flt_min
== 0)
85 if (!(flt_min
* flt_min
))
87 if (dbl_min
* dbl_min
* dbl_min
!= dbl_min3
)
89 if ((long double)(dbl_min
* dbl_min
* dbl_min
) != dbl_min3
)
91 if ((0, dbl_min
* dbl_min
* dbl_min
) != dbl_min3
)
93 if (dbl_min
* dbl_min
* dbl_min
== 0)
95 if ((flt_min
* flt_min
? dbl_min
* dbl_min
* dbl_min
: 0) == 0)
97 if ((flt_min
* flt_min
? : 0) == 0)
101 volatile float f4
= 0x1.0p100f
;
102 volatile double d4
= 0x1.0p100
;
103 volatile long double flt_div
= 0x1.0p100l
/ (long double) FLT_MIN
;
104 volatile long double dbl_div
= 0x1.0p100l
/ (long double) DBL_MIN
;
109 if (f4
/ flt_min
!= flt_div
)
111 if (d4
/ dbl_min
!= dbl_div
)
115 volatile float f5
= 0x1.0p30
;
120 if ((int)(f1
+ f5
) != 0x40000001)
124 volatile float _Complex f1c
= 1.0f
+ 1.0if;
125 volatile float _Complex f2c
= 0x1.0p
-30f
+ 0x1.0p
-31if;
126 volatile float _Complex f3c
= 0x1.0p
-60f
+ 0x1.0p
-59if;
127 volatile double _Complex d1c
= 1.0 + 1.0i
;
128 volatile double _Complex d2c
= 0x1.0p
-30 + 0x1.0p
-31i
;
129 volatile double _Complex d3c
= 0x1.0p
-60 + 0x1.0p
-59i
;
130 volatile long double _Complex ldadd1c
= 1.0l + 0x1.0p
-30l + 1.0il
+ 0x1.0p
-31il
;
131 volatile long double _Complex ldadd2c
= 1.0l + 0x1.0p
-30l + 0x1.0p
-60l + 1.0il
+ 0x1.0p
-31il
+ 0x1.0p
-59il
;
132 volatile long double _Complex ldadd2cc
= 1.0l + 0x1.0p
-30l + 0x1.0p
-60l - 1.0il
- 0x1.0p
-31il
- 0x1.0p
-59il
;
133 volatile float _Complex flt_minc
= FLT_MIN
;
134 volatile double _Complex dbl_minc
= DBL_MIN
;
135 volatile float _Complex f4c
= 0x1.0p100f
;
136 volatile double _Complex d4c
= 0x1.0p100
;
141 if (f1c
+ f2c
!= ldadd1c
)
143 if (f1c
+ f2c
+ f3c
!= ldadd2c
)
145 if (d1c
+ d2c
!= ldadd1c
)
147 if (d1c
+ d2c
+ d3c
!= ldadd2c
)
149 if (__real__ (f1c
+ f2c
+ f3c
) != ldadd2
)
151 if (__imag__ (d1c
+ d2c
+ d3c
) != __imag__ ldadd2c
)
153 if (~(d1c
+ d2c
+ d3c
) != ldadd2cc
)
155 /* The following call libgcc functions and so would fail unless they
156 call those for long double. */
157 if (flt_minc
* flt_minc
!= flt_min2
)
159 if (dbl_minc
* dbl_minc
* dbl_minc
!= dbl_min3
)
161 if (f4c
/ flt_minc
!= flt_div
)
163 if (d4c
/ dbl_minc
!= dbl_div
)
165 if (f4
/ flt_minc
!= flt_div
)
167 if (d4
/ dbl_minc
!= dbl_div
)
169 if (f4c
/ flt_min
!= flt_div
)
171 if (d4c
/ dbl_min
!= dbl_div
)