This is the mail archive of the libc-alpha@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]

Re: Adapt installed powerpc headers better for soft-float / no-FPRs


On Mon, 14 Jan 2013, Roland McGrath wrote:

> > +#if !defined _SOFT_FLOAT && !defined __NO_FPRS__
> >  /* The powerpc has a combined multiply/add instruction.  */
> > -# define FP_FAST_FMA 1
> > -# define FP_FAST_FMAF 1
> > +#  define FP_FAST_FMA 1
> > +#  define FP_FAST_FMAF 1
> > +#endif
> 
> You added the second space to the define lines but omitted the necessary
> single space on the if/endif.
> 
> > -#if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_MATH_INLINES
> > +#if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_FPRS__ \
> > +  && !defined __NO_MATH_INLINES
> 
> Please use parens in such cases so the indentation is coherent.

This version has both those fixes.

2013-01-15  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/powerpc/bits/mathdef.h [_SOFT_FLOAT || __NO_FPRS__]
	(FP_FAST_FMA): Do not define.
	[_SOFT_FLOAT || __NO_FPRS__] (FP_FAST_FMAF): Likewise.
	* sysdeps/powerpc/fpu/bits/fenvinline.h [__GNUC__ && !_SOFT_FLOAT
	&& !__NO_MATH_INLINES]: Add [!__NO_FPRS__] condition.
	* sysdeps/powerpc/fpu/bits/mathinline.h [__GNUC__ &&
	!_SOFT_FLOAT]: Likewise.
	* sysdeps/powerpc/fpu/fpu_control.h [_SOFT_FLOAT || __NO_FPRS__]
	[_SOFT_FLOAT || __NO_FPRS__] (_FPU_RESERVED): Define with generic
	value.
	[_SOFT_FLOAT || __NO_FPRS__] (_FPU_DEFAULT): Likewise.
	[_SOFT_FLOAT || __NO_FPRS__] (fpu_control_t): Likewise.
	[_SOFT_FLOAT || __NO_FPRS__] (_FPU_GETCW): Likewise.
	[_SOFT_FLOAT || __NO_FPRS__] (_FPU_SETCW): Likewise.
	[_SOFT_FLOAT || __NO_FPRS__] (__fpu_control): Likewise.
	[!_SOFT_FLOAT && !__NO_FPRS__]: Condition previous contents of
	file.

diff --git a/sysdeps/powerpc/bits/mathdef.h b/sysdeps/powerpc/bits/mathdef.h
index 288cc6c..b3c21fe 100644
--- a/sysdeps/powerpc/bits/mathdef.h
+++ b/sysdeps/powerpc/bits/mathdef.h
@@ -37,8 +37,10 @@ typedef double double_t;
 # define FP_ILOGB0	(-2147483647)
 # define FP_ILOGBNAN	(2147483647)
 
+# if !defined _SOFT_FLOAT && !defined __NO_FPRS__
 /* The powerpc has a combined multiply/add instruction.  */
-# define FP_FAST_FMA 1
-# define FP_FAST_FMAF 1
+#  define FP_FAST_FMA 1
+#  define FP_FAST_FMAF 1
+# endif
 
 #endif	/* ISO C99 */
diff --git a/sysdeps/powerpc/fpu/bits/fenvinline.h b/sysdeps/powerpc/fpu/bits/fenvinline.h
index 44b4d44..0720795 100644
--- a/sysdeps/powerpc/fpu/bits/fenvinline.h
+++ b/sysdeps/powerpc/fpu/bits/fenvinline.h
@@ -16,7 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_MATH_INLINES
+#if (defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_FPRS__	\
+     && !defined __NO_MATH_INLINES)
 
 /* Inline definition for fegetround.  */
 # define fegetround() \
@@ -56,4 +57,4 @@
       : 0)								      \
    : (feclearexcept) (__excepts))
 
-#endif /* __GNUC__ && !_SOFT_FLOAT */
+#endif /* __GNUC__ && !_SOFT_FLOAT && !__NO_FPRS__ */
diff --git a/sysdeps/powerpc/fpu/bits/mathinline.h b/sysdeps/powerpc/fpu/bits/mathinline.h
index b0b1a96..140fff0 100644
--- a/sysdeps/powerpc/fpu/bits/mathinline.h
+++ b/sysdeps/powerpc/fpu/bits/mathinline.h
@@ -26,7 +26,7 @@
 # define __MATH_INLINE __extern_inline
 #endif  /* __cplusplus */
 
