Module Name:    src
Committed By:   skrll
Date:           Fri Apr  6 12:21:59 UTC 2012

Modified Files:
        src/sys/arch/hp700/conf: GENERIC
        src/sys/arch/hp700/dev: cpu.c
        src/sys/arch/hp700/hp700: locore.S
        src/sys/arch/hppa/hppa: fpu.c trap.S trap.c

Log Message:
unifdef FPEMUL. All our supported systems have an FPU.


To generate a diff of this commit:
cvs rdiff -u -r1.112 -r1.113 src/sys/arch/hp700/conf/GENERIC
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/hp700/dev/cpu.c
cvs rdiff -u -r1.59 -r1.60 src/sys/arch/hp700/hp700/locore.S
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/hppa/hppa/fpu.c
cvs rdiff -u -r1.65 -r1.66 src/sys/arch/hppa/hppa/trap.S
cvs rdiff -u -r1.99 -r1.100 src/sys/arch/hppa/hppa/trap.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/hp700/conf/GENERIC
diff -u src/sys/arch/hp700/conf/GENERIC:1.112 src/sys/arch/hp700/conf/GENERIC:1.113
--- src/sys/arch/hp700/conf/GENERIC:1.112	Sat Mar 10 21:51:52 2012
+++ src/sys/arch/hp700/conf/GENERIC	Fri Apr  6 12:21:58 2012
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.112 2012/03/10 21:51:52 joerg Exp $
+# $NetBSD: GENERIC,v 1.113 2012/04/06 12:21:58 skrll Exp $
 #
 # GENERIC machine description file
 #
@@ -23,7 +23,7 @@ include 	"arch/hp700/conf/std.hp700"
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 options 	SYSCTL_INCLUDE_DESCR	# Include sysctl descriptions in kernel
 
-#ident 		"GENERIC-$Revision: 1.112 $"
+#ident 		"GENERIC-$Revision: 1.113 $"
 
 maxusers	32		# estimated number of users
 
@@ -40,7 +40,6 @@ options 	HP8600_CPU		# PCX-W+ (in 32bit 
 options 	HP8700_CPU		# PCX-W2 (in 32bit mode)
 
 # CPU-related options.
-options 	FPEMUL		# floating point emulation XXX DO NOT REMOVE
 options 	USELEDS		# blink 'em
 
 # delay between "rebooting ..." message and hardware reset, in milliseconds

Index: src/sys/arch/hp700/dev/cpu.c
diff -u src/sys/arch/hp700/dev/cpu.c:1.22 src/sys/arch/hp700/dev/cpu.c:1.23
--- src/sys/arch/hp700/dev/cpu.c:1.22	Thu Apr  5 21:00:29 2012
+++ src/sys/arch/hp700/dev/cpu.c	Fri Apr  6 12:21:58 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.22 2012/04/05 21:00:29 skrll Exp $	*/
+/*	$NetBSD: cpu.c,v 1.23 2012/04/06 12:21:58 skrll Exp $	*/
 
 /*	$OpenBSD: cpu.c,v 1.29 2009/02/08 18:33:28 miod Exp $	*/
 
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.22 2012/04/05 21:00:29 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.23 2012/04/06 12:21:58 skrll Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -146,23 +146,14 @@ cpuattach(device_t parent, device_t self
 		aprint_normal(", %u/%u D/I BTLBs", pdc_btlb.finfo.num_i,
 		    pdc_btlb.finfo.num_d);
 	}
+	aprint_normal("\n");
 
 	/*
 	 * Describe the floating-point support.
 	 */
