CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 09:42:43 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
Now, FPU emulation for booke and ibm4xx works fine at a level where
all the related ATF tests pass correctly. However, there still remain
problems:

- FEX and VX bits for FPSCR cannot be modified by mcrfs, mtfsf{,i},
  and mtfsb[01].
- Invalid operations should be treated differently depending on
  FPSCR[VE].

Therefore, comment them in order not to be forgotten.

No binary changes.


To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.32 src/sys/arch/powerpc/fpu/fpu_emu.c:1.33
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.32	Wed Jul 15 09:36:35 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 09:42:43 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.32 2020/07/15 09:36:35 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.33 2020/07/15 09:42:43 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.32 2020/07/15 09:36:35 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.33 2020/07/15 09:42:43 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -605,6 +605,15 @@ fpu_execute(struct trapframe *tf, struct
 fe->fe_cx = mask & a[1];
 fe->fe_fpscr = (fe->fe_fpscr&~mask) | 
 	(fe->fe_cx);
+/*
+ * XXX
+ * Forbidden to set FEX and VX, also for
+ * mcrfs, mtfsfi, and mtfsb[01].
+ *
+ * XXX
+ * Handle invalid operation differently,
+ * depending on VE.
+ */
 /* XXX weird stuff about OX, FX, FEX, and VX should be handled */
 break;
 			case	OPC63_FCTID:



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 09:36:35 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
Try to fix FPSCR bits in the end of emulation:

- FPSCR[FEX] is not a sticky bit.
- Turn on FPSCR[FEX] if the emulated instruction causes invalid operation,
  and invalid operation exception is not masked out.
- FPSCR[VX] is not a sticky bit, however it should be set when at least
  one of FPSCR[VXfoo] bits (they are sticky!) is set.
- FPSCR[FX] is a sticky bit, and it should be set if FPSCR is modified by
  instructions other than mtfsf{,i}.


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.31 src/sys/arch/powerpc/fpu/fpu_emu.c:1.32
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.31	Wed Jul 15 09:22:26 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 09:36:35 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.31 2020/07/15 09:22:26 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.32 2020/07/15 09:36:35 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.31 2020/07/15 09:22:26 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.32 2020/07/15 09:36:35 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -147,7 +147,9 @@ FPU_EMU_EVCNT_DECL(fnmadd);
 			FPSCR_VXZDZ|FPSCR_VXIMZ|FPSCR_VXVC|FPSCR_VXSOFT|\
 			FPSCR_VXSQRT|FPSCR_VXCVI)
 #define	FPSR_EX		(FPSCR_VE|FPSCR_OE|FPSCR_UE|FPSCR_ZE|FPSCR_XE)
-#define	FPSR_EXOP	(FPSR_EX_MSK&(~FPSR_EX))
+#define	FPSR_INV	(FPSCR_VXSNAN|FPSCR_VXISI|FPSCR_VXIDI|		\
+			FPSCR_VXZDZ|FPSCR_VXIMZ|FPSCR_VXVC|FPSCR_VXSOFT|\
+			FPSCR_VXSQRT|FPSCR_VXCVI)
 
 
 int fpe_debug = 0;
