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.20-455-g4a3d399


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  4a3d39994e07105fb1bd20ed71d166f6ebb21974 (commit)
      from  195f3afcbed4986beaecd5c28fdbe27ee0a402e0 (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=4a3d39994e07105fb1bd20ed71d166f6ebb21974

commit 4a3d39994e07105fb1bd20ed71d166f6ebb21974
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Wed Dec 31 19:16:34 2014 +0000

    Clean up powerpc fegetround / __fegetround inlines.
    
    The natural fix for some linknamespace test failures, where C90 libm
    functions call C99 <fenv.h> functions, is to make fe* into weak
    aliases for __fe* and call __fe* from within libm as needed.
    
    To do this, the __fe* names need to be available for that purpose -
    that is, they must not be used for something other than aliases of
    fe*.  On powerpc, however, __fegetround is an inline function in
    fenv_libc.h, with no corresponding fegetround inline function;
    fegetround has an equivalent macro expansion in bits/fenvinline.h, but
    that is disabled if __NO_MATH_INLINES (which is defined for building
    libm).
    
    I see no need for that disabling; it's not even clear that
    __NO_MATH_INLINES should affect <fenv.h>, and the results of
    fegetround are completely defined so there is no semantic effect of
    that disabling at all outside glibc.  The x86 inline feraiseexcept is
    conditioned on __USE_EXTERN_INLINES not __NO_MATH_INLINES (but that's
    an inline function rather than a macro).
    
    This patch removes the __NO_MATH_INLINES conditional on that
    fegetround macro, so resulting in it being expanded inline inside
    glibc.  In turn, this means that direct calls to __fegetround from C99
    functions in ldbl-128ibm can be changed to calls to fegetround, so
    that nofpu fenv_libc.h files don't need to define __fegetround at all
    and, by changing ldbl-128ibm files to use <fenv.h> not <fenv_libc.h>,
    non-e500 nofpu no longer needs an fenv_libc.h file.
    
    The other macros in fenvinline.h are left conditional on
    __NO_MATH_INLINES, although since the only case where this should make
    a difference is one involving undefined behavior (if the argument to
    the function is not a valid exception macro).
    
    The out-of-line definition for fegetround uses __fegetround (the
    inline function removed by this patch).  So this continues to work,
    the fenvinline.h header is made to define __fegetround, and then to
    define fegetround to call __fegetround.
    
    Tested for powerpc32 (hard float) that installed stripped shared
    libraries are unchanged by this patch; also tested that powerpc-nofpu
    build still works.  (This patch does not itself fix any bugs; it
    simply cleans things up in preparation for separate bug fixes.)
    
    	* sysdeps/powerpc/bits/fenvinline.h (fegetround): Rename macro to
    	__fegetround and redefine to call __fegetround.  Remove condition
    	on [!__NO_MATH_INLINES].
    	* sysdeps/powerpc/fpu/fenv_libc.h (__fegetround): Remove inline
    	function.
    	* sysdeps/powerpc/nofpu/fenv_libc.h: Remove file.
    	* sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h (__fegetround):
    	Remove macro.
    	* sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: Include <fenv.h>
    	instead of <fenv_libc.h>.
    	(__llrintl): Call fegetround instead of __fegetround.
    	* sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: Include <fenv.h>
    	instead of <fenv_libc.h>.
    	* sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: Likewise.
    	(__lrintl): Call fegetround instead of __fegetround.
    	* sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: Include <fenv.h>
    	instead of <fenv_libc.h>.
    	* sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise.
    	(__rintl): Call fegetround instead of __fegetround.

diff --git a/ChangeLog b/ChangeLog
index 4597880..3de3443 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2014-12-31  Joseph Myers  <joseph@codesourcery.com>
+
+	* sysdeps/powerpc/bits/fenvinline.h (fegetround): Rename macro to
+	__fegetround and redefine to call __fegetround.  Remove condition
+	on [!__NO_MATH_INLINES].
+	* sysdeps/powerpc/fpu/fenv_libc.h (__fegetround): Remove inline
+	function.
+	* sysdeps/powerpc/nofpu/fenv_libc.h: Remove file.
+	* sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h (__fegetround):
+	Remove macro.
+	* sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: Include <fenv.h>
+	instead of <fenv_libc.h>.
+	(__llrintl): Call fegetround instead of __fegetround.
+	* sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: Include <fenv.h>
+	instead of <fenv_libc.h>.
+	* sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: Likewise.
+	(__lrintl): Call fegetround instead of __fegetround.
+	* sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: Include <fenv.h>
+	instead of <fenv_libc.h>.
+	* sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise.
+	(__rintl): Call fegetround instead of __fegetround.
+
 2014-12-31  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
 	* scripts/gen-posix-conf-vars.awk: Don't use multi-dimensional
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_llrintl.c b/sysdeps/ieee754/ldbl-128ibm/s_llrintl.c
index 86996bf..3d9dee1 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_llrintl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_llrintl.c
@@ -18,7 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
-#include <fenv_libc.h>
+#include <fenv.h>
 #include <math_ldbl_opt.h>
 #include <float.h>
 #include <ieee754.h>
@@ -43,7 +43,7 @@ __llrintl (long double x)
 #endif
     )
     {
-      save_round = __fegetround ();
+      save_round = fegetround ();
 
       if (__glibc_unlikely ((xh == -(double) (-__LONG_LONG_MAX__ - 1))))
 	{
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_llroundl.c b/sysdeps/ieee754/ldbl-128ibm/s_llroundl.c
index dd84074..98e4253 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_llroundl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_llroundl.c
@@ -18,7 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
-#include <fenv_libc.h>
+#include <fenv.h>
 #include <math_ldbl_opt.h>
 #include <float.h>
 #include <ieee754.h>
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_lrintl.c b/sysdeps/ieee754/ldbl-128ibm/s_lrintl.c
index 2b47c52..895a066 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_lrintl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_lrintl.c
@@ -18,7 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
-#include <fenv_libc.h>
+#include <fenv.h>
 #include <math_ldbl_opt.h>
 #include <float.h>
 #include <ieee754.h>
@@ -49,7 +49,7 @@ __lrintl (long double x)
 #endif
     )
     {
-      save_round = __fegetround ();
+      save_round = fegetround ();
 
 #if __LONG_MAX__ == 2147483647
       long long llhi = (long long) xh;
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_lroundl.c b/sysdeps/ieee754/ldbl-128ibm/s_lroundl.c
index 27b72e2..6c3a314 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_lroundl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_lroundl.c
@@ -18,7 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
-#include <fenv_libc.h>
+#include <fenv.h>
 #include <math_ldbl_opt.h>
 #include <float.h>
 #include <ieee754.h>
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_rintl.c b/sysdeps/ieee754/ldbl-128ibm/s_rintl.c
index 20b75dd..f39e6fd 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_rintl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_rintl.c
@@ -21,7 +21,7 @@
    when it's coded in C.  */
 
 #include <math.h>
-#include <fenv_libc.h>
+#include <fenv.h>
 #include <math_ldbl_opt.h>
 #include <float.h>
 #include <ieee754.h>
@@ -40,7 +40,7 @@ __rintl (long double x)
 					     __builtin_inf ()), 1))
     {
       double orig_xh;
-      int save_round = __fegetround ();
+      int save_round = fegetround ();
 
       /* Long double arithmetic, including the canonicalisation below,
 	 only works in round-to-nearest mode.  */
diff --git a/sysdeps/powerpc/bits/fenvinline.h b/sysdeps/powerpc/bits/fenvinline.h
index 00336f3..e914928 100644
--- a/sysdeps/powerpc/bits/fenvinline.h
+++ b/sysdeps/powerpc/bits/fenvinline.h
@@ -16,23 +16,24 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if (defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_FPRS__	\
-     && !defined __NO_MATH_INLINES)
+#if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_FPRS__
 
 /* Inline definition for fegetround.  */
-# define fegetround() \
+# define __fegetround() \
   (__extension__  ({ int __fegetround_result;				      \
 		     __asm__ __volatile__				      \
 		       ("mcrfs 7,7 ; mfcr %0"				      \
 			: "=r"(__fegetround_result) : : "cr7");		      \
 		     __fegetround_result & 3; }))
+# define fegetround() __fegetround ()
 
+# ifndef __NO_MATH_INLINES
 /* The weird 'i#*X' constraints on the following suppress a gcc
    warning when __excepts is not a constant.  Otherwise, they mean the
    same as just plain 'i'.  */
 
 /* Inline definition for feraiseexcept.  */
-# define feraiseexcept(__excepts) \
+#  define feraiseexcept(__excepts) \
   ((__builtin_constant_p (__excepts)					      \
     && ((__excepts) & ((__excepts)-1)) == 0				      \
     && (__excepts) != FE_INVALID)					      \
@@ -45,7 +46,7 @@
    : (feraiseexcept) (__excepts))
 
 /* Inline definition for feclearexcept.  */
-# define feclearexcept(__excepts) \
+#  define feclearexcept(__excepts) \
   ((__builtin_constant_p (__excepts)					      \
     && ((__excepts) & ((__excepts)-1)) == 0				      \
     && (__excepts) != FE_INVALID)					      \
@@ -57,4 +58,6 @@
       : 0)								      \
    : (feclearexcept) (__excepts))
 
