summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Linux/386/include/fpuctl.h76
-rw-r--r--Linux/arm/include/fpuctl.h52
-rw-r--r--Linux/power/include/fpuctl.h83
-rw-r--r--Linux/spim/include/fpuctl.h65
4 files changed, 0 insertions, 276 deletions
diff --git a/Linux/386/include/fpuctl.h b/Linux/386/include/fpuctl.h
index 8389f6ee..e69de29b 100644
--- a/Linux/386/include/fpuctl.h
+++ b/Linux/386/include/fpuctl.h
@@ -1,76 +0,0 @@
-/*
- * Linux 386 fpu support
- * Mimic Plan9 floating point support
- */
-
-static void
-setfcr(ulong fcr)
-{
- __asm__( "xorb $0x3f, %%al\n\t"
- "pushw %%ax\n\t"
- "fwait\n\t"
- "fldcw (%%esp)\n\t"
- "popw %%ax\n\t"
- : /* no output */
- : "al" (fcr)
- );
-}
-
-static ulong
-getfcr(void)
-{
- ulong fcr = 0;
-
- __asm__( "pushl %%eax\n\t"
- "fwait\n\t"
- "fstcw (%%esp)\n\t"
- "popl %%eax\n\t"
- "xorb $0x3f, %%al\n\t"
- : "=a" (fcr)
- : "eax" (fcr)
- );
- return fcr;
-}
-
-static ulong
-getfsr(void)
-{
- ulong fsr = -1;
-
- __asm__( "fwait\n\t"
- "fstsw (%%eax)\n\t"
- "movl (%%eax), %%eax\n\t"
- "andl $0xffff, %%eax\n\t"
- : "=a" (fsr)
- : "eax" (&fsr)
- );
- return fsr;
-}
-
-static void
-setfsr(ulong fsr)
-{
- __asm__("fclex\n\t");
-}
-
-/* FCR */
-#define FPINEX (1<<5)
-#define FPUNFL ((1<<4)|(1<<1))
-#define FPOVFL (1<<3)
-#define FPZDIV (1<<2)
-#define FPINVAL (1<<0)
-#define FPRNR (0<<10)
-#define FPRZ (3<<10)
-#define FPRPINF (2<<10)
-#define FPRNINF (1<<10)
-#define FPRMASK (3<<10)
-#define FPPEXT (3<<8)
-#define FPPSGL (0<<8)
-#define FPPDBL (2<<8)
-#define FPPMASK (3<<8)
-/* FSR */
-#define FPAINEX FPINEX
-#define FPAOVFL FPOVFL
-#define FPAUNFL FPUNFL
-#define FPAZDIV FPZDIV
-#define FPAINVAL FPINVAL
diff --git a/Linux/arm/include/fpuctl.h b/Linux/arm/include/fpuctl.h
index 7903c04b..e69de29b 100644
--- a/Linux/arm/include/fpuctl.h
+++ b/Linux/arm/include/fpuctl.h
@@ -1,52 +0,0 @@
-/*
- * Linux arm fpu support
- * Mimic Plan9 floating point support
- */
-
-#include <fenv.h>
-
-static void
-setfcr(ulong fcr)
-{
-}
-
-static ulong
-getfcr(void)
-{
- ulong fcr = 0;
- return fcr;
-}
-
-static ulong
-getfsr(void)
-{
- ulong fsr = -1;
- return fsr;
-}
-
-static void
-setfsr(ulong fsr)
-{
-}
-
-/* FCR */
-#define FPINEX (1<<5)
-#define FPUNFL ((1<<4)|(1<<1))
-#define FPOVFL (1<<3)
-#define FPZDIV (1<<2)
-#define FPINVAL (1<<0)
-#define FPRNR (0<<10)
-#define FPRZ (3<<10)
-#define FPRPINF (2<<10)
-#define FPRNINF (1<<10)
-#define FPRMASK (3<<10)
-#define FPPEXT (3<<8)
-#define FPPSGL (0<<8)
-#define FPPDBL (2<<8)
-#define FPPMASK (3<<8)
-/* FSR */
-#define FPAINEX FPINEX
-#define FPAOVFL FPOVFL
-#define FPAUNFL FPUNFL
-#define FPAZDIV FPZDIV
-#define FPAINVAL FPINVAL
diff --git a/Linux/power/include/fpuctl.h b/Linux/power/include/fpuctl.h
index fd03942c..e69de29b 100644
--- a/Linux/power/include/fpuctl.h
+++ b/Linux/power/include/fpuctl.h
@@ -1,83 +0,0 @@
-/*
- * Linux PPC
- * Mimic Plan9 floating point support
- */
-
-static __inline__ ulong
-getfcr(void)
-{
- float fpscr;
-
- __asm__ __volatile__ ("mffs %0" : "=&f" (fpscr):);
-
- return (ulong)fpscr;
-}
-
-static __inline__ ulong
-getfsr(void)
-{
- float fpscr;
-
- __asm__ __volatile__ ("mffs %0" : "=&f" (fpscr):);
-
- return (ulong) fpscr;
-}
-
-static __inline__ void
-setfsr(ulong fsr)
-{
- float t = (float) fsr;
-
- __asm__ __volatile__("mtfsf 0xff, %0" : : "f" (t) );
-}
-
-static __inline__ void
-setfcr(ulong fcr)
-{
- float t = (float) fcr;
-
- __asm__ __volatile__("mtfsf 0xff, %0" : : "f" (t) );
-}
-
-/* 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/Linux/spim/include/fpuctl.h b/Linux/spim/include/fpuctl.h
index ad5dcba7..e69de29b 100644
--- a/Linux/spim/include/fpuctl.h
+++ b/Linux/spim/include/fpuctl.h
@@ -1,65 +0,0 @@
-/* FCR */
-#define FCRBITS 0x00000F83
-#define FPINEX (1<<7)
-#define FPUNFL (1<<8)
-#define FPOVFL (1<<9)
-#define FPZDIV (1<<10)
-#define FPINVAL (1<<11)
-#define FPRNR (0<<0)
-#define FPRZ (1<<0)
-#define FPRPINF (2<<0)
-#define FPRNINF (3<<0)
-#define FPRMASK (3<<0)
-#define FPPEXT 0
-#define FPPSGL 0
-#define FPPDBL 0
-#define FPPMASK 0
-/* FSR */
-#define FSRBITS 0x0003F07C
-#define FPAINEX (1<<2)
-#define FPAOVFL (1<<4)
-#define FPAUNFL (1<<3)
-#define FPAZDIV (1<<5)
-#define FPAINVAL (1<<6)
-
-/*
- * Linux mips fpu support
- * Mimic Plan9 floating point support
- */
-
-static void
-setfcr(ulong fcr)
-{
- __asm__("ctc1 %0,$31\n"
- : :"r" (fcr)
- );
-}
-
-static ulong
-getfcr(void)
-{
- ulong fcr = 0;
- __asm__("cfc1 %0,$31\n"
- : "=r" (fcr)
- );
- fcr &= FCRBITS;
- return fcr;
-}
-
-static ulong
-getfsr(void)
-{
- ulong fsr = 0;
- __asm__("cfc1 %0,$31\n"
- : "=r" (fsr)
- );
- fsr &= FSRBITS;
- return fsr;
-}
-
-static void
-setfsr(ulong fsr)
-{
- fsr |= getfcr();
- setfcr(getfcr()|fsr);
-}