-#if defined __GNUC__ && !defined _SOFT_FLOAT
+#if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_FPRS__
 
 #ifdef __USE_ISOC99
 # if !__GNUC_PREREQ (2,97)
@@ -127,4 +127,4 @@ __NTH (fdimf (float __x, float __y))
 
 #endif /* __USE_ISOC99 */
 #endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */
-#endif /* __GNUC__ && !_SOFT_FLOAT */
+#endif /* __GNUC__ && !_SOFT_FLOAT && !__NO_FPRS__ */
diff --git a/sysdeps/powerpc/fpu/fpu_control.h b/sysdeps/powerpc/fpu/fpu_control.h
index 09342fb..159543b 100644
--- a/sysdeps/powerpc/fpu/fpu_control.h
+++ b/sysdeps/powerpc/fpu/fpu_control.h
@@ -19,42 +19,53 @@
 #ifndef _FPU_CONTROL_H
 #define _FPU_CONTROL_H
 
+#if defined _SOFT_FLOAT || defined __NO_FPRS__
+
+# define _FPU_RESERVED 0xffffffff
+# define _FPU_DEFAULT  0x00000000 /* Default value.  */
+typedef unsigned int fpu_control_t;
+# define _FPU_GETCW(cw) (cw) = 0
+# define _FPU_SETCW(cw) (void) (cw)
+extern fpu_control_t __fpu_control;
+
+#else /* PowerPC 6xx floating-point.  */
+
 /* rounding control */
-#define _FPU_RC_NEAREST 0x00   /* RECOMMENDED */
-#define _FPU_RC_DOWN    0x03
-#define _FPU_RC_UP      0x02
-#define _FPU_RC_ZERO    0x01
+# define _FPU_RC_NEAREST 0x00   /* RECOMMENDED */
+# define _FPU_RC_DOWN    0x03
+# define _FPU_RC_UP      0x02
+# define _FPU_RC_ZERO    0x01
 
-#define _FPU_MASK_NI  0x04 /* non-ieee mode */
+# define _FPU_MASK_NI  0x04 /* non-ieee mode */
 
 /* masking of interrupts */
-#define _FPU_MASK_ZM  0x10 /* zero divide */
-#define _FPU_MASK_OM  0x40 /* overflow */
-#define _FPU_MASK_UM  0x20 /* underflow */
-#define _FPU_MASK_XM  0x08 /* inexact */
-#define _FPU_MASK_IM  0x80 /* invalid operation */
+# define _FPU_MASK_ZM  0x10 /* zero divide */
+# define _FPU_MASK_OM  0x40 /* overflow */
+# define _FPU_MASK_UM  0x20 /* underflow */
+# define _FPU_MASK_XM  0x08 /* inexact */
+# define _FPU_MASK_IM  0x80 /* invalid operation */
 
-#define _FPU_RESERVED 0xffffff00 /* These bits are reserved are not changed. */
+# define _FPU_RESERVED 0xffffff00 /* These bits are reserved are not changed. */
 
 /* The fdlibm code requires no interrupts for exceptions.  */
-#define _FPU_DEFAULT  0x00000000 /* Default value.  */
+# define _FPU_DEFAULT  0x00000000 /* Default value.  */
 
 /* IEEE:  same as above, but (some) exceptions;
    we leave the 'inexact' exception off.
  */
-#define _FPU_IEEE     0x000000f0
+# define _FPU_IEEE     0x000000f0
 
 /* Type of the control word.  */
 typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
 
 /* Macros for accessing the hardware control word.  */
-#define _FPU_GETCW(__cw) ( { \
+# define _FPU_GETCW(__cw) ( { \
   union { double d; fpu_control_t cw[2]; } \
     tmp __attribute__ ((__aligned__(8))); \
   __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0"); \
   (__cw)=tmp.cw[1]; \
   tmp.cw[1]; } )
-#define _FPU_SETCW(__cw) { \
+# define _FPU_SETCW(__cw) { \
   union { double d; fpu_control_t cw[2]; } \
     tmp __attribute__ ((__aligned__(8))); \
   tmp.cw[0] = 0xFFF80000; /* More-or-less arbitrary; this is a QNaN. */ \
@@ -65,4 +76,6 @@ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
 /* Default control word set at startup.  */
 extern fpu_control_t __fpu_control;
 
+#endif /* PowerPC 6xx floating-point.  */
+
 #endif /* _FPU_CONTROL_H */

-- 
Joseph S. Myers
joseph@codesourcery.com


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