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-81-ga47a831


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  a47a831ad82735bd19cfa1d0b441c1bd62b2a29a (commit)
      from  8898f02074fc1c6a461ee19a817b482b9ffca639 (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=a47a831ad82735bd19cfa1d0b441c1bd62b2a29a

commit a47a831ad82735bd19cfa1d0b441c1bd62b2a29a
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Tue Jan 10 20:52:29 2012 -0500

    Optimize ldexp and scalbn

diff --git a/ChangeLog b/ChangeLog
index 666a9ee..b137d4e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-01-10  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/ieee754/dbl-64/s_scalbn.c: Add branch prediction.
+	* sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c: Likewise.
+	* sysdeps/ieee754/flt-32/s_scalbnf.c: Likewise.
+	* sysdeps/ieee754/ldbl-96/s_scalbnl.c: Likewise.
+
+	* math/bits/math-finite.h: Add ldexp support.
+
 2012-01-10  Marek Polacek  <polacek@redhat.com>
 
 	* locale/programs/localedef.h (show_archive_content): Add noreturn
diff --git a/math/bits/math-finite.h b/math/bits/math-finite.h
index dcf427c..00e07a1 100644
--- a/math/bits/math-finite.h
+++ b/math/bits/math-finite.h
@@ -1,5 +1,5 @@
 /* Entry points to finite-math-only compiler runs.
-   Copyright (C) 2011 Free Software Foundation, Inc.
+   Copyright (C) 2011, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -261,6 +261,13 @@ extern long double __REDIRECT_NTH (log2l, (long double), __log2l_finite);
 # endif
 #endif
 
+/* ldexp.  */
+extern double __REDIRECT_NTH (ldexp, (double, int), scalbn);
+extern float __REDIRECT_NTH (ldexpf, (float, int), scalbnf);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (ldexpl, (long double, int), scalbnl);
+#endif
+
 /* pow.  */
 extern double __REDIRECT_NTH (pow, (double, double), __pow_finite);
 extern float __REDIRECT_NTH (powf, (float, float), __powf_finite);
diff --git a/sysdeps/ieee754/dbl-64/s_scalbn.c b/sysdeps/ieee754/dbl-64/s_scalbn.c
index 3dbfe8f..1e67dbe 100644
--- a/sysdeps/ieee754/dbl-64/s_scalbn.c
+++ b/sysdeps/ieee754/dbl-64/s_scalbn.c
@@ -1,4 +1,3 @@
-/* @(#)s_scalbn.c 5.1 93/09/24 */
 /*
  * ====================================================
  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
@@ -10,10 +9,6 @@
  * ====================================================
  */
 
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: s_scalbn.c,v 1.8 1995/05/10 20:48:08 jtc Exp $";
-#endif
-
 /*
  * scalbn (double x, int n)
  * scalbn(x,n) returns x* 2**n  computed by  exponent
@@ -24,44 +19,37 @@ static char rcsid[] = "$NetBSD: s_scalbn.c,v 1.8 1995/05/10 20:48:08 jtc Exp $";
 #include "math.h"
 #include "math_private.h"
 
-#ifdef __STDC__
 static const double
-#else
-static double
-#endif
 two54   =  1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
 twom54  =  5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
 huge   = 1.0e+300,
 tiny   = 1.0e-300;
 
-#ifdef __STDC__
-	double __scalbn (double x, int n)
-#else
-	double __scalbn (x,n)
-	double x; int n;
-#endif
+double
+__scalbn (double x, int n)
 {
 	int32_t k,hx,lx;
 	EXTRACT_WORDS(hx,lx,x);
-        k = (hx&0x7ff00000)>>20;		/* extract exponent */
-        if (k==0) {				/* 0 or subnormal x */
-            if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
+	k = (hx&0x7ff00000)>>20;		/* extract exponent */
+	if (__builtin_expect(k==0, 0)) {	/* 0 or subnormal x */
+	    if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
 	    x *= two54;
 	    GET_HIGH_WORD(hx,x);
 	    k = ((hx&0x7ff00000)>>20) - 54;
 	    }
-        if (k==0x7ff) return x+x;		/* NaN or Inf */
-        k = k+n;
-        if (n> 50000 || k >  0x7fe)
+	if (__builtin_expect(k==0x7ff, 0)) return x+x;	/* NaN or Inf */
+	k = k+n;
+	if (__builtin_expect(n> 50000 || k >  0x7fe, 0))
 	  return huge*__copysign(huge,x); /* overflow  */
-	if (n< -50000) return tiny*__copysign(tiny,x); /*underflow*/
-        if (k > 0) 				/* normal result */
+	if (__builtin_expect(n< -50000, 0))
+	  return tiny*__copysign(tiny,x); /*underflow*/
+	if (__builtin_expect(k > 0, 1))		/* normal result */
 	    {SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
-        if (k <= -54)
+	if (k <= -54)
 	  return tiny*__copysign(tiny,x); 	/*underflow*/
-        k += 54;				/* subnormal result */
+	k += 54;				/* subnormal result */
 	SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20));
-        return x*twom54;
+	return x*twom54;
 }
 weak_alias (__scalbn, scalbn)
 #ifdef NO_LONG_DOUBLE
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c
index 25cf3b1..7f0e21f 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c
@@ -1,4 +1,3 @@
-/* @(#)s_scalbn.c 5.1 93/09/24 */
 /*
  * ====================================================
  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
@@ -20,39 +19,32 @@
 #include "math.h"
 #include "math_private.h"
 
-#ifdef __STDC__
 static const double
-#else
-static double
-#endif
 two54   =  1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
 twom54  =  5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
 huge   = 1.0e+300,
 tiny   = 1.0e-300;
 
-#ifdef __STDC__
-	double __scalbn (double x, int n)
-#else
-	double __scalbn (x,n)
-	double x; int n;
-#endif
+double
+__scalbn (double x, int n)
 {
 	int64_t ix;
 	int64_t k;
 	EXTRACT_WORDS64(ix,x);
 	k = (ix >> 52) & 0x7ff;			/* extract exponent */