@@ -287,6 +289,7 @@ fpu_execute(struct trapframe *tf, struct
 	int ra, rb, rc, rt, type, mask, fsr, cx, bf, setcr;
 	unsigned int cond;
 	struct fpreg *fs;
+	int mtfsf = 0;
 
 	/* Setup work. */
 	fp = NULL;
@@ -550,6 +553,7 @@ fpu_execute(struct trapframe *tf, struct
 	sizeof(double));
 break;
 			case	OPC63_MTFSFI:
+mtfsf = 1;
 FPU_EMU_EVCNT_INCR(mtfsfi);
 DPRINTF(FPE_INSN, ("fpu_execute: MTFSFI\n"));
 rb >>= 1;
@@ -585,6 +589,7 @@ fpu_execute(struct trapframe *tf, struct
 	sizeof(fs->fpscr));
 break;
 			case	OPC63_MTFSF:
+mtfsf = 1;
 FPU_EMU_EVCNT_INCR(mtfsf);
 DPRINTF(FPE_INSN, ("fpu_execute: MTFSF\n"));
 if ((rt = instr.i_xfl.i_flm) == -1)
@@ -769,11 +774,10 @@ fpu_execute(struct trapframe *tf, struct
 	if (fp)
 		fpu_implode(fe, fp, type, (u_int *)>fpreg[rt]);
 	cx = fe->fe_cx;
-	fsr = fe->fe_fpscr;
+	fsr = fe->fe_fpscr & ~(FPSCR_FEX|FPSCR_VX);
 	if (cx != 0) {
-		fsr &= ~FPSCR_FX;
-		if ((cx^fsr)_EX_MSK)
-			fsr |= FPSCR_FX;
+		if (cx & FPSR_INV)
+			cx |= FPSCR_VX;
 		mask = fsr & FPSR_EX;
 		mask <<= (25-3);
 		if (cx & mask) 
@@ -782,11 +786,13 @@ fpu_execute(struct trapframe *tf, struct
 			/* Need to replace CC */
 			fsr &= ~FPSCR_FPRF;
 		}
-		if (cx & (FPSR_EXOP))
-			fsr |= FPSCR_VX;
 		fsr |= cx;
 		DPRINTF(FPE_INSN, ("fpu_execute: cx %x, fsr %x\n", cx, fsr));
 	}
+	if (fsr & FPSR_INV)
+		fsr |= FPSCR_VX;
+	if (mtfsf == 0 && ((fsr ^ fe->fe_fpscr) & FPSR_EX_MSK))
+		fsr |= FPSCR_FX;
 
 	if (cond) {
 		cond = fsr & 0xf000;



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 09:22:26 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
Set ksi_code correctly via fpu_get_fault_code() for SIGFPE.


To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.30 src/sys/arch/powerpc/fpu/fpu_emu.c:1.31
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.30	Wed Jul 15 09:16:35 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 09:22:26 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.30 2020/07/15 09:16:35 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.31 2020/07/15 09:22:26 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.30 2020/07/15 09:16:35 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.31 2020/07/15 09:22:26 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -244,6 +244,7 @@ success:
 		DPRINTF(FPE_EX, ("fpu_emulate: SIGFPE\n"));
 		ksi->ksi_signo = SIGFPE;
 		ksi->ksi_trap = EXC_PGM;
+		ksi->ksi_code = fpu_get_fault_code();
 		return true;
 
 	case FAULT:



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 09:16:35 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
Do not raise SIGFPE unless MSR[FE0] or MSR[FE1] is set via fenv(3).


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.29 src/sys/arch/powerpc/fpu/fpu_emu.c:1.30
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.29	Wed Jul 15 08:29:07 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 09:16:35 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.29 2020/07/15 08:29:07 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.30 2020/07/15 09:16:35 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.29 2020/07/15 08:29:07 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.30 2020/07/15 09:16:35 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -92,6 +92,8 @@ __KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 
 #include 
 
 #include 
+#include 
+
 #include 
 #include 
 #include 
@@ -191,6 +193,7 @@ fpu_dumpfpn(struct fpn *fp)
 bool
 fpu_emulate(struct trapframe *tf, struct fpreg *fpf, ksiginfo_t *ksi)
 {
+	struct pcb *pcb;
 	union instr insn;
 	struct fpemu fe;
 
@@ -229,11 +232,15 @@ fpu_emulate(struct trapframe *tf, struct
 	}
 	switch (fpu_execute(tf, , )) {
 	case 0:
+success:
 		DPRINTF(FPE_EX, ("fpu_emulate: success\n"));
 		tf->tf_srr0 += 4;
 		return true;
 
 	case FPE:
+		pcb = lwp_getpcb(curlwp);
+		if ((pcb->pcb_flags & PSL_FE_PREC) == 0)
+			goto success;
 		DPRINTF(FPE_EX, ("fpu_emulate: SIGFPE\n"));
 		ksi->ksi_signo = SIGFPE;
 		ksi->ksi_trap = EXC_PGM;



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 08:29:07 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
FPSCR[FEX] is not a sticky bit; it is always cleared when read from
userland via mffs on real hardware.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.28 src/sys/arch/powerpc/fpu/fpu_emu.c:1.29
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.28	Wed Jul 15 08:10:41 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 08:29:07 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.28 2020/07/15 08:10:41 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.29 2020/07/15 08:29:07 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.28 2020/07/15 08:10:41 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.29 2020/07/15 08:29:07 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -571,6 +571,8 @@ fpu_execute(struct trapframe *tf, struct
 			case	OPC63_MFFS:
 FPU_EMU_EVCNT_INCR(mffs);
 DPRINTF(FPE_INSN, ("fpu_execute: MFFS\n"));
+/* XXX FEX is not sticky */
+fs->fpscr &= ~FPSCR_FEX;
 memcpy(>fpreg[rt], >fpscr,
 	sizeof(fs->fpscr));
 break;



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 08:10:41 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
PR port-powerpc/55425

Fix emulation for mtfsf; source register is frB here.

Now, userland processes successfully change rounding mode, by which
FPU-optimized code in OpenSSL works just fine as far as I can see.


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.27 src/sys/arch/powerpc/fpu/fpu_emu.c:1.28
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.27	Wed Jul 15 07:54:25 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 08:10:41 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.27 2020/07/15 07:54:25 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.28 2020/07/15 08:10:41 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.27 2020/07/15 07:54:25 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.28 2020/07/15 08:10:41 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -586,7 +586,7 @@ fpu_execute(struct trapframe *tf, struct
 		if (rt & (1fpreg[rb];
 fe->fe_cx = mask & a[1];
 fe->fe_fpscr = (fe->fe_fpscr&~mask) | 
 	(fe->fe_cx);



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 07:54:25 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
For trap instruction, ksi_code should be TRAP_BRKPT not TRAP_TRACE.


To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.26 src/sys/arch/powerpc/fpu/fpu_emu.c:1.27
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.26	Wed Jul 15 07:52:58 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 07:54:25 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.26 2020/07/15 07:52:58 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.27 2020/07/15 07:54:25 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.26 2020/07/15 07:52:58 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.27 2020/07/15 07:54:25 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -224,7 +224,7 @@ fpu_emulate(struct trapframe *tf, struct
 		DPRINTF(FPE_EX, ("fpu_emulate: SIGTRAP\n"));
 		ksi->ksi_signo = SIGTRAP;
 		ksi->ksi_trap = EXC_PGM;
-		ksi->ksi_code = TRAP_TRACE;
+		ksi->ksi_code = TRAP_BRKPT;
 		return true;
 	}
 	switch (fpu_execute(tf, , )) {



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 07:52:58 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
Do not set ksi->ksi_addr twice. No functional changes.


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.25 src/sys/arch/powerpc/fpu/fpu_emu.c:1.26
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.25	Wed Jul 15 07:37:25 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 07:52:58 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.25 2020/07/15 07:37:25 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.26 2020/07/15 07:52:58 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.25 2020/07/15 07:37:25 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.26 2020/07/15 07:52:58 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -211,7 +211,6 @@ fpu_emulate(struct trapframe *tf, struct
 		ksi->ksi_signo = SIGSEGV;
 		ksi->ksi_trap = EXC_ISI;
 		ksi->ksi_code = SEGV_MAPERR;
-		ksi->ksi_addr = (void *)tf->tf_srr0;
 		return true;
 	}
 
@@ -226,7 +225,6 @@ fpu_emulate(struct trapframe *tf, struct
 		ksi->ksi_signo = SIGTRAP;
 		ksi->ksi_trap = EXC_PGM;
 		ksi->ksi_code = TRAP_TRACE;
-		ksi->ksi_addr = (void *)tf->tf_srr0;
 		return true;
 	}
 	switch (fpu_execute(tf, , )) {



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 07:47:27 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_div.c

Log Message:
Do not raise divide-by-zero exception when dividend is zero.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/powerpc/fpu/fpu_div.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_div.c
diff -u src/sys/arch/powerpc/fpu/fpu_div.c:1.5 src/sys/arch/powerpc/fpu/fpu_div.c:1.6
--- src/sys/arch/powerpc/fpu/fpu_div.c:1.5	Sat Jun 27 03:07:57 2020
+++ src/sys/arch/powerpc/fpu/fpu_div.c	Wed Jul 15 07:47:27 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_div.c,v 1.5 2020/06/27 03:07:57 rin Exp $ */
+/*	$NetBSD: fpu_div.c,v 1.6 2020/07/15 07:47:27 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,7 +45,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_div.c,v 1.5 2020/06/27 03:07:57 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_div.c,v 1.6 2020/07/15 07:47:27 rin Exp $");
 
 #include 
 #if defined(DIAGNOSTIC)||defined(DEBUG)
@@ -200,7 +200,6 @@ fpu_div(struct fpemu *fe)
 		return (x);
 	}
 	if (ISZERO(x)) {
-		fe->fe_cx |= FPSCR_ZX;
 		if (x->fp_class == y->fp_class) {
 			fe->fe_cx |= FPSCR_VXZDZ;
 			return (fpu_newnan(fe));



CVS commit: src/sys/arch/powerpc/fpu

2020-07-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Jul 15 07:37:25 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
Remove old workaround foe cache problem on ibm4xx.
The problem seems gone already.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.24 src/sys/arch/powerpc/fpu/fpu_emu.c:1.25
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.24	Mon Jul  6 10:31:23 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Jul 15 07:37:25 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.24 2020/07/06 10:31:23 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.25 2020/07/15 07:37:25 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,11 +76,10 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.24 2020/07/06 10:31:23 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.25 2020/07/15 07:37:25 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
-#include "opt_ppcarch.h"
 #endif
 
 #include 
@@ -260,17 +259,6 @@ fpu_emulate(struct trapframe *tf, struct
 			opc_disasm((vaddr_t)(tf->tf_srr0), insn.i_int);
 		}
 #endif
-#if defined(PPC_IBM4XX) && defined(DDB) && defined(DEBUG)
-		/*
-		*  retry an illegal insn once due to cache issues.
-		*/
-		static int lastill = 0;
-		if (lastill == tf->tf_srr0) {
-			if (fpe_debug & FPE_EX)
-Debugger();
-		}
-		lastill = tf->tf_srr0;
-#endif /* PPC_IBM4XX && DDB && DEBUG */
 		return false;
 	}
 }



CVS commit: src/sys/arch/powerpc/fpu

2020-06-26 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Sat Jun 27 04:31:06 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
fpu_dumpfpn(): Add KASSERT to check argument != NULL.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.21 src/sys/arch/powerpc/fpu/fpu_emu.c:1.22
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.21	Sat Jun 27 04:18:57 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Sat Jun 27 04:31:06 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.21 2020/06/27 04:18:57 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.22 2020/06/27 04:31:06 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.21 2020/06/27 04:18:57 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.22 2020/06/27 04:31:06 rin Exp $");
 
 #include "opt_ddb.h"
 
@@ -163,6 +163,8 @@ fpu_dumpfpn(struct fpn *fp)
 		"SNAN", "QNAN", "ZERO", "NUM", "INF"
 	};
 
+	KASSERT(fp != NULL);
+
 	printf("%s %c.%x %x %x %xE%d\n", class[fp->fp_class + 2],
 		fp->fp_sign ? '-' : ' ',
 		fp->fp_mant[0],	fp->fp_mant[1],



CVS commit: src/sys/arch/powerpc/fpu

2020-06-26 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Sat Jun 27 04:29:27 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_sqrt.c

Log Message:
Return +INF without exception for +INF, as required by the architecture.
Also, avoid NULL dereference for fpu_dumpfpn() aka DUMPFPN().

Taken from (remaining part of) FreeBSD Revision 343078:
https://svnweb.freebsd.org/base?view=revision=343078


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/powerpc/fpu/fpu_sqrt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_sqrt.c
diff -u src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.8 src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.9
--- src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.8	Sat Jun 27 04:17:51 2020
+++ src/sys/arch/powerpc/fpu/fpu_sqrt.c	Sat Jun 27 04:29:27 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_sqrt.c,v 1.8 2020/06/27 04:17:51 rin Exp $ */
+/*	$NetBSD: fpu_sqrt.c,v 1.9 2020/06/27 04:29:27 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,7 +45,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_sqrt.c,v 1.8 2020/06/27 04:17:51 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_sqrt.c,v 1.9 2020/06/27 04:29:27 rin Exp $");
 
 #include 
 #if defined(DIAGNOSTIC)||defined(DEBUG)
@@ -230,9 +230,8 @@ fpu_sqrt(struct fpemu *fe)
 		return (fpu_newnan(fe));
 	}
 	if (ISINF(x)) {
-		fe->fe_cx |= FPSCR_VXSQRT;
-		DUMPFPN(FPE_REG, 0);
-		return (0);
+		DUMPFPN(FPE_REG, x);
+		return (x);
 	}
 
 	/*



CVS commit: src/sys/arch/powerpc/fpu

2020-06-26 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Sat Jun 27 04:24:08 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_explode.c

Log Message:
Remove extra newline in DPRINTF().


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/powerpc/fpu/fpu_explode.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_explode.c
diff -u src/sys/arch/powerpc/fpu/fpu_explode.c:1.8 src/sys/arch/powerpc/fpu/fpu_explode.c:1.9
--- src/sys/arch/powerpc/fpu/fpu_explode.c:1.8	Sat Jun 27 03:07:57 2020
+++ src/sys/arch/powerpc/fpu/fpu_explode.c	Sat Jun 27 04:24:08 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_explode.c,v 1.8 2020/06/27 03:07:57 rin Exp $ */
+/*	$NetBSD: fpu_explode.c,v 1.9 2020/06/27 04:24:08 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -46,7 +46,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_explode.c,v 1.8 2020/06/27 03:07:57 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_explode.c,v 1.9 2020/06/27 04:24:08 rin Exp $");
 
 #include 
 #include 
@@ -258,5 +258,4 @@ fpu_explode(struct fpemu *fe, struct fpn
 ((type == FTYPE_DBL) ? 'd' : '?'))),
 		reg));
 	DUMPFPN(FPE_REG, fp);
-	DPRINTF(FPE_REG, ("\n"));
 }



CVS commit: src/sys/arch/powerpc/fpu

2020-06-26 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Sat Jun 27 04:18:57 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
fpu_dumpfpn(): Add missing \n in printf() format.


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.20 src/sys/arch/powerpc/fpu/fpu_emu.c:1.21
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.20	Sat Jun 27 03:07:57 2020
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Sat Jun 27 04:18:57 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.20 2020/06/27 03:07:57 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.21 2020/06/27 04:18:57 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.20 2020/06/27 03:07:57 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.21 2020/06/27 04:18:57 rin Exp $");
 
 #include "opt_ddb.h"
 
@@ -163,7 +163,7 @@ fpu_dumpfpn(struct fpn *fp)
 		"SNAN", "QNAN", "ZERO", "NUM", "INF"
 	};
 
-	printf("%s %c.%x %x %x %xE%d", class[fp->fp_class + 2],
+	printf("%s %c.%x %x %x %xE%d\n", class[fp->fp_class + 2],
 		fp->fp_sign ? '-' : ' ',
 		fp->fp_mant[0],	fp->fp_mant[1],
 		fp->fp_mant[2], fp->fp_mant[3], 



CVS commit: src/sys/arch/powerpc/fpu

2020-06-26 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Sat Jun 27 04:17:51 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_sqrt.c

Log Message:
Fix typo in DPRINTF.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/powerpc/fpu/fpu_sqrt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_sqrt.c
diff -u src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.7 src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.8
--- src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.7	Sat Jun 27 03:25:28 2020
+++ src/sys/arch/powerpc/fpu/fpu_sqrt.c	Sat Jun 27 04:17:51 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_sqrt.c,v 1.7 2020/06/27 03:25:28 rin Exp $ */
+/*	$NetBSD: fpu_sqrt.c,v 1.8 2020/06/27 04:17:51 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,7 +45,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_sqrt.c,v 1.7 2020/06/27 03:25:28 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_sqrt.c,v 1.8 2020/06/27 04:17:51 rin Exp $");
 
 #include 
 #if defined(DIAGNOSTIC)||defined(DEBUG)
@@ -211,7 +211,7 @@ fpu_sqrt(struct fpemu *fe)
 	 *
 	 * Then all that remains are numbers with mantissas in [1..2).
 	 */
-	DPRINTF(FPE_REG, ("fpu_sqer:\n"));
+	DPRINTF(FPE_REG, ("fpu_sqrt:\n"));
 	DUMPFPN(FPE_REG, x);
 	DPRINTF(FPE_REG, ("=>\n"));
 	if (ISNAN(x)) {



CVS commit: src/sys/arch/powerpc/fpu

2020-06-26 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Sat Jun 27 03:25:28 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_sqrt.c

Log Message:
Set FPSCR[VXSQRT] for non-zero negative operand.

Taken from (a part of) FreeBSD Revision 343078:
https://svnweb.freebsd.org/base?view=revision=343078


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/powerpc/fpu/fpu_sqrt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_sqrt.c
diff -u src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.6 src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.7
--- src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.6	Sat Jun 27 03:07:57 2020
+++ src/sys/arch/powerpc/fpu/fpu_sqrt.c	Sat Jun 27 03:25:28 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_sqrt.c,v 1.6 2020/06/27 03:07:57 rin Exp $ */
+/*	$NetBSD: fpu_sqrt.c,v 1.7 2020/06/27 03:25:28 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,7 +45,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_sqrt.c,v 1.6 2020/06/27 03:07:57 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_sqrt.c,v 1.7 2020/06/27 03:25:28 rin Exp $");
 
 #include 
 #if defined(DIAGNOSTIC)||defined(DEBUG)
@@ -226,6 +226,7 @@ fpu_sqrt(struct fpemu *fe)
 		return (x);
 	}
 	if (x->fp_sign) {
+		fe->fe_cx |= FPSCR_VXSQRT;
 		return (fpu_newnan(fe));
 	}
 	if (ISINF(x)) {



CVS commit: src/sys/arch/powerpc/fpu

2020-06-26 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Sat Jun 27 03:07:57 UTC 2020

Modified Files:
src/sys/arch/powerpc/fpu: fpu_add.c fpu_compare.c fpu_div.c fpu_emu.c
fpu_explode.c fpu_implode.c fpu_mul.c fpu_sqrt.c fpu_subr.c

Log Message:
Sort headers. No functional changes intended.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/powerpc/fpu/fpu_add.c \
src/sys/arch/powerpc/fpu/fpu_compare.c src/sys/arch/powerpc/fpu/fpu_div.c \
src/sys/arch/powerpc/fpu/fpu_mul.c src/sys/arch/powerpc/fpu/fpu_subr.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/powerpc/fpu/fpu_emu.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/powerpc/fpu/fpu_explode.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/powerpc/fpu/fpu_implode.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/powerpc/fpu/fpu_sqrt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_add.c
diff -u src/sys/arch/powerpc/fpu/fpu_add.c:1.4 src/sys/arch/powerpc/fpu/fpu_add.c:1.5
--- src/sys/arch/powerpc/fpu/fpu_add.c:1.4	Sun Dec 11 12:18:42 2005
+++ src/sys/arch/powerpc/fpu/fpu_add.c	Sat Jun 27 03:07:57 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_add.c,v 1.4 2005/12/11 12:18:42 christos Exp $ */
+/*	$NetBSD: fpu_add.c,v 1.5 2020/06/27 03:07:57 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -47,16 +47,16 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_add.c,v 1.4 2005/12/11 12:18:42 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_add.c,v 1.5 2020/06/27 03:07:57 rin Exp $");
 
 #include 
 #if defined(DIAGNOSTIC)||defined(DEBUG)
 #include 
 #endif
 
-#include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
Index: src/sys/arch/powerpc/fpu/fpu_compare.c
diff -u src/sys/arch/powerpc/fpu/fpu_compare.c:1.4 src/sys/arch/powerpc/fpu/fpu_compare.c:1.5
--- src/sys/arch/powerpc/fpu/fpu_compare.c:1.4	Sun Dec 11 12:18:42 2005
+++ src/sys/arch/powerpc/fpu/fpu_compare.c	Sat Jun 27 03:07:57 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_compare.c,v 1.4 2005/12/11 12:18:42 christos Exp $ */
+/*	$NetBSD: fpu_compare.c,v 1.5 2020/06/27 03:07:57 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -48,12 +48,12 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_compare.c,v 1.4 2005/12/11 12:18:42 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_compare.c,v 1.5 2020/06/27 03:07:57 rin Exp $");
 
 #include 
 
-#include 
 #include 
+#include 
 
 #include 
 #include 
Index: src/sys/arch/powerpc/fpu/fpu_div.c
diff -u src/sys/arch/powerpc/fpu/fpu_div.c:1.4 src/sys/arch/powerpc/fpu/fpu_div.c:1.5
--- src/sys/arch/powerpc/fpu/fpu_div.c:1.4	Sun Dec 11 12:18:42 2005
+++ src/sys/arch/powerpc/fpu/fpu_div.c	Sat Jun 27 03:07:57 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_div.c,v 1.4 2005/12/11 12:18:42 christos Exp $ */
+/*	$NetBSD: fpu_div.c,v 1.5 2020/06/27 03:07:57 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,15 +45,15 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_div.c,v 1.4 2005/12/11 12:18:42 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_div.c,v 1.5 2020/06/27 03:07:57 rin Exp $");
 
 #include 
 #if defined(DIAGNOSTIC)||defined(DEBUG)
 #include 
 #endif
 
-#include 
 #include 
+#include 
 
 #include 
 #include 
Index: src/sys/arch/powerpc/fpu/fpu_mul.c
diff -u src/sys/arch/powerpc/fpu/fpu_mul.c:1.4 src/sys/arch/powerpc/fpu/fpu_mul.c:1.5
--- src/sys/arch/powerpc/fpu/fpu_mul.c:1.4	Sun Dec 11 12:18:42 2005
+++ src/sys/arch/powerpc/fpu/fpu_mul.c	Sat Jun 27 03:07:57 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_mul.c,v 1.4 2005/12/11 12:18:42 christos Exp $ */
+/*	$NetBSD: fpu_mul.c,v 1.5 2020/06/27 03:07:57 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,15 +45,15 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_mul.c,v 1.4 2005/12/11 12:18:42 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_mul.c,v 1.5 2020/06/27 03:07:57 rin Exp $");
 
 #include 
 #if defined(DIAGNOSTIC)||defined(DEBUG)
 #include 
 #endif
 
-#include 
 #include 
+#include 
 
 #include 
 #include 
Index: src/sys/arch/powerpc/fpu/fpu_subr.c
diff -u src/sys/arch/powerpc/fpu/fpu_subr.c:1.4 src/sys/arch/powerpc/fpu/fpu_subr.c:1.5
--- src/sys/arch/powerpc/fpu/fpu_subr.c:1.4	Sun Dec 11 12:18:42 2005
+++ src/sys/arch/powerpc/fpu/fpu_subr.c	Sat Jun 27 03:07:57 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_subr.c,v 1.4 2005/12/11 12:18:42 christos Exp $ */
+/*	$NetBSD: fpu_subr.c,v 1.5 2020/06/27 03:07:57 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,16 +45,16 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_subr.c,v 1.4 2005/12/11 12:18:42 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_subr.c,v 1.5 2020/06/27 03:07:57 rin Exp $");
 
 #include 
 #if defined(DIAGNOSTIC)||defined(DEBUG)
 #include 
 #endif
 
-#include 
 #include 
 #include 
+#include 
 
 #include 
 #include 

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.19 src/sys/arch/powerpc/fpu/fpu_emu.c:1.20
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.19	Wed Dec 28 

CVS commit: src/sys/arch/powerpc/fpu

2016-12-28 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Dec 28 10:52:30 UTC 2016

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
PR port-powerpc/51368: powerpc FPU emulation fails for single precision
floating point arithmetic

For single precision instruction, calculate first in double precision,
and then round it. With this fix, single precision arithmetic gets sane
on ibm4xx and booke.

Taken from FreeBSD commit r258250:
  https://svnweb.freebsd.org/base?view=revision=258250

Ok matt and simonb.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.18 src/sys/arch/powerpc/fpu/fpu_emu.c:1.19
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.18	Thu Dec 15 11:32:03 2016
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Wed Dec 28 10:52:30 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.18 2016/12/15 11:32:03 rin Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.19 2016/12/28 10:52:30 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.18 2016/12/15 11:32:03 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.19 2016/12/28 10:52:30 rin Exp $");
 
 #include "opt_ddb.h"
 
@@ -626,9 +626,11 @@ fpu_execute(struct trapframe *tf, struct
 			rb = instr.i_a.i_frb;
 			rc = instr.i_a.i_frc;
 
-			type = FTYPE_SNG;
-			if (instr.i_any.i_opcd & 0x4)
-type = FTYPE_DBL;
+			/*
+			 * All arithmetic operations work on registers, which
+			 * are stored as doubles.
+			 */
+			type = FTYPE_DBL;
 			switch ((unsigned int)instr.i_a.i_xo) {
 			case	OPC59_FDIVS:
 FPU_EMU_EVCNT_INCR(fdiv);
@@ -745,6 +747,13 @@ fpu_execute(struct trapframe *tf, struct
 return (NOTFPU);
 break;
 			}
+
+			/* If the instruction was single precision, round */
+			if (!(instr.i_any.i_opcd & 0x4)) {
+fpu_implode(fe, fp, FTYPE_SNG, 
+	(u_int *)>fpreg[rt]);
+fpu_explode(fe, fp = >fe_f1, FTYPE_SNG, rt);
+			}
 		}
 	} else {
 		return (NOTFPU);



CVS commit: src/sys/arch/powerpc/fpu

2016-12-28 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Wed Dec 28 10:30:04 UTC 2016

Modified Files:
src/sys/arch/powerpc/fpu: fpu_explode.c

Log Message:
- add missing default from FreeBSD
- remove duplicate panic pointed out by matt


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/powerpc/fpu/fpu_explode.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_explode.c
diff -u src/sys/arch/powerpc/fpu/fpu_explode.c:1.6 src/sys/arch/powerpc/fpu/fpu_explode.c:1.7
--- src/sys/arch/powerpc/fpu/fpu_explode.c:1.6	Sun Dec 11 12:18:42 2005
+++ src/sys/arch/powerpc/fpu/fpu_explode.c	Wed Dec 28 10:30:04 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_explode.c,v 1.6 2005/12/11 12:18:42 christos Exp $ */
+/*	$NetBSD: fpu_explode.c,v 1.7 2016/12/28 10:30:04 rin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -46,7 +46,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_explode.c,v 1.6 2005/12/11 12:18:42 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_explode.c,v 1.7 2016/12/28 10:30:04 rin Exp $");
 
 #include 
 #include 
@@ -235,7 +235,7 @@ fpu_explode(struct fpemu *fe, struct fpn
 		s = fpu_dtof(fp, s, space[1]);
 		break;
 
-		panic("fpu_explode");
+	default:
 		panic("fpu_explode: invalid type %d", type);
 	}
 



CVS commit: src/sys/arch/powerpc/fpu

2016-12-15 Thread Rin Okuyama
Module Name:src
Committed By:   rin
Date:   Thu Dec 15 11:32:03 UTC 2016

Modified Files:
src/sys/arch/powerpc/fpu: fpu_emu.c

Log Message:
Fix build without DDB.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/powerpc/fpu/fpu_emu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.17 src/sys/arch/powerpc/fpu/fpu_emu.c:1.18
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.17	Tue Aug 12 20:27:10 2014
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Thu Dec 15 11:32:03 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.17 2014/08/12 20:27:10 joerg Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.18 2016/12/15 11:32:03 rin Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.17 2014/08/12 20:27:10 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.18 2016/12/15 11:32:03 rin Exp $");
 
 #include "opt_ddb.h"
 
@@ -248,14 +248,14 @@ fpu_emulate(struct trapframe *tf, struct
 	case NOTFPU:
 	default:
 		DPRINTF(FPE_EX, ("fpu_emulate: SIGILL\n"));
-#ifdef DEBUG
+#if defined(DDB) && defined(DEBUG)
 		if (fpe_debug & FPE_EX) {
 			printf("fpu_emulate:  illegal insn %x at %p:",
 			insn.i_int, (void *) (tf->tf_srr0));
 			opc_disasm((vaddr_t)(tf->tf_srr0), insn.i_int);
 		}
 #endif
-#if defined(PPC_IBM4XX) && defined(DEBUG)
+#if defined(PPC_IBM4XX) && defined(DDB) && defined(DEBUG)
 		/*
 		*  retry an illegal insn once due to cache issues.
 		*/
@@ -265,7 +265,7 @@ fpu_emulate(struct trapframe *tf, struct
 Debugger();
 		}
 		lastill = tf->tf_srr0;
-#endif /* PPC_IBM4XX && DEBUG */
+#endif /* PPC_IBM4XX && DDB && DEBUG */
 		return false;
 	}
 }



CVS commit: src/sys/arch/powerpc/fpu

2014-02-25 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Tue Feb 25 14:16:25 UTC 2014

Modified Files:
src/sys/arch/powerpc/fpu: fpu_sqrt.c

Log Message:
Mark a temporary as __USEd


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/powerpc/fpu/fpu_sqrt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_sqrt.c
diff -u src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.4 src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.5
--- src/sys/arch/powerpc/fpu/fpu_sqrt.c:1.4	Sun Dec 11 12:18:42 2005
+++ src/sys/arch/powerpc/fpu/fpu_sqrt.c	Tue Feb 25 14:16:25 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_sqrt.c,v 1.4 2005/12/11 12:18:42 christos Exp $ */
+/*	$NetBSD: fpu_sqrt.c,v 1.5 2014/02/25 14:16:25 martin Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,7 +45,7 @@
  */
 
 #include sys/cdefs.h
-__KERNEL_RCSID(0, $NetBSD: fpu_sqrt.c,v 1.4 2005/12/11 12:18:42 christos Exp $);
+__KERNEL_RCSID(0, $NetBSD: fpu_sqrt.c,v 1.5 2014/02/25 14:16:25 martin Exp $);
 
 #include sys/types.h
 #if defined(DIAGNOSTIC)||defined(DEBUG)
@@ -381,7 +381,7 @@ fpu_sqrt(struct fpemu *fe)
 	bit = 1  31;
 	EVEN_DOUBLE;
 	t3 = bit;
-	FPU_SUBS(d3, x3, t3);
+	FPU_SUBS(d3, x3, t3); __USE(d3);
 	FPU_SUBCS(d2, x2, t2);
 	FPU_SUBCS(d1, x1, t1);
 	FPU_SUBC(d0, x0, t0);