-#ifndef	FPEMUL
-	if (!fpu_present)
-		aprint_normal("\n%s: no floating point support",
-		    self->dv_xname);
-	else
-#endif /* !FPEMUL */
-	{
-		aprint_normal("\n%s: %s floating point, rev %d", self->dv_xname,
-		    hppa_mod_info(HPPA_TYPE_FPU, (fpu_version >> 16) & 0x1f),
-		    (fpu_version >> 11) & 0x1f);
-	}
-
-	aprint_normal("\n");
+	aprint_normal("%s: %s floating point, rev %d\n", self->dv_xname,
+	    hppa_mod_info(HPPA_TYPE_FPU, (fpu_version >> 16) & 0x1f),
+	    (fpu_version >> 11) & 0x1f);
 
 	/* sanity against luser amongst config editors */
 	if (ca->ca_irq != 31) {

Index: src/sys/arch/hp700/hp700/locore.S
diff -u src/sys/arch/hp700/hp700/locore.S:1.59 src/sys/arch/hp700/hp700/locore.S:1.60
--- src/sys/arch/hp700/hp700/locore.S:1.59	Thu Apr  5 19:42:13 2012
+++ src/sys/arch/hp700/hp700/locore.S	Fri Apr  6 12:21:59 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.59 2012/04/05 19:42:13 skrll Exp $	*/
+/*	$NetBSD: locore.S,v 1.60 2012/04/06 12:21:59 skrll Exp $	*/
 /*	$OpenBSD: locore.S,v 1.158 2008/07/28 19:08:46 miod Exp $	*/
 
 /*
@@ -1034,13 +1034,6 @@ switch_exited:
 	ldw	HPPA_FRAME_ARG(0)(%r3), %arg0
 
 noras:
-	/*
-	 * As an optimization, hppa_fpu_bootstrap
-	 * replaces this branch instruction with a
-	 * nop if there is a hardware FPU.
-	 */
-ALTENTRY(hppa_fpu_nop1)
-	b,n	switch_return
 
 	/*
 	 * We do have a hardware FPU.  If the LWP

Index: src/sys/arch/hppa/hppa/fpu.c
diff -u src/sys/arch/hppa/hppa/fpu.c:1.23 src/sys/arch/hppa/hppa/fpu.c:1.24
--- src/sys/arch/hppa/hppa/fpu.c:1.23	Sun Jan 23 09:44:59 2011
+++ src/sys/arch/hppa/hppa/fpu.c	Fri Apr  6 12:21:59 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu.c,v 1.23 2011/01/23 09:44:59 skrll Exp $	*/
+/*	$NetBSD: fpu.c,v 1.24 2012/04/06 12:21:59 skrll Exp $	*/
 
 /*
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.23 2011/01/23 09:44:59 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.24 2012/04/06 12:21:59 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -82,7 +82,8 @@ u_int fpu_csw;
 void hppa_fpu_swapout(struct pcb *);
 void hppa_fpu_swap(struct fpreg *, struct fpreg *);
 
-#ifdef FPEMUL
+static int hppa_fpu_ls(struct trapframe *, struct lwp *);
+
 /*
  * Given a trapframe and a general register number, the 
  * FRAME_REG macro returns a pointer to that general
@@ -131,7 +132,6 @@ const int _frame_reg_positions[32] = {
 	_FRAME_POSITION(tf_sp),		/* r30 */
 	_FRAME_POSITION(tf_r31),
 };
-#endif /* FPEMUL */
 
 /*
  * Bootstraps the FPU.
@@ -141,69 +141,43 @@ hppa_fpu_bootstrap(u_int ccr_enable)
 {
 	uint32_t junk[2];
 	uint32_t vers[2];
-	extern u_int hppa_fpu_nop0;
-	extern u_int hppa_fpu_nop1;
 
 	/* See if we have a present and functioning hardware FPU. */
 	fpu_present = (ccr_enable & HPPA_FPUS) == HPPA_FPUS;
 
+	KASSERT(fpu_present);
 	/* Initialize the FPU and get its version. */