-	if (k==0) {				/* 0 or subnormal x */
+	if (__builtin_expect(k==0, 0)) {	/* 0 or subnormal x */
 	    if ((ix & UINT64_C(0xfffffffffffff))==0) return x; /* +-0 */
 	    x *= two54;
 	    EXTRACT_WORDS64(ix,x);
 	    k = ((ix >> 52) & 0x7ff) - 54;
 	    }
-	if (k==0x7ff) return x+x;		/* NaN or Inf */
+	if (__builtin_expect(k==0x7ff, 0)) return x+x;	/* NaN or Inf */
 	k = k+n;
-	if (n> 50000 || k >  0x7fe)
+	if (__builtin_expect(n> 50000 || k >  0x7fe, 0))
 	  return huge*__copysign(huge,x); /* overflow  */
-	if (n< -50000) return tiny*__copysign(tiny,x); /*underflow*/
-	if (k > 0)				/* normal result */
+	if (__builtin_expect(n< -50000, 0))
+	  return tiny*__copysign(tiny,x); /*underflow*/
+	if (__builtin_expect(k > 0, 1))		/* normal result */
 	    {INSERT_WORDS64(x,(ix&UINT64_C(0x800fffffffffffff))|(k<<52));
 	      return x;}
 	if (k <= -54)
diff --git a/sysdeps/ieee754/flt-32/s_scalbnf.c b/sysdeps/ieee754/flt-32/s_scalbnf.c
index 407cf60..3be2925 100644
--- a/sysdeps/ieee754/flt-32/s_scalbnf.c
+++ b/sysdeps/ieee754/flt-32/s_scalbnf.c
@@ -13,51 +13,39 @@
  * ====================================================
  */
 
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: s_scalbnf.c,v 1.4 1995/05/10 20:48:10 jtc Exp $";
-#endif
-
 #include "math.h"
 #include "math_private.h"
 
-#ifdef __STDC__
 static const float
-#else
-static float
-#endif
 two25   =  3.355443200e+07,	/* 0x4c000000 */
 twom25  =  2.9802322388e-08,	/* 0x33000000 */
 huge   = 1.0e+30,
 tiny   = 1.0e-30;
 
-#ifdef __STDC__
-	float __scalbnf (float x, int n)
-#else
-	float __scalbnf (x,n)
-	float x; int n;
-#endif
+float
+__scalbnf (float x, int n)
 {
 	int32_t k,ix;
 	GET_FLOAT_WORD(ix,x);
-        k = (ix&0x7f800000)>>23;		/* extract exponent */
-        if (k==0) {				/* 0 or subnormal x */
-            if ((ix&0x7fffffff)==0) return x; /* +-0 */
+	k = (ix&0x7f800000)>>23;		/* extract exponent */
+	if (__builtin_expect(k==0, 0)) {	/* 0 or subnormal x */
+	    if ((ix&0x7fffffff)==0) return x; /* +-0 */
 	    x *= two25;
 	    GET_FLOAT_WORD(ix,x);
 	    k = ((ix&0x7f800000)>>23) - 25;
 	    }
-        if (k==0xff) return x+x;		/* NaN or Inf */
-        k = k+n;
-        if (n> 50000 || k >  0xfe)
+	if (__builtin_expect(k==0xff, 0)) return x+x;	/* NaN or Inf */
+	k = k+n;
+	if (__builtin_expect(n> 50000 || k >  0xfe, 0))
 	  return huge*__copysignf(huge,x); /* overflow  */
-	if (n< -50000)
+	if (__builtin_expect(n< -50000, 0))
 	  return tiny*__copysignf(tiny,x);	/*underflow*/
-        if (k > 0) 				/* normal result */
+	if (__builtin_expect(k > 0, 1))		/* normal result */
 	    {SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); return x;}
-        if (k <= -25)
+	if (k <= -25)
 	    return tiny*__copysignf(tiny,x);	/*underflow*/
-        k += 25;				/* subnormal result */
+	k += 25;				/* subnormal result */
 	SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23));
