ieeefp.h: Remove i386 specifics.
authorPeter Avalos <pavalos@dragonflybsd.org>
Tue, 1 Feb 2011 07:59:03 +0000 (21:59 -1000)
committerPeter Avalos <pavalos@dragonflybsd.org>
Fri, 4 Feb 2011 06:46:06 +0000 (20:46 -1000)
Move the contents of <machine/floatingpoint.h> to <machine/ieeefp.h> for
i386 to match x86_64.

While I'm here, mark which versions of these files we have for x86_64.

Obtained-from: FreeBSD

include/ieeefp.h
sys/cpu/i386/include/floatingpoint.h
sys/cpu/i386/include/ieeefp.h
sys/cpu/x86_64/include/floatingpoint.h
sys/cpu/x86_64/include/ieeefp.h

index 910ad16..981deea 100644 (file)
@@ -1,6 +1,5 @@
 /*     $NetBSD: ieeefp.h,v 1.4 1998/01/09 08:03:43 perry Exp $ */
-/* $FreeBSD: src/include/ieeefp.h,v 1.3.2.1 2000/08/17 08:08:14 jhb Exp $ */
-/* $DragonFly: src/include/ieeefp.h,v 1.4 2004/02/02 05:43:13 dillon Exp $ */
+/* $FreeBSD: src/include/ieeefp.h,v 1.7 2003/01/19 06:01:32 marcel Exp $ */
 
 /* 
  * Written by J.T. Conklin, Apr 6, 1995
@@ -13,9 +12,6 @@
 #include <sys/cdefs.h>
 #include <machine/ieeefp.h>
 
-#ifdef __i386__
-#include <machine/floatingpoint.h>
-#else /* !__i386__ */
 #if !defined(_IEEEFP_INLINED_)
 __BEGIN_DECLS
 extern fp_rnd_t    fpgetround(void);
@@ -26,6 +22,5 @@ extern fp_except_t fpgetsticky(void);
 extern fp_except_t fpsetsticky(fp_except_t);
 __END_DECLS
 #endif /* !_IEEEFP_INLINED_ */
-#endif /* __i386__ */
 
 #endif /* _IEEEFP_H_ */