-	if (fpu_present) {
 
-		/*
-		 * To somewhat optimize the emulation
-		 * assist trap handling and context
-		 * switching (to save them from having
-	 	 * to always load and check fpu_present),
-		 * there are two instructions in locore.S
-		 * that are replaced with nops when 
-		 * there is a hardware FPU.
-	 	 */
-		hppa_fpu_nop0 = OPCODE_NOP;
-		hppa_fpu_nop1 = OPCODE_NOP;
-		fcacheall();
-
-		/*
-		 * We track what process has the FPU,
-		 * and how many times we have to swap
-		 * in and out.
-		 */
-
-		/*
-		 * The PA-RISC 1.1 Architecture manual is 
-		 * pretty clear that the copr,0,0 must be 
-		 * wrapped in double word stores of fr0, 
-		 * otherwise its operation is undefined.
-		 */
-		__asm volatile(
-			"	ldo	%0, %%r22	\n"
-			"	fstds	%%fr0, 0(%%r22)	\n"
-			"	ldo	%1, %%r22	\n"
-			"	copr,0,0		\n"
-			"	fstds	%%fr0, 0(%%r22)	\n"
-			: "=m" (junk), "=m" (vers) : : "r22");
-
-		/*
-		 * Now mark that no process has the FPU,
-		 * and disable it, so the first time it
-		 * gets used the process' state gets
-		 * swapped in.
-		 */
-		fpu_csw = 0;
-		curcpu()->ci_fpu_state = 0;
-		mtctl(ccr_enable & (CCR_MASK ^ HPPA_FPUS), CR_CCR);	
-	} 
-#ifdef FPEMUL
-	else
-		/*
-		 * XXX This is a hack - to avoid
-		 * having to set up the emulator so
-		 * it can work for one instruction for
-		 * proc0, we dispatch the copr,0,0 opcode 
-		 * into the emulator directly.  
-		 */
-		decode_0c(OPCODE_COPR_0_0, 0, 0, vers);
-#endif /* FPEMUL */
+	/*
+	 * We track what process has the FPU,
+	 * and how many times we have to swap
+	 * in and out.
+	 */
+
+	/*
+	 * The PA-RISC 1.1 Architecture manual is 
+	 * pretty clear that the copr,0,0 must be 
+	 * wrapped in double word stores of fr0, 
+	 * otherwise its operation is undefined.
+	 */
+	__asm volatile(
+		"	ldo	%0, %%r22	\n"
+		"	fstds	%%fr0, 0(%%r22)	\n"
+		"	ldo	%1, %%r22	\n"
+		"	copr,0,0		\n"
+		"	fstds	%%fr0, 0(%%r22)	\n"
+		: "=m" (junk), "=m" (vers) : : "r22");
+
+	/*
+	 * Now mark that no process has the FPU,
+	 * and disable it, so the first time it
+	 * gets used the process' state gets
+	 * swapped in.
+	 */
+	fpu_csw = 0;
+	curcpu()->ci_fpu_state = 0;
+	mtctl(ccr_enable & (CCR_MASK ^ HPPA_FPUS), CR_CCR);	
+
 	fpu_version = vers[0];
 }
 
@@ -218,12 +192,10 @@ hppa_fpu_flush(struct lwp *l)
 	struct pcb *pcb = lwp_getpcb(l);
 	struct cpu_info *ci = curcpu();
 
-	if (!fpu_present)
-		return;
+	KASSERT(fpu_present);
 
 	/*
-	 * If we have a hardware FPU, and this process'
-	 * state is currently in it, swap it out.
+	 * If this process' state is currently in hardware, swap it out.
 	 */
 	
 	if (ci->ci_fpu_state == 0 ||
@@ -235,12 +207,9 @@ hppa_fpu_flush(struct lwp *l)
 	ci->ci_fpu_state = 0;
 }
 
-#ifdef FPEMUL
-
 /*
  * This emulates a coprocessor load/store instruction.
  */
-static int hppa_fpu_ls(struct trapframe *, struct lwp *);
 static int 
 hppa_fpu_ls(struct trapframe *frame, struct lwp *l)
 {
@@ -448,5 +417,3 @@ hppa_fpu_emulate(struct trapframe *frame
 		trapsignal(l, &ksi);
 	}
 }
-
-#endif /* FPEMUL */

Index: src/sys/arch/hppa/hppa/trap.S
diff -u src/sys/arch/hppa/hppa/trap.S:1.65 src/sys/arch/hppa/hppa/trap.S:1.66
--- src/sys/arch/hppa/hppa/trap.S:1.65	Thu Apr  5 19:44:29 2012
+++ src/sys/arch/hppa/hppa/trap.S	Fri Apr  6 12:21:59 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.S,v 1.65 2012/04/05 19:44:29 skrll Exp $	*/
+/*	$NetBSD: trap.S,v 1.66 2012/04/06 12:21:59 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -267,7 +267,6 @@ syscall_entry:
 	/* We can now set the frame pointer */
 	copy	%t3, %r3
 
-#if defined(DDB) || defined(KGDB) || defined(FPEMUL)
 	stw	%r4 , TF_R4 -TRAPFRAME_SIZEOF(%sr1, %t3)
 	stw	%r5 , TF_R5 -TRAPFRAME_SIZEOF(%sr1, %t3)
 	stw	%r6 , TF_R6 -TRAPFRAME_SIZEOF(%sr1, %t3)
@@ -283,7 +282,7 @@ syscall_entry:
 	stw	%r16, TF_R16-TRAPFRAME_SIZEOF(%sr1, %t3)
 	stw	%r17, TF_R17-TRAPFRAME_SIZEOF(%sr1, %t3)
 	stw	%r18, TF_R18-TRAPFRAME_SIZEOF(%sr1, %t3)