+# endif /* !__NO_MATH_INLINES.  */
+
 #endif /* __GNUC__ && !_SOFT_FLOAT && !__NO_FPRS__ */
diff --git a/sysdeps/powerpc/fpu/fenv_libc.h b/sysdeps/powerpc/fpu/fenv_libc.h
index c1df5ce..125745e 100644
--- a/sysdeps/powerpc/fpu/fenv_libc.h
+++ b/sysdeps/powerpc/fpu/fenv_libc.h
@@ -76,15 +76,6 @@ typedef union
 
 
 static inline int
-__fegetround (void)
-{
-  int result;
-  asm volatile ("mcrfs 7,7\n\t"
-		"mfcr  %0" : "=r"(result) : : "cr7");
-  return result & 3;
-}
-
-static inline int
 __fesetround (int round)
 {
   if ((unsigned int) round < 2)
diff --git a/sysdeps/powerpc/nofpu/fenv_libc.h b/sysdeps/powerpc/nofpu/fenv_libc.h
deleted file mode 100644
index dce1524..0000000
--- a/sysdeps/powerpc/nofpu/fenv_libc.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Internal libc stuff for floating point environment routines.
-   Copyright (C) 2007-2014 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _FENV_LIBC_H
-#define _FENV_LIBC_H	1
-
-/* fenv_libc.h is used in libm implementations of ldbl-128ibm.  So we
-   need this version in the soft-fp to at minimum include fenv.h to
-   get the fegetround definition.  */
-
-#include <fenv.h>
-
-/* ldbl-128ibm code uses __fegetround.  */
-#define __fegetround()	fegetround ()
-
-#endif /* fenv_libc.h */
diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h b/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h
index d8225e7..07eb675 100644
--- a/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h
+++ b/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h
@@ -21,9 +21,6 @@
 
 #include <fenv.h>
 
-/* ldbl-128ibm code uses __fegetround.  */
-#define __fegetround()	fegetround ()
-
 int __feraiseexcept_spe (int);
 libm_hidden_proto (__feraiseexcept_spe)
 

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

Summary of changes:
 ChangeLog                                        |   22 +++++++++++++++
 sysdeps/ieee754/ldbl-128ibm/s_llrintl.c          |    4 +-
 sysdeps/ieee754/ldbl-128ibm/s_llroundl.c         |    2 +-
 sysdeps/ieee754/ldbl-128ibm/s_lrintl.c           |    4 +-
 sysdeps/ieee754/ldbl-128ibm/s_lroundl.c          |    2 +-
 sysdeps/ieee754/ldbl-128ibm/s_rintl.c            |    4 +-
 sysdeps/powerpc/bits/fenvinline.h                |   13 +++++---
 sysdeps/powerpc/fpu/fenv_libc.h                  |    9 ------
 sysdeps/powerpc/nofpu/fenv_libc.h                |   31 ----------------------
 sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h |    3 --
 10 files changed, 38 insertions(+), 56 deletions(-)
 delete mode 100644 sysdeps/powerpc/nofpu/fenv_libc.h


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]