summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Linux/386/include/lib9.h27
-rw-r--r--Linux/arm/include/lib9.h29
-rw-r--r--Linux/power/include/lib9.h49
-rw-r--r--Linux/spim/include/lib9.h30
4 files changed, 135 insertions, 0 deletions
diff --git a/Linux/386/include/lib9.h b/Linux/386/include/lib9.h
index cae240ac..24f1e528 100644
--- a/Linux/386/include/lib9.h
+++ b/Linux/386/include/lib9.h
@@ -235,6 +235,7 @@ extern ulong ntruerand(ulong);
* math
*/
extern int isNaN(double);
+extern double NaN(void);
extern int isInf(double, int);
/*
@@ -463,3 +464,29 @@ extern char *argv0;
#define setbinmode()
+/* 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
+
+extern void setfcr(ulong);
+extern void setfsr(ulong);
+extern ulong getfcr(void);
+extern ulong getfsr(void);
diff --git a/Linux/arm/include/lib9.h b/Linux/arm/include/lib9.h
index abd478e2..c05d2a86 100644
--- a/Linux/arm/include/lib9.h
+++ b/Linux/arm/include/lib9.h
@@ -234,6 +234,7 @@ extern ulong ntruerand(ulong);
* math
*/
extern int isNaN(double);
+extern double NaN(void);
extern int isInf(double, int);
/*
@@ -470,3 +471,31 @@ static __inline uintptr getcallerpc(void* dummy) {
);
return lr;
}
+
+
+extern void setfcr(ulong);
+extern void setfsr(ulong);
+extern ulong getfcr(void);
+extern ulong getfsr(void);
+
+/* 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/lib9.h b/Linux/power/include/lib9.h
index e9a2939e..34acb990 100644
--- a/Linux/power/include/lib9.h
+++ b/Linux/power/include/lib9.h
@@ -235,6 +235,7 @@ extern ulong ntruerand(ulong);
* math
*/
extern int isNaN(double);
+extern double NaN(void);
extern int isInf(double, int);
/*
@@ -463,3 +464,51 @@ extern char *argv0;
#define setbinmode()
+extern void setfcr(ulong);
+extern void setfsr(ulong);
+extern ulong getfcr(void);
+extern ulong getfsr(void);
+
+
+/* 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/lib9.h b/Linux/spim/include/lib9.h
index dd04e100..64d9342e 100644
--- a/Linux/spim/include/lib9.h
+++ b/Linux/spim/include/lib9.h
@@ -236,6 +236,7 @@ extern ulong ntruerand(ulong);
* math
*/
extern int isNaN(double);
+extern double NaN(void);
extern int isInf(double, int);
/*
@@ -464,3 +465,32 @@ extern char *argv0;
#define setbinmode()
+
+extern void setfcr(ulong);
+extern void setfsr(ulong);
+extern ulong getfcr(void);
+extern ulong getfsr(void);
+
+/* 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)