This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.15-1063-g25dbcb2


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  25dbcb277a9dea5f241c0b888a30b9341310d941 (commit)
      from  d81dcb356909937b0c8e9c69ff0be27f51aaa07a (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://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=25dbcb277a9dea5f241c0b888a30b9341310d941

commit 25dbcb277a9dea5f241c0b888a30b9341310d941
Author: Andreas Schwab <schwab@linux-m68k.org>
Date:   Fri May 25 11:57:33 2012 +0200

    Optimize handling of denormals in logb/logbf/logbl

diff --git a/ChangeLog b/ChangeLog
index a4ae965..6831676 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2012-05-26  Andreas Schwab  <schwab@linux-m68k.org>
+
+	* sysdeps/ieee754/dbl-64/s_logb.c (__logb): Optimize
+	handling of denormals.
+	* sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c (__logb): Likewise.
+	* sysdeps/ieee754/flt-32/s_logbf.c (__logbf): Likewise.
+	* sysdeps/ieee754/ldbl-96/s_logbl.c (__logbl): Likewise.
+	* sysdeps/ieee754/ldbl-128/s_logbl.c (__logbl): Likewise.
+	* sysdeps/ieee754/ldbl-128ibm/s_logbl.c (__logbl): Likewise.
+	* sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c (_logb): Likewise.
+	* sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c (_logbl):
+	Likewise.
+
 2012-05-25  Marek Polacek  <polacek@redhat.com>
 
 	[BZ #14152]
diff --git a/sysdeps/ieee754/dbl-64/s_logb.c b/sysdeps/ieee754/dbl-64/s_logb.c
index baa35e1..17aa94b 100644
--- a/sysdeps/ieee754/dbl-64/s_logb.c
+++ b/sysdeps/ieee754/dbl-64/s_logb.c
@@ -34,10 +34,12 @@ __logb (double x)
     {
       /* POSIX specifies that denormal number is treated as
          though it were normalized.  */
-      int m1 = (ix == 0) ? 0 : __builtin_clz (ix);
-      int m2 = (lx == 0) ? 0 : __builtin_clz (lx);
-      int ma = (m1 == 0) ? m2 + 32 : m1;
-      return -1022.0 + (double)(11 - ma);
+      int ma;
+      if (ix == 0)
+	ma = __builtin_clz (lx) + 32;
+      else
+	ma = __builtin_clz (ix);
+      rix -= ma - 12;
     }
   return (double) (rix - 1023);
 }
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c
index 185dd05..40b8888 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c
@@ -36,8 +36,8 @@ __logb (double x)
     return x * x;
   if (__builtin_expect (ex == 0, 0))
     {
-      int m = (ix == 0) ? 0 : __builtin_clzll (ix);
-      return -1022.0 + (double)(11 -m);
+      int m = __builtin_clzll (ix);
+      ex -= m - 12;
     }
   return (double) (ex - 1023);
 }
diff --git a/sysdeps/ieee754/flt-32/s_logbf.c b/sysdeps/ieee754/flt-32/s_logbf.c
index 025c70d..e2b3aaa 100644
--- a/sysdeps/ieee754/flt-32/s_logbf.c
+++ b/sysdeps/ieee754/flt-32/s_logbf.c
@@ -31,8 +31,7 @@ __logbf (float x)
     {
       /* POSIX specifies that denormal number is treated as
          though it were normalized.  */
-      int m = (ix == 0) ? 0 : __builtin_clz (ix);
-      return -126.0 + (float)(8 - m);
+      rix -= __builtin_clz (ix) - 9;
     }
   return (float) (rix - 127);
 }
diff --git a/sysdeps/ieee754/ldbl-128/s_logbl.c b/sysdeps/ieee754/ldbl-128/s_logbl.c
index cf6003e..3ba67b7 100644
--- a/sysdeps/ieee754/ldbl-128/s_logbl.c
+++ b/sysdeps/ieee754/ldbl-128/s_logbl.c
@@ -41,10 +41,12 @@ __logbl (long double x)
     {
       /* POSIX specifies that denormal number is treated as
          though it were normalized.  */
-      int m1 = (hx == 0) ? 0 : __builtin_clzll (hx);
-      int m2 = (lx == 0) ? 0 : __builtin_clzll (lx);
-      int ma = (m1 == 0) ? m2 + 64 : m1;
-      return -16382.0 + (long double)(15 - ma);
+      int ma;
+      if (hx == 0)
+	ma = __builtin_clzll (lx) + 64;
+      else
+	ma = __builtin_clzll (hx);
+      ex -= ma - 16;
     }
   return (long double) (ex - 16383);
 }
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_logbl.c b/sysdeps/ieee754/ldbl-128ibm/s_logbl.c
index 678b6ca..92ce2c1 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_logbl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_logbl.c
@@ -30,7 +30,7 @@ __logbl (long double x)
 
   GET_LDOUBLE_WORDS64 (hx, lx, x);
   hx &= 0x7fffffffffffffffLL;	/* high |x| */
