From c4d17461e062e730fca4076dd47a2733b3914c51 Mon Sep 17 00:00:00 2001 From: Stefan Liebler Date: Mon, 18 Jan 2016 12:48:06 +0100 Subject: S/390: Do not raise inexact exception in lrint/lround. [BZ #19486] I get some math test-failures on s390 for float/double/ldouble for various lrint/lround functions like: lrint (0x1p64): Exception "Inexact" set lrint (-0x1p64): Exception "Inexact" set lround (0x1p64): Exception "Inexact" set lround (-0x1p64): Exception "Inexact" set ... GCC emits "convert to fixed" instructions for casting floating point values to integer values. These instructions raise invalid and inexact exceptions if the floating point value exceeds the integer type ranges. This patch enables the various FIX_DBL_LONG_CONVERT_OVERFLOW macros in order to avoid a cast from floating point to integer type and raise the invalid exception with feraiseexcept. The ldbl-128 rint/round functions are now using the same logic. ChangeLog: [BZ #19486] * sysdeps/s390/fix-fp-int-convert-overflow.h: New File. * sysdeps/generic/fix-fp-int-convert-overflow.h (FIX_LDBL_LONG_CONVERT_OVERFLOW, FIX_LDBL_LLONG_CONVERT_OVERFLOW): New define. * sysdeps/arm/fix-fp-int-convert-overflow.h: Likewise. * sysdeps/mips/mips32/fpu/fix-fp-int-convert-overflow.h: Likewise. * sysdeps/ieee754/ldbl-128/s_lrintl.c (__lrintl): Avoid conversions to long int where inexact exceptions could be raised. * sysdeps/ieee754/ldbl-128/s_lroundl.c (__lroundl): Likewise. * sysdeps/ieee754/ldbl-128/s_llrintl.c (__llrintl): Avoid conversions to long long int where inexact exceptions could be raised. * sysdeps/ieee754/ldbl-128/s_llroundl.c (__llroundl): Likewise. --- ChangeLog | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'ChangeLog') diff --git a/ChangeLog b/ChangeLog index eaadfbaae8..d42bb6d0e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2016-01-15 Stefan Liebler + + [BZ #19486] + * sysdeps/s390/fix-fp-int-convert-overflow.h: New File. + * sysdeps/generic/fix-fp-int-convert-overflow.h + (FIX_LDBL_LONG_CONVERT_OVERFLOW, + FIX_LDBL_LLONG_CONVERT_OVERFLOW): New define. + * sysdeps/arm/fix-fp-int-convert-overflow.h: Likewise. + * sysdeps/mips/mips32/fpu/fix-fp-int-convert-overflow.h: + Likewise. + * sysdeps/ieee754/ldbl-128/s_lrintl.c (__lrintl): + Avoid conversions to long int where inexact exceptions + could be raised. + * sysdeps/ieee754/ldbl-128/s_lroundl.c (__lroundl): + Likewise. + * sysdeps/ieee754/ldbl-128/s_llrintl.c (__llrintl): + Avoid conversions to long long int where inexact exceptions + could be raised. + * sysdeps/ieee754/ldbl-128/s_llroundl.c (__llroundl): + Likewise. + 2016-01-17 Mike Frysinger * configure.ac: Rewrite error comment and use AC_MSG_ERROR. -- cgit v1.2.3