index 944b032..44df111 100644 (file)
  * SUCH DAMAGE.
  *
  *     from: @(#) floatingpoint.h      1.0 (Berkeley) 9/23/93
- * $FreeBSD: src/sys/i386/include/floatingpoint.h,v 1.10.2.1 2002/06/30 00:55:09 bde Exp $
- * $DragonFly: src/sys/cpu/i386/include/floatingpoint.h,v 1.5 2006/11/07 17:51:21 dillon Exp $
+ * $FreeBSD: src/sys/i386/include/floatingpoint.h,v 1.14 2005/04/02 17:31:42 netchild Exp $
  */
 
 #ifndef _CPU_FLOATINGPOINT_H_
 #define _CPU_FLOATINGPOINT_H_
 
-/*
- * IEEE floating point structure and function definitions
- */
-
-/*-
- * XXX the following undocumented pollution is exported:
- *     fpsetsticky().
- *     FP*FLD, FP*OFF and FP*REG from <machine/ieeefp.h>
- */
-
 #include <sys/cdefs.h>
 #include <machine/ieeefp.h>
 
-#ifdef __GNUC__
-
-#define __fldenv(addr) __asm __volatile("fldenv %0" : : "m" (*(addr)))
-#define __fnstenv(addr)        __asm __volatile("fnstenv %0" : "=m" (*(addr)))
-#define __fnstcw(addr) __asm __volatile("fnstcw %0" : "=m" (*(addr)))
-#define __fnstsw(addr) __asm __volatile("fnstsw %0" : "=m" (*(addr)))
-
-/*
- * return the contents of a FP register
- */
-static __inline__ int
-__fpgetreg(int _reg)
-{
-       unsigned short _mem;
-
-       /*-
-        * This is more efficient than it looks.  The switch gets optimized
-        * away if _reg is constant.
-        *
-        * The default case only supports _reg == 0.  We could handle more
-        * registers (e.g., tags) using fnstenv, but the interface doesn't
-        * support more.
-        */
-       switch(_reg) {
-       default:
-               __fnstcw(&_mem);
-               break;
-       case FP_STKY_REG:
-               __fnstsw(&_mem);
-               break;
-       }
-       return _mem;
-}
-
-/*
- * set a FP mode; return previous mode
- */
-static __inline__ int
-__fpsetreg(int _m, int _reg, int _fld, int _off)
-{
-       unsigned _env[7];
-       unsigned _p;
-
-       /*
-        * _reg == 0 could be handled better using fnstcw/fldcw.
-        */
-       __fnstenv(_env);
-       _p =  (_env[_reg] & _fld) >> _off;
-       _env[_reg] = (_env[_reg] & ~_fld) | (_m << _off & _fld);
-       __fldenv(_env);
-       return _p;
-}
-
-#endif /* __GNUC__ */
-
-/*
- * SysV/386 FP control interface
- */
-#define        fpgetround()    ((fp_rnd_t)                                     \
-       ((__fpgetreg(FP_RND_REG) & FP_RND_FLD) >> FP_RND_OFF))
-#define        fpsetround(m)   ((fp_rnd_t)                                     \
-       __fpsetreg((m), FP_RND_REG, FP_RND_FLD, FP_RND_OFF))
-#define        fpgetprec()     ((fp_prec_t)                                    \
-       ((__fpgetreg(FP_PRC_REG) & FP_PRC_FLD) >> FP_PRC_OFF))
-#define        fpsetprec(m)    ((fp_prec_t)                                    \
-       __fpsetreg((m), FP_PRC_REG, FP_PRC_FLD, FP_PRC_OFF))
-#define        fpgetmask()     ((fp_except_t)                                  \
-       ((~__fpgetreg(FP_MSKS_REG) & FP_MSKS_FLD) >> FP_MSKS_OFF))
-#define        fpsetmask(m)    ((fp_except_t)                                  \
-       (~__fpsetreg(~(m), FP_MSKS_REG, FP_MSKS_FLD, FP_MSKS_OFF)) &    \
-           (FP_MSKS_FLD >> FP_MSKS_OFF))
-#define        fpgetsticky()   ((fp_except_t)                                  \
-       ((__fpgetreg(FP_STKY_REG) & FP_STKY_FLD) >> FP_STKY_OFF))
-#define        fpresetsticky(m) ((fp_except_t)                                 \
-       __fpsetreg(0, FP_STKY_REG, (m), FP_STKY_OFF))
-#define        fpsetsticky(m)  fpresetsticky(m)
-
 #endif /* !_CPU_FLOATINGPOINT_H_ */
index ca7223b..29176f7 100644 (file)
@@ -31,8 +31,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#) ieeefp.h     1.0 (Berkeley) 9/23/93
- * $FreeBSD: src/sys/i386/include/ieeefp.h,v 1.7 1999/08/28 00:44:15 peter Exp $
- * $DragonFly: src/sys/cpu/i386/include/ieeefp.h,v 1.3 2006/11/07 17:51:21 dillon Exp $
+ * $FreeBSD: src/sys/i386/include/ieeefp.h,v 1.8 2003/01/19 06:01:33 marcel Exp $
  */
 
 /*
@@ -99,4 +98,84 @@ typedef enum {
 #define FP_RND_OFF     10      /* round control offset */
 #define FP_STKY_OFF    0       /* sticky flags offset */
 