-  if ((hx | (lx & 0x7fffffffffffffffLL)) == 0)
+  if (hx == 0)
     return -1.0 / fabs (x);
   if (hx >= 0x7ff0000000000000LL)
     return x * x;
@@ -38,10 +38,7 @@ __logbl (long double x)
     {
       /* POSIX specifies that denormal number is treated as
          though it were normalized.  */
-      int m1 = (hx == 0) ? 0 : __builtin_clzll (hx);
-      int m2 = (lx == 0) ? 0 : __builtin_clzll (lx);
-      int ma = (m1 == 0) ? m2 + 64 : m1;
-      return -1022.0 + (long double)(11 - ma);
+      rhx -= __builtin_clzll (hx) - 12;
     }
   return (long double) (rhx - 1023);
 }
diff --git a/sysdeps/ieee754/ldbl-96/s_logbl.c b/sysdeps/ieee754/ldbl-96/s_logbl.c
index d8ad4bc..4289be1 100644
--- a/sysdeps/ieee754/ldbl-96/s_logbl.c
+++ b/sysdeps/ieee754/ldbl-96/s_logbl.c
@@ -38,10 +38,12 @@ __logbl (long double x)
     {
       /* POSIX specifies that denormal number is treated as
          though it were normalized.  */
-      int m1 = (ix == 0) ? 0 : __builtin_clz (ix);
-      int m2 = (lx == 0) ? 0 : __builtin_clz (lx);
-      int ma = (m1 == 0) ? m2 + 32 : m1;
-      return -16382.0 - (long double)(ma);
+      int ma;
+      if (ix == 0)
+	ma = __builtin_clz (lx) + 32;
+      else
+	ma = __builtin_clz (ix);
+      es -= ma - 1;
     }
   return (long double) (es - 16383);
 }
diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c b/sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c
index fba4822..87176c3 100644
--- a/sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c
+++ b/sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c
@@ -55,13 +55,14 @@ __logb (double x)
       /* POSIX specifies that denormal numbers are treated as
          though they were normalized.  */
       int32_t lx, ix;
-      int m1, m2, ma;
+      int ma;
 
-      EXTRACT_WORDS (ix , lx, x);
-      m1 = (ix == 0) ? 0 : __builtin_clz (ix);
-      m2 = (lx == 0) ? 0 : __builtin_clz (lx);
-      ma = (m1 == 0) ? m2 + 32 : m1;
-      return -1022.0 + (double)(11 - ma);
+      EXTRACT_WORDS (ix, lx, x);
+      if (ix == 0)
+	ma = __builtin_clz (lx) + 32;
+      else
+	ma = __builtin_clz (ix);
+      return (double) (-1023 - (ma - 12));
     }
   /* Test to avoid logb_downward (0.0) == -0.0.  */
   return ret == -0.0 ? 0.0 : ret;
diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c b/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c
index 03942ca..20c7d4e 100644
--- a/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c
+++ b/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c
@@ -56,14 +56,12 @@ __logbl (long double x)
     return (xh * xh);
   else if (__builtin_expect (ret == two10m1, 0))
     {
+      /* POSIX specifies that denormal number is treated as
+         though it were normalized.  */
       int64_t lx, hx;
-      int m1, m2, ma;
 
       GET_LDOUBLE_WORDS64 (hx, lx, x);
-      m1 = (hx == 0) ? 0 : __builtin_clzll (hx);
-      m2 = (lx == 0) ? 0 : __builtin_clzll (lx);
-      ma = (m1 == 0) ? m2 + 64 : m1;
-      return -1022.0 + (double)(11 - ma);
+      return (long double) (-1023 - (__builtin_clzll (hx) - 12));
     }
   /* Test to avoid logb_downward (0.0) == -0.0.  */
   return ret == -0.0 ? 0.0 : ret;

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

Summary of changes:
 ChangeLog                                      |   13 +++++++++++++
 sysdeps/ieee754/dbl-64/s_logb.c                |   10 ++++++----
 sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c    |    4 ++--
 sysdeps/ieee754/flt-32/s_logbf.c               |    3 +--
 sysdeps/ieee754/ldbl-128/s_logbl.c             |   10 ++++++----
 sysdeps/ieee754/ldbl-128ibm/s_logbl.c          |    7 ++-----
 sysdeps/ieee754/ldbl-96/s_logbl.c              |   10 ++++++----
 sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c  |   13 +++++++------
 sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c |    8 +++-----
 9 files changed, 46 insertions(+), 32 deletions(-)


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]