svn commit: r226218 - in head/lib/msun: . amd64 arm i387 ia64 mips powerpc sparc64

David Schultz das at FreeBSD.org
Mon Oct 10 15:43:10 UTC 2011


Author: das
Date: Mon Oct 10 15:43:09 2011
New Revision: 226218
URL: http://svn.freebsd.org/changeset/base/226218

Log:
  Provide external definitions of all of the standardized functions in
  fenv.h that are currently inlined.
  
  The definitions are provided in fenv.c via 'extern inline'
  declaractions.  This assumes the compiler handles 'extern inline' as
  specified in C99, which has been true under FreeBSD since 8.0.
  
  The goal is to eventually remove the 'static' keyword from the inline
  definitions in fenv.h, so that non-inlined references all wind up
  pointing to the same external definition like they're supposed to.
  I am deferring the second step to provide a window where
  newly-compiled apps will still link against old math libraries.
  (This isn't supported, but there's no need to cause undue breakage.)
  
  Reviewed by:    stefanf, bde

Modified:
  head/lib/msun/Symbol.map
  head/lib/msun/amd64/Symbol.map
  head/lib/msun/amd64/fenv.c
  head/lib/msun/amd64/fenv.h
  head/lib/msun/arm/Symbol.map
  head/lib/msun/arm/fenv.c
  head/lib/msun/arm/fenv.h
  head/lib/msun/i387/Symbol.map
  head/lib/msun/i387/fenv.c
  head/lib/msun/i387/fenv.h
  head/lib/msun/ia64/Symbol.map
  head/lib/msun/ia64/fenv.c
  head/lib/msun/ia64/fenv.h
  head/lib/msun/mips/Symbol.map
  head/lib/msun/mips/fenv.c
  head/lib/msun/mips/fenv.h
  head/lib/msun/powerpc/Symbol.map
  head/lib/msun/powerpc/fenv.c
  head/lib/msun/powerpc/fenv.h
  head/lib/msun/sparc64/Symbol.map
  head/lib/msun/sparc64/fenv.c
  head/lib/msun/sparc64/fenv.h

Modified: head/lib/msun/Symbol.map
==============================================================================
--- head/lib/msun/Symbol.map	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/Symbol.map	Mon Oct 10 15:43:09 2011	(r226218)
@@ -228,3 +228,13 @@ FBSD_1.2 {
 	log2;
 	log2f;
 };
+
+/* First added in 10.0-CURRENT */
+FBSD_1.3 {
+	feclearexcept;
+	fegetexceptflag;
+	fetestexcept;
+	fegetround;
+	fesetround;
+	fesetenv;
+};

Modified: head/lib/msun/amd64/Symbol.map
==============================================================================
--- head/lib/msun/amd64/Symbol.map	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/amd64/Symbol.map	Mon Oct 10 15:43:09 2011	(r226218)
@@ -7,8 +7,6 @@ FBSD_1.0 {
 	fegetenv;
 	feholdexcept;
 	feupdateenv;
-	__feenableexcept;
-	__fedisableexcept;
 	feenableexcept;
 	fedisableexcept;
 };

Modified: head/lib/msun/amd64/fenv.c
==============================================================================
--- head/lib/msun/amd64/fenv.c	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/amd64/fenv.c	Mon Oct 10 15:43:09 2011	(r226218)
@@ -29,8 +29,14 @@
 #include <sys/cdefs.h>
 #include <sys/types.h>
 #include <machine/fpu.h>
+
+#define	__fenv_static
 #include <fenv.h>
 