-        return x*twom25;
+	return x*twom25;
 }
 weak_alias (__scalbnf, scalbnf)
diff --git a/sysdeps/ieee754/ldbl-96/s_scalbnl.c b/sysdeps/ieee754/ldbl-96/s_scalbnl.c
index 9f441fd..6a41920 100644
--- a/sysdeps/ieee754/ldbl-96/s_scalbnl.c
+++ b/sysdeps/ieee754/ldbl-96/s_scalbnl.c
@@ -14,10 +14,6 @@
  * ====================================================
  */
 
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: $";
-#endif
-
 /*
  * scalbnl (long double x, int n)
  * scalbnl(x,n) returns x* 2**n  computed by  exponent
@@ -28,44 +24,36 @@ static char rcsid[] = "$NetBSD: $";
 #include "math.h"
 #include "math_private.h"
 
-#ifdef __STDC__
 static const long double
-#else
-static long double
-#endif
 two64   =  1.8446744073709551616e19L,
 twom64  =  5.421010862427522170037e-20L,
 huge   = 1.0e+4900L,
 tiny   = 1.0e-4900L;
 
-#ifdef __STDC__
-	long double __scalbnl (long double x, int n)
-#else
-	long double __scalbnl (x,n)
-	long double x; int n;
-#endif
+long double
+__scalbnl (long double x, int n)
 {
 	int32_t k,es,hx,lx;
 	GET_LDOUBLE_WORDS(es,hx,lx,x);
-        k = es&0x7fff;				/* extract exponent */
-        if (k==0) {				/* 0 or subnormal x */
-            if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
+	k = es&0x7fff;				/* extract exponent */
+	if (__builtin_expect(k==0, 0)) {	/* 0 or subnormal x */
+	    if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
 	    x *= two64;
 	    GET_LDOUBLE_EXP(hx,x);
 	    k = (hx&0x7fff) - 64;
 	    }
-        if (k==0x7fff) return x+x;		/* NaN or Inf */
-        k = k+n;
-        if (n> 50000 || k > 0x7ffe)
+	if (__builtin_expect(k==0x7fff, 0)) return x+x;	/* NaN or Inf */
+	k = k+n;
+	if (__builtin_expect(n> 50000 || k > 0x7ffe, 0))
 	  return huge*__copysignl(huge,x); /* overflow  */
-	if (n< -50000)
+	if (__builtin_expect(n< -50000, 0))
 	  return tiny*__copysignl(tiny,x);
-        if (k > 0) 				/* normal result */
+	if (__builtin_expect(k > 0, 1))		/* normal result */
 	    {SET_LDOUBLE_EXP(x,(es&0x8000)|k); return x;}
-        if (k <= -64)
+	if (k <= -64)
 	    return tiny*__copysignl(tiny,x); 	/*underflow*/
-        k += 64;				/* subnormal result */
+	k += 64;				/* subnormal result */
 	SET_LDOUBLE_EXP(x,(es&0x8000)|k);
-        return x*twom64;
+	return x*twom64;
 }
 weak_alias (__scalbnl, scalbnl)

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

Summary of changes:
 ChangeLog                                     |    9 +++++
 math/bits/math-finite.h                       |    9 +++++-
 sysdeps/ieee754/dbl-64/s_scalbn.c             |   40 +++++++++----------------
 sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c |   24 +++++----------
 sysdeps/ieee754/flt-32/s_scalbnf.c            |   38 ++++++++---------------
 sysdeps/ieee754/ldbl-96/s_scalbnl.c           |   38 ++++++++---------------
 6 files changed, 65 insertions(+), 93 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]