1 /* Excess precision tests. Test excess precision is removed when
4 /* { dg-options "-O2 -mfpmath=387 -fexcess-precision=standard" } */
9 extern void abort (void);
10 extern void exit (int);
12 volatile float f1
= 1.0f
;
13 volatile float f2
= 0x1.0p
-30f
;
14 volatile float f3
= 0x1.0p
-60f
;
15 volatile double d1
= 1.0;
16 volatile double d2
= 0x1.0p
-30;
17 volatile double d3
= 0x1.0p
-60;
18 volatile double d3d
= 0x1.0p
-52;
19 volatile float fadd1
= 1.0f
+ 0x1.0p
-30f
;
20 volatile double dadd2
= 1.0 + 0x1.0p
-30 + 0x1.0p
-60;
21 volatile double dh
= 0x1.0p
-24;
22 volatile float fha
= 1.0f
+ 0x1.0p
-23f
;
38 /* Verify rounding direct to float without double rounding. */
39 if (sizeof(long double) > sizeof(double) ) {
54 double d
= d1
+ d2
+ d3
;
61 volatile int i1
= 0x40000001;
62 volatile unsigned int u1
= 0x80000001u
;
63 volatile long long ll1
= 0x4000000000000001ll
;
64 volatile unsigned long long ull1
= 0x8000000000000001ull
;
69 if ((float)(f1
+ f2
) != fadd1
)
71 if ((double)(d1
+ d2
+ d3
) != dadd2
)
73 if ((double)(f1
+ f2
+ f3
) != dadd2
)
75 if ((float)i1
!= 0x1.0p30f
)
77 if ((float)u1
!= 0x1.0p31f
)
79 if ((float)ll1
!= 0x1.0p62f
)
81 if ((float)ull1
!= 0x1.0p63f
)
83 if ((double)ll1
!= 0x1.0p62
)
85 if ((double)ull1
!= 0x1.0p63
)
97 check_double (double d
)
104 check_float_nonproto (f
)
112 check_double_nonproto (d
)
120 check_double_va (int i
, ...)
124 if (va_arg (ap
, double) != dadd2
)
132 check_float (f1
+ f2
);
133 check_double (d1
+ d2
+ d3
);
134 check_double (f1
+ f2
+ f3
);
135 check_float_nonproto (f1
+ f2
);
136 check_double_nonproto (d1
+ d2
+ d3
);
137 check_double_nonproto (f1
+ f2
+ f3
);
138 check_double_va (0, d1
+ d2
+ d3
);
139 check_double_va (0, f1
+ f2
+ f3
);
149 return_double1 (void)
155 return_double2 (void)
163 if (return_float () != fadd1
)
165 if (return_double1 () != dadd2
)
167 if (return_double2 () != dadd2
)
171 volatile float flt_min
= FLT_MIN
;
172 volatile double dbl_min
= DBL_MIN
;
173 volatile float flt_max
= FLT_MAX
;
174 volatile double dbl_max
= DBL_MAX
;
179 /* Classification macros convert to the semantic type. signbit and
180 comparison macros do not. */
181 if (!__builtin_isinf (flt_max
* flt_max
))
183 if (!__builtin_isinf (dbl_max
* dbl_max
))
185 if (__builtin_isnormal (flt_max
* flt_max
))
187 if (__builtin_isnormal (dbl_max
* dbl_max
))
189 if (__builtin_isfinite (flt_max
* flt_max
))
191 if (__builtin_isfinite (dbl_max
* dbl_max
))
193 if (!__builtin_isgreater (flt_min
* flt_min
, 0.0f
))
195 if (!__builtin_isgreaterequal (flt_min
* flt_min
, 0.0f
))
197 if (!__builtin_isless (0.0f
, flt_min
* flt_min
))
199 if (__builtin_islessequal (flt_min
* flt_min
, 0.0f
))
201 if (!__builtin_islessgreater (flt_min
* flt_min
, 0.0f
))
203 if (!__builtin_isgreaterequal (dbl_min
* dbl_min
, 0.0))
205 if (sizeof(long double) > sizeof(double) ) {
206 if (!__builtin_isgreater (dbl_min
* dbl_min
, 0.0))
208 if (!__builtin_isless (0.0, dbl_min
* dbl_min
))
210 if (__builtin_islessequal (dbl_min
* dbl_min
, 0.0))
212 if (!__builtin_islessgreater (dbl_min
* dbl_min
, 0.0))
216 if (__builtin_isgreater (dbl_min
* dbl_min
, 0.0))
218 if (__builtin_isless (0.0, dbl_min
* dbl_min
))
220 if (!__builtin_islessequal (dbl_min
* dbl_min
, 0.0))
222 if (__builtin_islessgreater (dbl_min
* dbl_min
, 0.0))