+#ifdef __GNUC_GNU_INLINE__
+#error "This file must be compiled with C99 'inline' semantics"
+#endif
+
 const fenv_t __fe_dfl_env = {
 	{ 0xffff0000 | __INITIAL_FPUCW__,
 	  0xffff0000,
@@ -41,6 +47,9 @@ const fenv_t __fe_dfl_env = {
 	__INITIAL_MXCSR__
 };
 
+extern inline int feclearexcept(int __excepts);
+extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+
 int
 fesetexceptflag(const fexcept_t *flagp, int excepts)
 {
@@ -69,6 +78,10 @@ feraiseexcept(int excepts)
 	return (0);
 }
 
+extern inline int fetestexcept(int __excepts);
+extern inline int fegetround(void);
+extern inline int fesetround(int __round);
+
 int
 fegetenv(fenv_t *envp)
 {
@@ -98,6 +111,8 @@ feholdexcept(fenv_t *envp)
 	return (0);
 }
 
+extern inline int fesetenv(const fenv_t *__envp);
+
 int
 feupdateenv(const fenv_t *envp)
 {

Modified: head/lib/msun/amd64/fenv.h
==============================================================================
--- head/lib/msun/amd64/fenv.h	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/amd64/fenv.h	Mon Oct 10 15:43:09 2011	(r226218)
@@ -32,6 +32,10 @@
 #include <sys/cdefs.h>
 #include <sys/_types.h>
 
+#ifndef	__fenv_static
+#define	__fenv_static	static
+#endif
+
 typedef struct {
 	struct {
 		__uint32_t	__control;
@@ -89,7 +93,7 @@ extern const fenv_t	__fe_dfl_env;
 #define	__ldmxcsr(__csr)	__asm __volatile("ldmxcsr %0" : : "m" (__csr))
 #define	__stmxcsr(__csr)	__asm __volatile("stmxcsr %0" : "=m" (*(__csr)))
 
-static __inline int
+__fenv_static inline int
 feclearexcept(int __excepts)
 {
 	fenv_t __env;
@@ -107,7 +111,7 @@ feclearexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fegetexceptflag(fexcept_t *__flagp, int __excepts)
 {
 	__uint32_t __mxcsr;
@@ -122,7 +126,7 @@ fegetexceptflag(fexcept_t *__flagp, int 
 int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
 int feraiseexcept(int __excepts);
 
-static __inline int
+__fenv_static inline int
 fetestexcept(int __excepts)
 {
 	__uint32_t __mxcsr;
@@ -133,7 +137,7 @@ fetestexcept(int __excepts)
 	return ((__status | __mxcsr) & __excepts);
 }
 
-static __inline int
+__fenv_static inline int
 fegetround(void)
 {
 	__uint16_t __control;
@@ -148,7 +152,7 @@ fegetround(void)
 	return (__control & _ROUND_MASK);
 }
 
-static __inline int
+__fenv_static inline int
 fesetround(int __round)
 {
 	__uint32_t __mxcsr;
@@ -173,7 +177,7 @@ fesetround(int __round)
 int fegetenv(fenv_t *__envp);
 int feholdexcept(fenv_t *__envp);
 
-static __inline int
+__fenv_static inline int
 fesetenv(const fenv_t *__envp)
 {
 
@@ -197,7 +201,8 @@ int feupdateenv(const fenv_t *__envp);
 int feenableexcept(int __mask);
 int fedisableexcept(int __mask);
 
-static __inline int
+/* We currently provide no external definition of fegetexcept(). */
+static inline int
 fegetexcept(void)
 {
 	__uint16_t __control;

Modified: head/lib/msun/arm/Symbol.map
==============================================================================
--- head/lib/msun/arm/Symbol.map	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/arm/Symbol.map	Mon Oct 10 15:43:09 2011	(r226218)
@@ -3,3 +3,11 @@
  */
 FBSD_1.0 {
 };
+
+FBSD_1.3 {
+	fesetexceptflag;
+	feraiseexcept;
+	fegetenv;
+	feholdexcept;
+	feupdateenv;
+};

Modified: head/lib/msun/arm/fenv.c
==============================================================================
--- head/lib/msun/arm/fenv.c	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/arm/fenv.c	Mon Oct 10 15:43:09 2011	(r226218)
@@ -26,10 +26,27 @@
  * $FreeBSD$
  */
 
+#define	__fenv_static
 #include <fenv.h>
 
+#ifdef __GNUC_GNU_INLINE__
+#error "This file must be compiled with C99 'inline' semantics"
+#endif
+
 /*
  * Hopefully the system ID byte is immutable, so it's valid to use
  * this as a default environment.
  */
 const fenv_t __fe_dfl_env = 0;
+
+extern inline int feclearexcept(int __excepts);
+extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
+extern inline int feraiseexcept(int __excepts);
+extern inline int fetestexcept(int __excepts);
+extern inline int fegetround(void);
+extern inline int fesetround(int __round);
+extern inline int fegetenv(fenv_t *__envp);
+extern inline int feholdexcept(fenv_t *__envp);
+extern inline int fesetenv(const fenv_t *__envp);
+extern inline int feupdateenv(const fenv_t *__envp);

Modified: head/lib/msun/arm/fenv.h
==============================================================================
--- head/lib/msun/arm/fenv.h	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/arm/fenv.h	Mon Oct 10 15:43:09 2011	(r226218)
@@ -31,6 +31,10 @@
 
 #include <sys/_types.h>
 
+#ifndef	__fenv_static
+#define	__fenv_static	static
+#endif
+
 typedef	__uint32_t	fenv_t;
 typedef	__uint32_t	fexcept_t;
 
@@ -68,7 +72,7 @@ extern const fenv_t	__fe_dfl_env;
 #define __wfs(__fpsr)
 #endif
 
-static __inline int
+__fenv_static inline int
 feclearexcept(int __excepts)
 {
 	fexcept_t __fpsr;
@@ -79,7 +83,7 @@ feclearexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fegetexceptflag(fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __fpsr;
@@ -89,7 +93,7 @@ fegetexceptflag(fexcept_t *__flagp, int 
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fesetexceptflag(const fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __fpsr;
@@ -101,7 +105,7 @@ fesetexceptflag(const fexcept_t *__flagp
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feraiseexcept(int __excepts)
 {
 	fexcept_t __ex = __excepts;
@@ -110,7 +114,7 @@ feraiseexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fetestexcept(int __excepts)
 {
 	fexcept_t __fpsr;
@@ -119,7 +123,7 @@ fetestexcept(int __excepts)
 	return (__fpsr & __excepts);
 }
 
-static __inline int
+__fenv_static inline int
 fegetround(void)
 {
 
@@ -131,14 +135,14 @@ fegetround(void)
 	return (-1);
 }
 
-static __inline int
+__fenv_static inline int
 fesetround(int __round)
 {
 
 	return (-1);
 }
 
-static __inline int
+__fenv_static inline int
 fegetenv(fenv_t *__envp)
 {
 
@@ -146,7 +150,7 @@ fegetenv(fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feholdexcept(fenv_t *__envp)
 {
 	fenv_t __env;
@@ -158,7 +162,7 @@ feholdexcept(fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fesetenv(const fenv_t *__envp)
 {
 
@@ -166,7 +170,7 @@ fesetenv(const fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feupdateenv(const fenv_t *__envp)
 {
 	fexcept_t __fpsr;
@@ -179,7 +183,9 @@ feupdateenv(const fenv_t *__envp)
 
 #if __BSD_VISIBLE
 
-static __inline int
+/* We currently provide no external definitions of the functions below. */
+
+static inline int
 feenableexcept(int __mask)
 {
 	fenv_t __old_fpsr, __new_fpsr;
@@ -190,7 +196,7 @@ feenableexcept(int __mask)
 	return ((__old_fpsr >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static __inline int
+static inline int
 fedisableexcept(int __mask)
 {
 	fenv_t __old_fpsr, __new_fpsr;
@@ -201,7 +207,7 @@ fedisableexcept(int __mask)
 	return ((__old_fpsr >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static __inline int
+static inline int
 fegetexcept(void)
 {
 	fenv_t __fpsr;

Modified: head/lib/msun/i387/Symbol.map
==============================================================================
--- head/lib/msun/i387/Symbol.map	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/i387/Symbol.map	Mon Oct 10 15:43:09 2011	(r226218)
@@ -9,8 +9,6 @@ FBSD_1.0 {
 	fegetenv;
 	feholdexcept;
 	feupdateenv;
-	__feenableexcept;
-	__fedisableexcept;
 	feenableexcept;
 	fedisableexcept;
 };

Modified: head/lib/msun/i387/fenv.c
==============================================================================
--- head/lib/msun/i387/fenv.c	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/i387/fenv.c	Mon Oct 10 15:43:09 2011	(r226218)
@@ -29,7 +29,13 @@
 #include <sys/cdefs.h>
 #include <sys/types.h>
 #include <machine/npx.h>
-#include "fenv.h"
+
+#define	__fenv_static
+#include <fenv.h>
+
+#ifdef __GNUC_GNU_INLINE__
+#error "This file must be compiled with C99 'inline' semantics"
+#endif
 
 const fenv_t __fe_dfl_env = {
 	__INITIAL_NPXCW__,
@@ -83,6 +89,9 @@ __test_sse(void)
 	return (0);
 }
 
+extern inline int feclearexcept(int __excepts);
+extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+
 int
 fesetexceptflag(const fexcept_t *flagp, int excepts)
 {
@@ -114,6 +123,10 @@ feraiseexcept(int excepts)
 	return (0);
 }
 
+extern inline int fetestexcept(int __excepts);
+extern inline int fegetround(void);
+extern inline int fesetround(int __round);
+
 int
 fegetenv(fenv_t *envp)
 {
@@ -149,6 +162,8 @@ feholdexcept(fenv_t *envp)
 	return (0);
 }
 
+extern inline int fesetenv(const fenv_t *__envp);
+
 int
 feupdateenv(const fenv_t *envp)
 {
@@ -208,6 +223,3 @@ __fedisableexcept(int mask)
 	}
 	return (~omask);
 }
-
-__weak_reference(__feenableexcept, feenableexcept);
-__weak_reference(__fedisableexcept, fedisableexcept);

Modified: head/lib/msun/i387/fenv.h
==============================================================================
--- head/lib/msun/i387/fenv.h	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/i387/fenv.h	Mon Oct 10 15:43:09 2011	(r226218)
@@ -32,6 +32,10 @@
 #include <sys/cdefs.h>
 #include <sys/_types.h>
 
+#ifndef	__fenv_static
+#define	__fenv_static	static
+#endif
+
 /*                   
  * To preserve binary compatibility with FreeBSD 5.3, we pack the
  * mxcsr into some reserved fields, rather than changing sizeof(fenv_t).
@@ -110,7 +114,7 @@ extern const fenv_t	__fe_dfl_env;
 #define	__ldmxcsr(__csr)	__asm __volatile("ldmxcsr %0" : : "m" (__csr))
 #define	__stmxcsr(__csr)	__asm __volatile("stmxcsr %0" : "=m" (*(__csr)))
 
-static __inline int
+__fenv_static inline int
 feclearexcept(int __excepts)
 {
 	fenv_t __env;
@@ -131,7 +135,7 @@ feclearexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fegetexceptflag(fexcept_t *__flagp, int __excepts)
 {
 	__uint32_t __mxcsr;
@@ -149,7 +153,7 @@ fegetexceptflag(fexcept_t *__flagp, int 
 int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
 int feraiseexcept(int __excepts);
 
-static __inline int
+__fenv_static inline int
 fetestexcept(int __excepts)
 {
 	__uint32_t __mxcsr;
@@ -163,7 +167,7 @@ fetestexcept(int __excepts)
 	return ((__status | __mxcsr) & __excepts);
 }
 
-static __inline int
+__fenv_static inline int
 fegetround(void)
 {
 	__uint16_t __control;
@@ -178,7 +182,7 @@ fegetround(void)
 	return (__control & _ROUND_MASK);
 }
 
-static __inline int
+__fenv_static inline int
 fesetround(int __round)
 {
 	__uint32_t __mxcsr;
@@ -205,7 +209,7 @@ fesetround(int __round)
 int fegetenv(fenv_t *__envp);
 int feholdexcept(fenv_t *__envp);
 
-static __inline int
+__fenv_static inline int
 fesetenv(const fenv_t *__envp)
 {
 	fenv_t __env = *__envp;
@@ -234,7 +238,8 @@ int feupdateenv(const fenv_t *__envp);
 int feenableexcept(int __mask);
 int fedisableexcept(int __mask);
 
-static __inline int
+/* We currently provide no external definition of fegetexcept(). */
+static inline int
 fegetexcept(void)
 {
 	__uint16_t __control;

Modified: head/lib/msun/ia64/Symbol.map
==============================================================================
--- head/lib/msun/ia64/Symbol.map	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/ia64/Symbol.map	Mon Oct 10 15:43:09 2011	(r226218)
@@ -4,3 +4,10 @@
 FBSD_1.0 {
 	feupdateenv;
 };
+
+FBSD_1.3 {
+	fesetexceptflag;
+	feraiseexcept;
+	fegetenv;
+	feholdexcept;
+};

Modified: head/lib/msun/ia64/fenv.c
==============================================================================
--- head/lib/msun/ia64/fenv.c	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/ia64/fenv.c	Mon Oct 10 15:43:09 2011	(r226218)
@@ -27,10 +27,27 @@
  */
 
 #include <sys/types.h>
+
+#define	__fenv_static
 #include <fenv.h>
 
+#ifdef __GNUC_GNU_INLINE__
+#error "This file must be compiled with C99 'inline' semantics"
+#endif
+
 const fenv_t __fe_dfl_env = 0x0009804c8a70033fULL;
 
+extern inline int feclearexcept(int __excepts);
+extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
+extern inline int feraiseexcept(int __excepts);
+extern inline int fetestexcept(int __excepts);
+extern inline int fegetround(void);
+extern inline int fesetround(int __round);
+extern inline int fegetenv(fenv_t *__envp);
+extern inline int feholdexcept(fenv_t *__envp);
+extern inline int fesetenv(const fenv_t *__envp);
+
 /*
  * It doesn't pay to inline feupdateenv() because it includes one of
  * the rare uses of feraiseexcept() where the argument is not a

Modified: head/lib/msun/ia64/fenv.h
==============================================================================
--- head/lib/msun/ia64/fenv.h	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/ia64/fenv.h	Mon Oct 10 15:43:09 2011	(r226218)
@@ -31,6 +31,10 @@
 
 #include <sys/_types.h>
 
+#ifndef	__fenv_static
+#define	__fenv_static	static
+#endif
+
 typedef	__uint64_t	fenv_t;
 typedef	__uint16_t	fexcept_t;
 
@@ -63,7 +67,7 @@ extern const fenv_t	__fe_dfl_env;
 #define	__stfpsr(__r)	__asm __volatile("mov %0=ar.fpsr" : "=r" (*(__r)))
 #define	__ldfpsr(__r)	__asm __volatile("mov ar.fpsr=%0;;" : : "r" (__r))
 
-static __inline int
+__fenv_static inline int
 feclearexcept(int __excepts)
 {
 	fenv_t __fpsr;
@@ -74,7 +78,7 @@ feclearexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fegetexceptflag(fexcept_t *__flagp, int __excepts)
 {
 	fenv_t __fpsr;
@@ -84,7 +88,7 @@ fegetexceptflag(fexcept_t *__flagp, int 
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fesetexceptflag(const fexcept_t *__flagp, int __excepts)
 {
 	fenv_t __fpsr;
@@ -103,7 +107,7 @@ fesetexceptflag(const fexcept_t *__flagp
  * figure this out automatically, and there's no way to tell it.
  * We assume that constant arguments will be the common case.
  */
-static __inline int
+__fenv_static inline int
 feraiseexcept(int __excepts)
 {
 	volatile double d;
@@ -138,7 +142,7 @@ feraiseexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fetestexcept(int __excepts)
 {
 	fenv_t __fpsr;
@@ -148,7 +152,7 @@ fetestexcept(int __excepts)
 }
 
 
-static __inline int
+__fenv_static inline int
 fegetround(void)
 {
 	fenv_t __fpsr;
@@ -157,7 +161,7 @@ fegetround(void)
 	return (__fpsr & _ROUND_MASK);
 }
 
-static __inline int
+__fenv_static inline int
 fesetround(int __round)
 {
 	fenv_t __fpsr;
@@ -171,7 +175,7 @@ fesetround(int __round)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fegetenv(fenv_t *__envp)
 {
 
@@ -179,7 +183,7 @@ fegetenv(fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feholdexcept(fenv_t *__envp)
 {
 	fenv_t __fpsr;
@@ -192,7 +196,7 @@ feholdexcept(fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fesetenv(const fenv_t *__envp)
 {
 
@@ -204,7 +208,9 @@ int feupdateenv(const fenv_t *__envp);
 
 #if __BSD_VISIBLE
 
-static __inline int
+/* We currently provide no external definitions of the functions below. */
+
+static inline int
 feenableexcept(int __mask)
 {
 	fenv_t __newfpsr, __oldfpsr;
@@ -215,7 +221,7 @@ feenableexcept(int __mask)
 	return (~__oldfpsr & FE_ALL_EXCEPT);
 }
 
-static __inline int
+static inline int
 fedisableexcept(int __mask)
 {
 	fenv_t __newfpsr, __oldfpsr;
@@ -226,7 +232,7 @@ fedisableexcept(int __mask)
 	return (~__oldfpsr & FE_ALL_EXCEPT);
 }
 
-static __inline int
+static inline int
 fegetexcept(void)
 {
 	fenv_t __fpsr;

Modified: head/lib/msun/mips/Symbol.map
==============================================================================
--- head/lib/msun/mips/Symbol.map	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/mips/Symbol.map	Mon Oct 10 15:43:09 2011	(r226218)
@@ -3,3 +3,11 @@
  */
 FBSD_1.0 {
 };
+
+FBSD_1.3 {
+	fesetexceptflag;
+	feraiseexcept;
+	fegetenv;
+	feholdexcept;
+	feupdateenv;
+};

Modified: head/lib/msun/mips/fenv.c
==============================================================================
--- head/lib/msun/mips/fenv.c	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/mips/fenv.c	Mon Oct 10 15:43:09 2011	(r226218)
@@ -26,10 +26,27 @@
  * $FreeBSD$
  */
 
+#define	__fenv_static
 #include <fenv.h>
 
+#ifdef __GNUC_GNU_INLINE__
+#error "This file must be compiled with C99 'inline' semantics"
+#endif
+
 /*
  * Hopefully the system ID byte is immutable, so it's valid to use
  * this as a default environment.
  */
 const fenv_t __fe_dfl_env = 0;
+
+extern inline int feclearexcept(int __excepts);
+extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
+extern inline int feraiseexcept(int __excepts);
+extern inline int fetestexcept(int __excepts);
+extern inline int fegetround(void);
+extern inline int fesetround(int __round);
+extern inline int fegetenv(fenv_t *__envp);
+extern inline int feholdexcept(fenv_t *__envp);
+extern inline int fesetenv(const fenv_t *__envp);
+extern inline int feupdateenv(const fenv_t *__envp);

Modified: head/lib/msun/mips/fenv.h
==============================================================================
--- head/lib/msun/mips/fenv.h	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/mips/fenv.h	Mon Oct 10 15:43:09 2011	(r226218)
@@ -31,6 +31,10 @@
 
 #include <sys/_types.h>
 
+#ifndef	__fenv_static
+#define	__fenv_static	static
+#endif
+
 typedef	__uint32_t	fenv_t;
 typedef	__uint32_t	fexcept_t;
 
@@ -68,7 +72,7 @@ extern const fenv_t	__fe_dfl_env;
 #define __wfs(__fpsr)
 #endif
 
-static __inline int
+__fenv_static inline int
 feclearexcept(int __excepts)
 {
 	fexcept_t __fpsr;
@@ -79,7 +83,7 @@ feclearexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fegetexceptflag(fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __fpsr;
@@ -89,7 +93,7 @@ fegetexceptflag(fexcept_t *__flagp, int 
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fesetexceptflag(const fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __fpsr;
@@ -101,7 +105,7 @@ fesetexceptflag(const fexcept_t *__flagp
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feraiseexcept(int __excepts)
 {
 	fexcept_t __ex = __excepts;
@@ -110,7 +114,7 @@ feraiseexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fetestexcept(int __excepts)
 {
 	fexcept_t __fpsr;
@@ -119,7 +123,7 @@ fetestexcept(int __excepts)
 	return (__fpsr & __excepts);
 }
 
-static __inline int
+__fenv_static inline int
 fegetround(void)
 {
 
@@ -131,14 +135,14 @@ fegetround(void)
 	return (-1);
 }
 
-static __inline int
+__fenv_static inline int
 fesetround(int __round)
 {
 
 	return (-1);
 }
 
-static __inline int
+__fenv_static inline int
 fegetenv(fenv_t *__envp)
 {
 
@@ -146,7 +150,7 @@ fegetenv(fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feholdexcept(fenv_t *__envp)
 {
 	fenv_t __env;
@@ -158,7 +162,7 @@ feholdexcept(fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fesetenv(const fenv_t *__envp)
 {
 
@@ -166,7 +170,7 @@ fesetenv(const fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feupdateenv(const fenv_t *__envp)
 {
 	fexcept_t __fpsr;
@@ -179,7 +183,9 @@ feupdateenv(const fenv_t *__envp)
 
 #if __BSD_VISIBLE
 
-static __inline int
+/* We currently provide no external definitions of the functions below. */
+
+static inline int
 feenableexcept(int __mask)
 {
 	fenv_t __old_fpsr, __new_fpsr;
@@ -190,7 +196,7 @@ feenableexcept(int __mask)
 	return ((__old_fpsr >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static __inline int
+static inline int
 fedisableexcept(int __mask)
 {
 	fenv_t __old_fpsr, __new_fpsr;
@@ -201,7 +207,7 @@ fedisableexcept(int __mask)
 	return ((__old_fpsr >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static __inline int
+static inline int
 fegetexcept(void)
 {
 	fenv_t __fpsr;

Modified: head/lib/msun/powerpc/Symbol.map
==============================================================================
--- head/lib/msun/powerpc/Symbol.map	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/powerpc/Symbol.map	Mon Oct 10 15:43:09 2011	(r226218)
@@ -3,3 +3,11 @@
  */
 FBSD_1.0 {
 };
+
+FBSD_1.3 {
+	fesetexceptflag;
+	feraiseexcept;
+	fegetenv;
+	feholdexcept;
+	feupdateenv;
+};

Modified: head/lib/msun/powerpc/fenv.c
==============================================================================
--- head/lib/msun/powerpc/fenv.c	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/powerpc/fenv.c	Mon Oct 10 15:43:09 2011	(r226218)
@@ -26,6 +26,23 @@
  * $FreeBSD$
  */
 
+#define	__fenv_static
 #include <fenv.h>
 
+#ifdef __GNUC_GNU_INLINE__
+#error "This file must be compiled with C99 'inline' semantics"
+#endif
+
 const fenv_t __fe_dfl_env = 0x00000000;
+
+extern inline int feclearexcept(int __excepts);
+extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
+extern inline int feraiseexcept(int __excepts);
+extern inline int fetestexcept(int __excepts);
+extern inline int fegetround(void);
+extern inline int fesetround(int __round);
+extern inline int fegetenv(fenv_t *__envp);
+extern inline int feholdexcept(fenv_t *__envp);
+extern inline int fesetenv(const fenv_t *__envp);
+extern inline int feupdateenv(const fenv_t *__envp);

Modified: head/lib/msun/powerpc/fenv.h
==============================================================================
--- head/lib/msun/powerpc/fenv.h	Mon Oct 10 15:42:33 2011	(r226217)
+++ head/lib/msun/powerpc/fenv.h	Mon Oct 10 15:43:09 2011	(r226218)
@@ -31,6 +31,10 @@
 
 #include <sys/_types.h>
 
+#ifndef	__fenv_static
+#define	__fenv_static	static
+#endif
+
 typedef	__uint32_t	fenv_t;
 typedef	__uint32_t	fexcept_t;
 
@@ -98,7 +102,7 @@ union __fpscr {
 	} __bits;
 };
 
-static __inline int
+__fenv_static inline int
 feclearexcept(int __excepts)
 {
 	union __fpscr __r;
@@ -111,7 +115,7 @@ feclearexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fegetexceptflag(fexcept_t *__flagp, int __excepts)
 {
 	union __fpscr __r;
@@ -121,7 +125,7 @@ fegetexceptflag(fexcept_t *__flagp, int 
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fesetexceptflag(const fexcept_t *__flagp, int __excepts)
 {
 	union __fpscr __r;
@@ -135,7 +139,7 @@ fesetexceptflag(const fexcept_t *__flagp
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feraiseexcept(int __excepts)
 {
 	union __fpscr __r;
@@ -148,7 +152,7 @@ feraiseexcept(int __excepts)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fetestexcept(int __excepts)
 {
 	union __fpscr __r;
@@ -157,7 +161,7 @@ fetestexcept(int __excepts)
 	return (__r.__bits.__reg & __excepts);
 }
 
-static __inline int
+__fenv_static inline int
 fegetround(void)
 {
 	union __fpscr __r;
@@ -166,7 +170,7 @@ fegetround(void)
 	return (__r.__bits.__reg & _ROUND_MASK);
 }
 
-static __inline int
+__fenv_static inline int
 fesetround(int __round)
 {
 	union __fpscr __r;
@@ -180,7 +184,7 @@ fesetround(int __round)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fegetenv(fenv_t *__envp)
 {
 	union __fpscr __r;
@@ -190,7 +194,7 @@ fegetenv(fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feholdexcept(fenv_t *__envp)
 {
 	union __fpscr __r;
@@ -202,7 +206,7 @@ feholdexcept(fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 fesetenv(const fenv_t *__envp)
 {
 	union __fpscr __r;
@@ -212,7 +216,7 @@ fesetenv(const fenv_t *__envp)
 	return (0);
 }
 
-static __inline int
+__fenv_static inline int
 feupdateenv(const fenv_t *__envp)
 {
 	union __fpscr __r;
@@ -226,7 +230,9 @@ feupdateenv(const fenv_t *__envp)
 
 #if __BSD_VISIBLE
 
-static __inline int
+/* We currently provide no external definitions of the functions below. */
+
+static inline int
 feenableexcept(int __mask)
 {
 	union __fpscr __r;
@@ -239,7 +245,7 @@ feenableexcept(int __mask)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-head mailing list