-#endif /* DDB || KGDB || FPEMUL */
+
 	stw	%r0, 0(%sr1, %t3)	/* terminate frame */
 	copy	%r0 , %r3
 	stw	%r0, HPPA_FRAME_PSP(%sr1, %sp)
@@ -445,11 +444,11 @@ syscall_return:
 	ldw	TF_R1(%t3), %r1
 	ldw	TF_R2(%t3), %r2
 	ldw	TF_R3(%t3), %r3
+
 	/*
 	 * See the comment in the trap handling code below about why we need to
 	 * save and restore all general registers under these cases.
 	 */
-#if defined(DDB) || defined(KGDB) || defined(FPEMUL)
 	ldw	TF_R4(%t3), %r4
 	ldw	TF_R5(%t3), %r5
 	ldw	TF_R6(%t3), %r6
@@ -465,7 +464,7 @@ syscall_return:
 	ldw	TF_R16(%t3), %r16
 	ldw	TF_R17(%t3), %r17
 	ldw	TF_R18(%t3), %r18
-#endif /* DDB || KGDB || FPEMUL */
+
 	ldw	TF_R19(%t3), %t4
 	/*	%r20(%t3) is used as a temporary and will be restored later */
 	/*	%r21(%t2) is used as a temporary and will be restored later */
@@ -900,7 +899,7 @@ LEAF_ENTRY_NOPROFILE(TLABEL(emu))
 	 */
 	extru	%arg0, 5, 6, %r1
 	comib,=,n 4, %r1, L$emulate_sfu
-	comib,=,n 0xe, %r1, hppa_fpu_nop0
+	comib,=,n 0xe, %r1, hppa_fpu_emulate
 
 	/*
 	 * If the uid field in the instruction is not zero or one, indicating a
@@ -932,8 +931,7 @@ LEAF_ENTRY_NOPROFILE(TLABEL(emu))
 	 *
 	 * Otherwise, this is the branch to emulate an FPU coprocessor.
 	 */
-ALTENTRY(hppa_fpu_nop0)
-	b,n	L$emulate_fpu
+hppa_fpu_emulate:
 
 	/*
 	 * We have a hardware FPU.  If it is enabled,  branch to emulate the
@@ -2160,7 +2158,6 @@ trapnowvirt:
 	 *
 	 * See similar #ifdefs in the syscall entry and exit code.
 	 */
-#if defined(DDB) || defined(KGDB) || defined(FPEMUL)
 	stw	%r4, TF_R4(%t3)
 	stw	%r5, TF_R5(%t3)
 	stw	%r6, TF_R6(%t3)
@@ -2176,7 +2173,7 @@ trapnowvirt:
 	stw	%r16, TF_R16(%t3)
 	stw	%r17, TF_R17(%t3)
 	stw	%r18, TF_R18(%t3)
-#endif /* DDB || KGDB || FPEMUL */
+
 	stw	%t4, TF_R19(%t3)
 	stw	%r23,TF_R23(%t3)
 	stw	%r24,TF_R24(%t3)

Index: src/sys/arch/hppa/hppa/trap.c
diff -u src/sys/arch/hppa/hppa/trap.c:1.99 src/sys/arch/hppa/hppa/trap.c:1.100
--- src/sys/arch/hppa/hppa/trap.c:1.99	Wed Mar  7 22:07:13 2012
+++ src/sys/arch/hppa/hppa/trap.c	Fri Apr  6 12:21:59 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.99 2012/03/07 22:07:13 skrll Exp $	*/
+/*	$NetBSD: trap.c,v 1.100 2012/04/06 12:21:59 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.99 2012/03/07 22:07:13 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.100 2012/04/06 12:21:59 skrll Exp $");
 
 /* #define INTRDEBUG */
 /* #define TRAPDEBUG */
@@ -631,21 +631,7 @@ trap(int type, struct trapframe *frame)
 #endif
 
 	case T_EMULATION | T_USER:
-#ifdef FPEMUL
 		hppa_fpu_emulate(frame, l, opcode);
-#else  /* !FPEMUL */
-		/*
-		 * We don't have FPU emulation, so signal the
-		 * process with a SIGFPE.
-		 */
-		
-		KSI_INIT_TRAP(&ksi);
-		ksi.ksi_signo = SIGFPE;
-		ksi.ksi_code = SI_NOINFO;
-		ksi.ksi_trap = type;
-		ksi.ksi_addr = (void *)frame->tf_iioq_head;
-		trapsignal(l, &ksi);
-#endif /* !FPEMUL */
 		break;
 
 	case T_DATALIGN:

Reply via email to