summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Forsyth <charles.forsyth@gmail.com>2015-07-18 11:46:40 +0100
committerCharles Forsyth <charles.forsyth@gmail.com>2015-07-18 11:46:40 +0100
commit8e8fedb8e7cf4ae3a038c5ac8fbf1b6868e805f1 (patch)
treef02319a2ae87f6f23f3b6b025f20e6ec820d2ad9
parent799f9c8c85c76c3ef40091c1f469049343650f16 (diff)
move fp control to lib9
-rw-r--r--MacOSX/power/include/fpuctl.h81
-rw-r--r--MacOSX/power/include/lib9.h48
2 files changed, 48 insertions, 81 deletions
diff --git a/MacOSX/power/include/fpuctl.h b/MacOSX/power/include/fpuctl.h
deleted file mode 100644
index c1a83845..00000000
--- a/MacOSX/power/include/fpuctl.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * MacOSX/Darwin ppc fpu support
- * Mimic Plan9 floating point support
- */
-
-#include <architecture/ppc/fp_regs.h>
-
-static __inline__ ulong
-getfcr(void)
-{
- ppc_fp_scr_t fpscr = get_fp_scr();
- return ((ulong *)&fpscr)[1];
-}
-
-ulong
-getfsr(void)
-{
- ppc_fp_scr_t fpscr = get_fp_scr();
- return ((ulong *)&fpscr)[1];
-}
-
-void
-setfsr(ulong fsr)
-{
- ppc_fp_scr_t fpscr;
- // fpscr = get_fp_scr();
- (((ulong *)&fpscr)[1]) = fsr;
- set_fp_scr(fpscr);
-}
-
-void
-setfcr(ulong fcr)
-{
- ppc_fp_scr_t fpscr;
- // fpscr = get_fp_scr();
- (((ulong *)&fpscr)[1]) = fcr;
- set_fp_scr(fpscr);
-}
-
-/* FPSCR */
-#define FPSFX (1<<31) /* exception summary (sticky) */
-#define FPSEX (1<<30) /* enabled exception summary */
-#define FPSVX (1<<29) /* invalid operation exception summary */
-#define FPSOX (1<<28) /* overflow exception OX (sticky) */
-#define FPSUX (1<<27) /* underflow exception UX (sticky) */
-#define FPSZX (1<<26) /* zero divide exception ZX (sticky) */
-#define FPSXX (1<<25) /* inexact exception XX (sticky) */
-#define FPSVXSNAN (1<<24) /* invalid operation exception for SNaN (sticky) */
-#define FPSVXISI (1<<23) /* invalid operation exception for ∞-∞ (sticky) */
-#define FPSVXIDI (1<<22) /* invalid operation exception for ∞/∞ (sticky) */
-#define FPSVXZDZ (1<<21) /* invalid operation exception for 0/0 (sticky) */
-#define FPSVXIMZ (1<<20) /* invalid operation exception for ∞*0 (sticky) */
-#define FPSVXVC (1<<19) /* invalid operation exception for invalid compare (sticky) */
-#define FPSFR (1<<18) /* fraction rounded */
-#define FPSFI (1<<17) /* fraction inexact */
-#define FPSFPRF (1<<16) /* floating point result class */
-#define FPSFPCC (0xF<<12) /* <, >, =, unordered */
-#define FPVXCVI (1<<8) /* enable exception for invalid integer convert (sticky) */
-
-/* FCR */
-#define FPVE (1<<7) /* invalid operation exception enable */
-#define FPOVFL (1<<6) /* enable overflow exceptions */
-#define FPUNFL (1<<5) /* enable underflow */
-#define FPZDIV (1<<4) /* enable zero divide */
-#define FPINEX (1<<3) /* enable inexact exceptions */
-#define FPRMASK (3<<0) /* rounding mode */
-#define FPRNR (0<<0)
-#define FPRZ (1<<0)
-#define FPRPINF (2<<0)
-#define FPRNINF (3<<0)
-#define FPPEXT 0
-#define FPPSGL 0
-#define FPPDBL 0
-#define FPPMASK 0
-#define FPINVAL FPVE
-/* FSR */
-#define FPAOVFL FPSOX
-#define FPAINEX FPSXX
-#define FPAUNFL FPSUX
-#define FPAZDIV FPSZX
-#define FPAINVAL FPSVX
diff --git a/MacOSX/power/include/lib9.h b/MacOSX/power/include/lib9.h
index b00716b1..88ee728f 100644
--- a/MacOSX/power/include/lib9.h
+++ b/MacOSX/power/include/lib9.h
@@ -487,3 +487,51 @@ extern char *argv0;
#define setbinmode()
+
+/* FPSCR */
+#define FPSFX (1<<31) /* exception summary (sticky) */
+#define FPSEX (1<<30) /* enabled exception summary */
+#define FPSVX (1<<29) /* invalid operation exception summary */
+#define FPSOX (1<<28) /* overflow exception OX (sticky) */
+#define FPSUX (1<<27) /* underflow exception UX (sticky) */
+#define FPSZX (1<<26) /* zero divide exception ZX (sticky) */
+#define FPSXX (1<<25) /* inexact exception XX (sticky) */
+#define FPSVXSNAN (1<<24) /* invalid operation exception for SNaN (sticky) */
+#define FPSVXISI (1<<23) /* invalid operation exception for ∞-∞ (sticky) */
+#define FPSVXIDI (1<<22) /* invalid operation exception for ∞/∞ (sticky) */
+#define FPSVXZDZ (1<<21) /* invalid operation exception for 0/0 (sticky) */
+#define FPSVXIMZ (1<<20) /* invalid operation exception for ∞*0 (sticky) */
+#define FPSVXVC (1<<19) /* invalid operation exception for invalid compare (sticky) */
+#define FPSFR (1<<18) /* fraction rounded */
+#define FPSFI (1<<17) /* fraction inexact */
+#define FPSFPRF (1<<16) /* floating point result class */
+#define FPSFPCC (0xF<<12) /* <, >, =, unordered */
+#define FPVXCVI (1<<8) /* enable exception for invalid integer convert (sticky) */
+
+/* FCR */
+#define FPVE (1<<7) /* invalid operation exception enable */
+#define FPOVFL (1<<6) /* enable overflow exceptions */
+#define FPUNFL (1<<5) /* enable underflow */
+#define FPZDIV (1<<4) /* enable zero divide */
+#define FPINEX (1<<3) /* enable inexact exceptions */
+#define FPRMASK (3<<0) /* rounding mode */
+#define FPRNR (0<<0)
+#define FPRZ (1<<0)
+#define FPRPINF (2<<0)
+#define FPRNINF (3<<0)
+#define FPPEXT 0
+#define FPPSGL 0
+#define FPPDBL 0
+#define FPPMASK 0
+#define FPINVAL FPVE
+/* FSR */
+#define FPAOVFL FPSOX
+#define FPAINEX FPSXX
+#define FPAUNFL FPSUX
+#define FPAZDIV FPSZX
+#define FPAINVAL FPSVX
+
+extern void setfcr(ulong);
+extern void setfsr(ulong);
+extern ulong getfcr(void):
+extern ulong getfsr(void);