+#ifdef __GNUC__
+
+#define        __fldenv(addr)  __asm __volatile("fldenv %0" : : "m" (*(addr)))
+#define        __fnstenv(addr) __asm __volatile("fnstenv %0" : "=m" (*(addr)))
+#define        __fnstcw(addr)  __asm __volatile("fnstcw %0" : "=m" (*(addr)))
+#define        __fnstsw(addr)  __asm __volatile("fnstsw %0" : "=m" (*(addr)))
+
+/*
+ * return the contents of a FP register
+ */
+static __inline__ int
+__fpgetreg(int _reg)
+{
+       unsigned short _mem;
+
+       /*-
+        * This is more efficient than it looks.  The switch gets optimized
+        * away if _reg is constant.
+        *
+        * The default case only supports _reg == 0.  We could handle more
+        * registers (e.g., tags) using fnstenv, but the interface doesn't
+        * support more.
+        */
+       switch(_reg) {
+       default:
+               __fnstcw(&_mem);
+               break;
+       case FP_STKY_REG:
+               __fnstsw(&_mem);
+               break;
+       }
+       return _mem;
+}
+
+/*
+ * set a FP mode; return previous mode
+ */
+static __inline__ int
+__fpsetreg(int _m, int _reg, int _fld, int _off)
+{
+       unsigned _env[7];
+       unsigned _p;
+
+       /*
+        * _reg == 0 could be handled better using fnstcw/fldcw.
+        */
+       __fnstenv(_env);
+       _p =  (_env[_reg] & _fld) >> _off;
+       _env[_reg] = (_env[_reg] & ~_fld) | (_m << _off & _fld);
+       __fldenv(_env);
+       return _p;
+}
+
+#endif /* __GNUC__ */
+
+/*
+ * SysV/386 FP control interface
+ */
+#define        fpgetround()    ((fp_rnd_t)                                     \
+       ((__fpgetreg(FP_RND_REG) & FP_RND_FLD) >> FP_RND_OFF))
+#define        fpsetround(m)   ((fp_rnd_t)                                     \
+       __fpsetreg((m), FP_RND_REG, FP_RND_FLD, FP_RND_OFF))
+#define        fpgetprec()     ((fp_prec_t)                                    \
+       ((__fpgetreg(FP_PRC_REG) & FP_PRC_FLD) >> FP_PRC_OFF))
+#define        fpsetprec(m)    ((fp_prec_t)                                    \
+       __fpsetreg((m), FP_PRC_REG, FP_PRC_FLD, FP_PRC_OFF))
+#define        fpgetmask()     ((fp_except_t)                                  \
+       ((~__fpgetreg(FP_MSKS_REG) & FP_MSKS_FLD) >> FP_MSKS_OFF))
+#define        fpsetmask(m)    ((fp_except_t)                                  \
+       (~__fpsetreg(~(m), FP_MSKS_REG, FP_MSKS_FLD, FP_MSKS_OFF)) &    \
+           (FP_MSKS_FLD >> FP_MSKS_OFF))
+#define        fpgetsticky()   ((fp_except_t)                                  \
+       ((__fpgetreg(FP_STKY_REG) & FP_STKY_FLD) >> FP_STKY_OFF))
+#define        fpresetsticky(m) ((fp_except_t)                                 \
+       __fpsetreg(0, FP_STKY_REG, (m), FP_STKY_OFF))
+#define        fpsetsticky(m)  fpresetsticky(m)
+
+/* Suppress prototypes in the MI header. */
+#define        _IEEEFP_INLINED_        1
+
 #endif /* !_CPU_IEEEFP_H_ */
index 0d68923..f9059a5 100644 (file)
@@ -31,8 +31,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#) floatingpoint.h      1.0 (Berkeley) 9/23/93
- * $FreeBSD: src/sys/i386/include/floatingpoint.h,v 1.10.2.1 2002/06/30 00:55:09 bde Exp $
- * $DragonFly: src/sys/cpu/i386/include/floatingpoint.h,v 1.5 2006/11/07 17:51:21 dillon Exp $
+ * $FreeBSD: src/sys/amd64/include/floatingpoint.h,v 1.14 2005/04/02 17:31:42 netchild Exp $
  */
 
 #ifndef _CPU_FLOATINGPOINT_H_
index 2f5d551..4a30098 100644 (file)
@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#) ieeefp.h     1.0 (Berkeley) 9/23/93
- * $FreeBSD: src/sys/amd64/include/ieeefp.h,v 1.11 2003/11/08 04:39:22 peter Exp $
+ * $FreeBSD: src/sys/amd64/include/ieeefp.h,v 1.19 2008/01/11 17:11:32 bde Exp $
  */
 
 #ifndef _CPU_IEEEFP_H_