GNU C Library master sources branch master updated. glibc-2.22-337-g119d073

jsm28@sourceware.org jsm28@sourceware.org
Wed Oct 7 16:12:00 GMT 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  119d073e334e9889a3fd904b333cd13d8217bc58 (commit)
      from  7d6f9f74c8292d63cc3b574eb84919c54946e679 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=119d073e334e9889a3fd904b333cd13d8217bc58

commit 119d073e334e9889a3fd904b333cd13d8217bc58
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Wed Oct 7 16:10:59 2015 +0000

    Fix ldbl-128 lrintl, lroundl missing exceptions for 32-bit long (bug 19085).
    
    The ldbl-128 implementations of lrintl and lroundl miss "invalid"
    exceptions on systems with 32-bit long for arguments that overflow
    long but have exponent below 48.  This patch fixes this by rearranging
    the sequence of tests in the code so the exponent < 48 case is only
    used for exponents that don't overflow long.
    
    Tested for mips64 (n32 and n64).
    
    	[BZ #19085]
    	* sysdeps/ieee754/ldbl-128/s_lrintl.c (__lrintl): Move test for
    	exponent below 48 inside case for non-overflowing exponent.
    	* sysdeps/ieee754/ldbl-128/s_lroundl.c (__lroundl): Likewise.

diff --git a/ChangeLog b/ChangeLog
index e1761b9..1f461c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-10-07  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #19085]
+	* sysdeps/ieee754/ldbl-128/s_lrintl.c (__lrintl): Move test for
+	exponent below 48 inside case for non-overflowing exponent.
+	* sysdeps/ieee754/ldbl-128/s_lroundl.c (__lroundl): Likewise.
+
 2015-10-07  Florian Weimer  <fweimer@redhat.com>
 
 	* iconvdata/cp737.h (from_idx): Add const.
diff --git a/NEWS b/NEWS
index a0a91b5..30284ba 100644
--- a/NEWS
+++ b/NEWS
@@ -18,7 +18,7 @@ Version 2.23
   18820, 18823, 18824, 18825, 18857, 18863, 18870, 18872, 18873, 18875,
   18887, 18921, 18951, 18952, 18956, 18961, 18966, 18967, 18969, 18970,
   18977, 18980, 18981, 18985, 19003, 19012, 19016, 19018, 19032, 19046,
-  19049, 19050, 19059, 19071, 19076, 19077, 19078, 19079.
+  19049, 19050, 19059, 19071, 19076, 19077, 19078, 19079, 19085.
 
 * The obsolete header <regexp.h> has been removed.  Programs that require
   this header must be updated to use <regex.h> instead.
diff --git a/sysdeps/ieee754/ldbl-128/s_lrintl.c b/sysdeps/ieee754/ldbl-128/s_lrintl.c
index b0e0cfc..d0b0aeb 100644
--- a/sysdeps/ieee754/ldbl-128/s_lrintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_lrintl.c
@@ -45,20 +45,20 @@ __lrintl (long double x)
   i0 &= 0x0000ffffffffffffLL;
   i0 |= 0x0001000000000000LL;
 
-  if (j0 < 48)
+  if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
     {
-      w = two112[sx] + x;
-      t = w - two112[sx];
-      GET_LDOUBLE_WORDS64 (i0, i1, t);
-      j0 = ((i0 >> 48) & 0x7fff) - 0x3fff;
-      i0 &= 0x0000ffffffffffffLL;
-      i0 |= 0x0001000000000000LL;
+      if (j0 < 48)
+	{
+	  w = two112[sx] + x;
+	  t = w - two112[sx];
+	  GET_LDOUBLE_WORDS64 (i0, i1, t);
+	  j0 = ((i0 >> 48) & 0x7fff) - 0x3fff;
+	  i0 &= 0x0000ffffffffffffLL;
+	  i0 |= 0x0001000000000000LL;
 
-      result = (j0 < 0 ? 0 : i0 >> (48 - j0));
-    }
-  else if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
-    {
-      if (j0 >= 112)
+	  result = (j0 < 0 ? 0 : i0 >> (48 - j0));
+	}
+      else if (j0 >= 112)
 	result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112));
       else
 	{
diff --git a/sysdeps/ieee754/ldbl-128/s_lroundl.c b/sysdeps/ieee754/ldbl-128/s_lroundl.c
index 8421609..64b285e 100644
--- a/sysdeps/ieee754/ldbl-128/s_lroundl.c
+++ b/sysdeps/ieee754/ldbl-128/s_lroundl.c
@@ -37,19 +37,19 @@ __lroundl (long double x)
   i0 &= 0x0000ffffffffffffLL;
   i0 |= 0x0001000000000000LL;
 
-  if (j0 < 48)
+  if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
     {
-      if (j0 < 0)
-	return j0 < -1 ? 0 : sign;
-      else
+      if (j0 < 48)
 	{
-	  i0 += 0x0000800000000000LL >> j0;
-	  result = i0 >> (48 - j0);
+	  if (j0 < 0)
+	    return j0 < -1 ? 0 : sign;
+	  else
+	    {
+	      i0 += 0x0000800000000000LL >> j0;
+	      result = i0 >> (48 - j0);
+	    }
 	}
-    }
-  else if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
-    {
-      if (j0 >= 112)
+      else if (j0 >= 112)
 	result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112));
       else
 	{

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                            |    7 +++++++
 NEWS                                 |    2 +-
 sysdeps/ieee754/ldbl-128/s_lrintl.c  |   24 ++++++++++++------------
 sysdeps/ieee754/ldbl-128/s_lroundl.c |   20 ++++++++++----------
 4 files changed, 30 insertions(+), 23 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources



More information about the Glibc-cvs mailing list