9front - general discussion about 9front
 help / color / mirror / Atom feed
* [9front] bring ape/float.h macros in line with u.h
@ 2021-02-01 18:39 james palmer
  2021-02-03 23:06 ` Jonas Amoson
  0 siblings, 1 reply; 2+ messages in thread
From: james palmer @ 2021-02-01 18:39 UTC (permalink / raw)
  To: 9front mailing list

[-- Attachment #1: Type: text/plain, Size: 83 bytes --]

noticed this building netsurf on 386.
this fixes it for all architectures.

- james

[-- Attachment #2: fp.diff --]
[-- Type: text/plain, Size: 7676 bytes --]

diff -r 3acf47d7abbb 386/include/ape/float.h
--- a/386/include/ape/float.h	Tue Jan 26 18:07:04 2021 -0800
+++ b/386/include/ape/float.h	Mon Feb 01 18:35:30 2021 +0000
@@ -52,9 +52,10 @@
 #ifdef _PLAN9_SOURCE
 /* FCR */
 #define	FPINEX	(1<<5)
+#define	FPUNFL	((1<<4)|(1<<1))
 #define	FPOVFL	(1<<3)
-#define	FPUNFL	((1<<4)|(1<<1))
 #define	FPZDIV	(1<<2)
+#define	FPINVAL	(1<<0)
 #define	FPRNR	(0<<10)
 #define	FPRZ	(3<<10)
 #define	FPRPINF	(2<<10)
@@ -69,5 +70,6 @@
 #define	FPAOVFL	FPOVFL
 #define	FPAUNFL	FPUNFL
 #define	FPAZDIV	FPZDIV
+#define	FPAINVAL	FPINVAL
 #endif
 #endif /* __FLOAT */
diff -r 3acf47d7abbb 68020/include/ape/float.h
--- a/68020/include/ape/float.h	Tue Jan 26 18:07:04 2021 -0800
+++ b/68020/include/ape/float.h	Mon Feb 01 18:35:30 2021 +0000
@@ -58,6 +58,7 @@
 #define	FPZDIV	(1<<10)
 #define	FPRNR	(0<<4)
 #define	FPRZ	(1<<4)
+#define	FPINVAL	(3<<13)
 #define	FPRPINF	(3<<4)
 #define	FPRNINF	(2<<4)
 #define	FPRMASK	(3<<4)
@@ -70,5 +71,6 @@
 #define	FPAOVFL	FPOVFL
 #define	FPAUNFL	FPUNFL
 #define	FPAZDIV	FPZDIV
+#define	FPAINVAL	FPINVAL
 #endif
 #endif /* __FLOAT */
diff -r 3acf47d7abbb arm/include/ape/float.h
--- a/arm/include/ape/float.h	Tue Jan 26 18:07:04 2021 -0800
+++ b/arm/include/ape/float.h	Mon Feb 01 18:35:30 2021 +0000
@@ -50,24 +50,30 @@
 #define Sudden_Underflow 1
 #endif
 #ifdef _PLAN9_SOURCE
-/* FCR */
-#define	FPINEX	(1<<5)
-#define	FPOVFL	(1<<3)
-#define	FPUNFL	((1<<4)|(1<<1))
-#define	FPZDIV	(1<<2)
-#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
+/* VFP FPSCR (exceptions) */
+#define	FPINEX		(1<<12)
+#define	FPUNFL		(1<<11)
+#define	FPOVFL		(1<<10)
+#define	FPZDIV		(1<<9)
+#define	FPINVAL		(1<<8)
+
+/* VFP FPSCR (rounding) */
+#define	FPRNR		(0<<22)
+#define	FPRPINF		(1<<22)
+#define	FPRNINF		(2<<22)
+#define	FPRZ		(3<<22)
+
+#define	FPRMASK		(3<<22)
+
+/* VFP FPSCR (status) */
+#define	FPPEXT	0
+#define	FPPSGL	0
+#define	FPPDBL	0
+#define	FPPMASK	0
+#define	FPAINEX		(1<<4)
+#define	FPAUNFL		(1<<3)
+#define	FPAOVFL		(1<<2)
+#define	FPAZDIV		(1<<1)
+#define	FPAINVAL	(1<<0)
 #endif
 #endif /* __FLOAT */
diff -r 3acf47d7abbb arm64/include/ape/float.h
--- a/arm64/include/ape/float.h	Tue Jan 26 18:07:04 2021 -0800
+++ b/arm64/include/ape/float.h	Mon Feb 01 18:35:30 2021 +0000
@@ -50,24 +50,29 @@
 #define Sudden_Underflow 1
 #endif
 #ifdef _PLAN9_SOURCE
-/* FCR */
-#define	FPINEX	(1<<5)
-#define	FPOVFL	(1<<3)
-#define	FPUNFL	((1<<4)|(1<<1))
-#define	FPZDIV	(1<<2)
-#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
+/* FPCR (control) */
+#define	FPINEX		(1<<12)
+#define	FPUNFL		(1<<11)
+#define	FPOVFL		(1<<10)
+#define	FPZDIV		(1<<9)
+#define	FPINVAL		(1<<8)
+
+#define	FPRNR		(0<<22)
+#define	FPRPINF		(1<<22)
+#define	FPRNINF		(2<<22)
+#define	FPRZ		(3<<22)
+
+#define	FPRMASK		(3<<22)
+
+/* FPSR (status) */
+#define	FPPEXT	0
+#define	FPPSGL	0
+#define	FPPDBL	0
+#define	FPPMASK	0
+#define	FPAINEX		(1<<4)
+#define	FPAUNFL		(1<<3)
+#define	FPAOVFL		(1<<2)
+#define	FPAZDIV		(1<<1)
+#define	FPAINVAL	(1<<0)
 #endif
 #endif /* __FLOAT */
diff -r 3acf47d7abbb mips/include/ape/float.h
--- a/mips/include/ape/float.h	Tue Jan 26 18:07:04 2021 -0800
+++ b/mips/include/ape/float.h	Mon Feb 01 18:35:30 2021 +0000
@@ -52,9 +52,10 @@
 #ifdef _PLAN9_SOURCE
 /* FCR */
 #define	FPINEX	(1<<7)
+#define	FPUNFL	(1<<8)
 #define	FPOVFL	(1<<9)
-#define	FPUNFL	(1<<8)
 #define	FPZDIV	(1<<10)
+#define	FPINVAL	(1<<11)
 #define	FPRNR	(0<<0)
 #define	FPRZ	(1<<0)
 #define	FPRPINF	(2<<0)
@@ -69,5 +70,6 @@
 #define	FPAOVFL	(1<<4)
 #define	FPAUNFL	(1<<3)
 #define	FPAZDIV	(1<<5)
+#define	FPAINVAL	(1<<6)
 #endif
 #endif /* __FLOAT */
diff -r 3acf47d7abbb power/include/ape/float.h
--- a/power/include/ape/float.h	Tue Jan 26 18:07:04 2021 -0800
+++ b/power/include/ape/float.h	Mon Feb 01 18:35:30 2021 +0000
@@ -50,24 +50,45 @@
 #define Sudden_Underflow 1
 #endif
 #ifdef _PLAN9_SOURCE
-/* FCR */
-#define	FPINEX	(1<<7)
-#define	FPOVFL	(1<<9)
-#define	FPUNFL	(1<<8)
-#define	FPZDIV	(1<<10)
+/* 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) */
+#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	FPRMASK	(3<<0)
 #define	FPPEXT	0
 #define	FPPSGL	0
 #define	FPPDBL	0
 #define	FPPMASK	0
-/* FSR */
-#define	FPAINEX	(1<<2)
-#define	FPAOVFL	(1<<4)
-#define	FPAUNFL	(1<<3)
-#define	FPAZDIV	(1<<5)
+#define	FPINVAL	FPVE
+
+#define	FPAOVFL	FPSOX
+#define	FPAINEX	FPSXX
+#define	FPAUNFL	FPSUX
+#define	FPAZDIV	FPSZX
+#define	FPAINVAL	FPSVX
 #endif
 #endif /* __FLOAT */
diff -r 3acf47d7abbb sparc/include/ape/float.h
--- a/sparc/include/ape/float.h	Tue Jan 26 18:07:04 2021 -0800
+++ b/sparc/include/ape/float.h	Mon Feb 01 18:35:30 2021 +0000
@@ -57,6 +57,7 @@
 #define	FPZDIV	(1<<24)
 #define	FPRNR	(0<<30)
 #define	FPRZ	(1<<30)
+#define	FPINVAL	(1<<27)
 #define	FPRPINF	(2<<30)
 #define	FPRNINF	(3<<30)
 #define	FPRMASK	(3<<30)
@@ -66,8 +67,9 @@
 #define	FPPMASK	0
 /* FSR */
 #define	FPAINEX	(1<<5)
+#define	FPAZDIV	(1<<6)
+#define	FPAUNFL	(1<<7)
 #define	FPAOVFL	(1<<8)
-#define	FPAUNFL	(1<<7)
-#define	FPAZDIV	(1<<6)
+#define	FPAINVAL	(1<<9)
 #endif
 #endif /* __FLOAT */
diff -r 3acf47d7abbb sparc64/include/ape/float.h
--- a/sparc64/include/ape/float.h	Tue Jan 26 18:07:04 2021 -0800
+++ b/sparc64/include/ape/float.h	Mon Feb 01 18:35:30 2021 +0000
@@ -57,6 +57,7 @@
 #define	FPZDIV	(1<<24)
 #define	FPRNR	(0<<30)
 #define	FPRZ	(1<<30)
+#define	FPINVAL	(1<<27)
 #define	FPRPINF	(2<<30)
 #define	FPRNINF	(3<<30)
 #define	FPRMASK	(3<<30)
@@ -66,8 +67,9 @@
 #define	FPPMASK	0
 /* FSR */
 #define	FPAINEX	(1<<5)
+#define	FPAZDIV	(1<<6)
+#define	FPAUNFL	(1<<7)
 #define	FPAOVFL	(1<<8)
-#define	FPAUNFL	(1<<7)
-#define	FPAZDIV	(1<<6)
+#define	FPAINVAL	(1<<9)
 #endif
 #endif /* __FLOAT */

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [9front] bring ape/float.h macros in line with u.h
  2021-02-01 18:39 [9front] bring ape/float.h macros in line with u.h james palmer
@ 2021-02-03 23:06 ` Jonas Amoson
  0 siblings, 0 replies; 2+ messages in thread
From: Jonas Amoson @ 2021-02-03 23:06 UTC (permalink / raw)
  To: 9front

This looks like the right thing to me.
I don’t see why APE would be different
here than the native u.h. Right now only
amd64 defines FPINVAL in both u.h and
APE, but all other architectures have it
defined in u.h. Phils’ latest changes to
netsurf flips FPINVAL in order for it to be
less sensitive in certain calculations (i.e.
resulting in a divide by zero). For example,
oading http://www.theregister.co.uk works
if FPINVAL is flipped, and crashes if not.
This is not my discovery, I bumped into the
same compilation error, and was informed.
Any objections for including the patch?

On Mon, 1 Feb 2021 at 21:15, james palmer <james@biobuf.link> wrote:
>
> noticed this building netsurf on 386.
> this fixes it for all architectures.
>
> - james

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-02-05 11:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-01 18:39 [9front] bring ape/float.h macros in line with u.h james palmer
2021-02-03 23:06 ` Jonas Amoson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).