mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-01 10:06:57 +03:00
* soft-fp/op-common.h (FP_TRUNC): Replace raising of FP_EX_INEXACT
with setting the sticky bit. * math/test-misc.c (main): Add more truncation tests. * soft-fp/floatunsidf.c (__floatunsidf): Use DFtype instead of double in the function declaration. * soft-fp/floatundidf.c (__floatundidf): Use DFtype instead of double in the function declaration. * soft-fp/floatunsisf.c (__floatunsisf): Use SFtype instead of float in the function declaration. * soft-fp/floatunsisf.c (__floatunsisf): Use SFtype instead of float in the function declaration. * soft-fp/extended.h (FP_UNPACK_RAW_E): Do not increase X##_e for denormal operands. Do not generate FP_EX_DENORM exception. (FP_UNPACK_RAW_EP): Ditto. (FP_UNPACK_SEMIRAW_E): Use FP_UNPACK_RAW_E instead of undefined _FP_UNPACK_RAW_E. (FP_UNPACK_SEMIRAW_EP): Use FP_UNPACK_RAW_EP instead of undefined _FP_UNPACK_RAW_EP. (FP_PACK_SEMIRAW_E): Use FP_PACK_RAW_E instead of undefined _FP_PACK_RAW_E. (FP_PACK_SEMIRAW_EP): Use FP_PACK_RAW_EP instead of undefined _FP_PACK_RAW_EP. * op-2.h (_FP_FRAC_COPY_2_2): Define as alias to _FP_FRAC_COPY_2. * op-4.h (_FP_FRAC_COPY_2_2): Define as alias to _FP_FRAC_COPY_4. * soft-fp/op-common.h (FP_EXTEND): Do not abort when _FP_EXPBIAS_##dfs == _FP_EXPBIAS_##sfs. Handle denormals for this case. * soft-fp/op-common.h (FP_TRUNC): Ditto. * soft-fp/op-common.h (FP_TRUNC): Replace raising of FP_EX_INEXACT with setting the sticky bit. * math/test-misc.c (main): Add more truncation tests. 2007-04-14 Uros Bizjak <ubizjak@gmail.com> * soft-fp/floatunsidf.c (__floatunsidf): Use DFtype instead of double in the function declaration. * soft-fp/floatundidf.c (__floatundidf): Use DFtype instead of double in the function declaration. * soft-fp/floatunsisf.c (__floatunsisf): Use SFtype instead of float in the function declaration. * soft-fp/floatunsisf.c (__floatunsisf): Use SFtype instead of float in the function declaration. * soft-fp/extended.h (FP_UNPACK_RAW_E): Do not increase X##_e for denormal operands. Do not generate FP_EX_DENORM exception. (FP_UNPACK_RAW_EP): Ditto. (FP_UNPACK_SEMIRAW_E): Use FP_UNPACK_RAW_E instead of undefined _FP_UNPACK_RAW_E. (FP_UNPACK_SEMIRAW_EP): Use FP_UNPACK_RAW_EP instead of undefined _FP_UNPACK_RAW_EP. (FP_PACK_SEMIRAW_E): Use FP_PACK_RAW_E instead of undefined _FP_PACK_RAW_E. (FP_PACK_SEMIRAW_EP): Use FP_PACK_RAW_EP instead of undefined _FP_PACK_RAW_EP. * op-2.h (_FP_FRAC_COPY_2_2): Define as alias to _FP_FRAC_COPY_2. * op-4.h (_FP_FRAC_COPY_2_2): Define as alias to _FP_FRAC_COPY_4. 2007-04-16 Uros Bizjak <ubizjak@gmail.com> Jakub Jelinek <jakub@redhat.com> * soft-fp/op-common.h (FP_EXTEND): Do not abort when _FP_EXPBIAS_##dfs == _FP_EXPBIAS_##sfs. Handle denormals for this case. * soft-fp/op-common.h (FP_TRUNC): Ditto. 2007-05-03 Jakub Jelinek <jakub@redhat.com>
This commit is contained in:
@ -1236,20 +1236,83 @@ main (void)
|
||||
#endif
|
||||
|
||||
#if !defined NO_LONG_DOUBLE && LDBL_MANT_DIG >= DBL_MANT_DIG + 4
|
||||
volatile long double ld5 = nextafter (0.0, 1.0) / 16.0L;
|
||||
volatile double d5;
|
||||
(void) &ld5;
|
||||
int i;
|
||||
for (i = 0; i <= 32; i++)
|
||||
int oldmode = fegetround ();
|
||||
int j;
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
d5 = ld5 * i;
|
||||
(void) &d5;
|
||||
if (d5 != (i <= 8 ? 0 : i < 24 ? 1 : 2) * nextafter (0.0, 1.0))
|
||||
int mode;
|
||||
int i;
|
||||
int k = 0;
|
||||
const char *mstr;
|
||||
switch (j)
|
||||
{
|
||||
printf ("%La incorrectly rounded to %a\n", ld5 * i, d5);
|
||||
result = 1;
|
||||
#ifdef FE_TONEAREST
|
||||
case 0:
|
||||
mode = FE_TONEAREST;
|
||||
mstr = "nearest";
|
||||
k = 8;
|
||||
break;
|
||||
#endif
|
||||
#ifdef FE_DOWNWARD
|
||||
case 1:
|
||||
mode = FE_DOWNWARD;
|
||||
mstr = "-inf";
|
||||
break;
|
||||
#endif
|
||||
#ifdef FE_UPWARD
|
||||
case 2:
|
||||
mode = FE_UPWARD;
|
||||
mstr = "+inf";
|
||||
k = 15;
|
||||
break;
|
||||
#endif
|
||||
#ifdef FE_TOWARDZERO
|
||||
case 3:
|
||||
mode = FE_TOWARDZERO;
|
||||
mstr = "0";
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
volatile long double ld5 = nextafter (0.0, 1.0) / 16.0L;
|
||||
volatile double d5;
|
||||
(void) &ld5;
|
||||
for (i = 0; i <= 32; i++)
|
||||
{
|
||||
if (fesetround (mode))
|
||||
{
|
||||
printf ("failed to set rounding mode to %s\n", mstr);
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
d5 = ld5 * i;
|
||||
(void) &d5;
|
||||
fesetround (oldmode);
|
||||
if (d5 != ((j == 0 && i == 8) ? 0 : (i + k) / 16)
|
||||
* nextafter (0.0, 1.0))
|
||||
{
|
||||
printf ("%La incorrectly rounded to %s as %a\n",
|
||||
ld5 * i, mstr, d5);
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
volatile long double ld7 = nextafterl (0.0L, 1.0L);
|
||||
volatile double d7;
|
||||
(void) &ld7;
|
||||
fesetround (FE_UPWARD);
|
||||
d7 = ld7;
|
||||
(void) &d7;
|
||||
fesetround (oldmode);
|
||||
|
||||
if (d7 != nextafter (0.0, 1.0))
|
||||
{
|
||||
printf ("%La incorrectly rounded upward to %a\n", ld7, d7);
|
||||
result = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
return result;
|
||||
|
Reference in New Issue
Block a user