From 3a327dad8e22d3b847a34518d736902335a15006 Mon Sep 17 00:00:00 2001
From: Michael Shalayeff <mickey@cvs.openbsd.org>
Date: Thu, 5 Sep 2002 21:37:19 +0000
Subject: fpu save state is a separate magic function now

---
 sys/arch/hppa/hppa/locore.S     | 39 ++++++++++++++++++++++++++++++++++++++-
 sys/arch/hppa/hppa/vm_machdep.c | 39 +++------------------------------------
 sys/arch/hppa/include/cpufunc.h |  3 ++-
 3 files changed, 43 insertions(+), 38 deletions(-)

(limited to 'sys/arch')

diff --git a/sys/arch/hppa/hppa/locore.S b/sys/arch/hppa/hppa/locore.S
index fd22f2559de..f74a64cd0af 100644
--- a/sys/arch/hppa/hppa/locore.S
+++ b/sys/arch/hppa/hppa/locore.S
@@ -1,4 +1,4 @@
-/*	$OpenBSD: locore.S,v 1.82 2002/09/05 18:15:23 mickey Exp $	*/
+/*	$OpenBSD: locore.S,v 1.83 2002/09/05 21:37:18 mickey Exp $	*/
 
 /*
  * Copyright (c) 1998-2002 Michael Shalayeff
@@ -1996,6 +1996,43 @@ $ibrk_exit
 	nop
 EXIT(TLABEL(ibrk))
 
+LEAF_ENTRY(fpu_save)
+	fstds,ma %fr0 , 8(arg0)
+	fstds,ma %fr1 , 8(arg0)
+	fstds,ma %fr2 , 8(arg0)
+	fstds,ma %fr3 , 8(arg0)
+	fstds,ma %fr4 , 8(arg0)
+	fstds,ma %fr5 , 8(arg0)
+	fstds,ma %fr6 , 8(arg0)
+	fstds,ma %fr7 , 8(arg0)
+	fstds,ma %fr8 , 8(arg0)
+	fstds,ma %fr9 , 8(arg0)
+	fstds,ma %fr10, 8(arg0)
+	fstds,ma %fr11, 8(arg0)
+	fstds,ma %fr12, 8(arg0)
+	fstds,ma %fr13, 8(arg0)
+	fstds,ma %fr14, 8(arg0)
+	fstds,ma %fr15, 8(arg0)
+	fstds,ma %fr16, 8(arg0)
+	fstds,ma %fr17, 8(arg0)
+	fstds,ma %fr18, 8(arg0)
+	fstds,ma %fr19, 8(arg0)
+	fstds,ma %fr20, 8(arg0)
+	fstds,ma %fr21, 8(arg0)
+	fstds,ma %fr22, 8(arg0)
+	fstds,ma %fr23, 8(arg0)
+	fstds,ma %fr24, 8(arg0)
+	fstds,ma %fr25, 8(arg0)
+	fstds,ma %fr26, 8(arg0)
+	fstds,ma %fr27, 8(arg0)
+	fstds,ma %fr28, 8(arg0)
+	fstds,ma %fr29, 8(arg0)
+	fstds,ma %fr30, 8(arg0)
+	fstds    %fr31, 0(arg0)
+	bv	r0(rp)
+	nop
+EXIT(fpu_save)
+
 	.import	dcache_stride, data
 LEAF_ENTRY(fdcache)
 	ldil	L%dcache_stride,t1
diff --git a/sys/arch/hppa/hppa/vm_machdep.c b/sys/arch/hppa/hppa/vm_machdep.c
index 597f7300f1e..e0e01a7d925 100644
--- a/sys/arch/hppa/hppa/vm_machdep.c
+++ b/sys/arch/hppa/hppa/vm_machdep.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: vm_machdep.c,v 1.40 2002/08/03 20:56:42 mickey Exp $	*/
+/*	$OpenBSD: vm_machdep.c,v 1.41 2002/09/05 21:37:18 mickey Exp $	*/
 
 /*
  * Copyright (c) 1999-2002 Michael Shalayeff
@@ -135,44 +135,11 @@ void
 cpu_swapout(p)
 	struct proc *p;
 {
-	extern paddr_t fpu_curpcb;
+	extern vaddr_t fpu_curpcb;
 	struct trapframe *tf = p->p_md.md_regs;
 
 	if (tf->tf_cr30 == fpu_curpcb) {
-		__asm __volatile(
-		    "fstds,ma %%fr0 , 8(%0)\n\t"
-		    "fstds,ma %%fr1 , 8(%0)\n\t"
-		    "fstds,ma %%fr2 , 8(%0)\n\t"
-		    "fstds,ma %%fr3 , 8(%0)\n\t"
-		    "fstds,ma %%fr4 , 8(%0)\n\t"
-		    "fstds,ma %%fr5 , 8(%0)\n\t"
-		    "fstds,ma %%fr6 , 8(%0)\n\t"
-		    "fstds,ma %%fr7 , 8(%0)\n\t"
-		    "fstds,ma %%fr8 , 8(%0)\n\t"
-		    "fstds,ma %%fr9 , 8(%0)\n\t"
-		    "fstds,ma %%fr10, 8(%0)\n\t"
-		    "fstds,ma %%fr11, 8(%0)\n\t"
-		    "fstds,ma %%fr12, 8(%0)\n\t"
-		    "fstds,ma %%fr13, 8(%0)\n\t"
-		    "fstds,ma %%fr14, 8(%0)\n\t"
-		    "fstds,ma %%fr15, 8(%0)\n\t"
-		    "fstds,ma %%fr16, 8(%0)\n\t"
-		    "fstds,ma %%fr17, 8(%0)\n\t"
-		    "fstds,ma %%fr18, 8(%0)\n\t"
-		    "fstds,ma %%fr19, 8(%0)\n\t"
-		    "fstds,ma %%fr20, 8(%0)\n\t"
-		    "fstds,ma %%fr21, 8(%0)\n\t"
-		    "fstds,ma %%fr22, 8(%0)\n\t"
-		    "fstds,ma %%fr23, 8(%0)\n\t"
-		    "fstds,ma %%fr24, 8(%0)\n\t"
-		    "fstds,ma %%fr25, 8(%0)\n\t"
-		    "fstds,ma %%fr26, 8(%0)\n\t"
-		    "fstds,ma %%fr27, 8(%0)\n\t"
-		    "fstds,ma %%fr28, 8(%0)\n\t"
-		    "fstds,ma %%fr29, 8(%0)\n\t"
-		    "fstds,ma %%fr30, 8(%0)\n\t"
-		    "fstds    %%fr31, 0(%0)\n\t"
-		    : "+r" (fpu_curpcb) :: "memory");
+		fpu_save(fpu_curpcb);
 		fpu_curpcb = 0;
 	}
 }
diff --git a/sys/arch/hppa/include/cpufunc.h b/sys/arch/hppa/include/cpufunc.h
index 6b85c9e3aef..e2326ff6990 100644
--- a/sys/arch/hppa/include/cpufunc.h
+++ b/sys/arch/hppa/include/cpufunc.h
@@ -1,4 +1,4 @@
-/*	$OpenBSD: cpufunc.h,v 1.19 2002/03/15 21:44:18 mickey Exp $	*/
+/*	$OpenBSD: cpufunc.h,v 1.20 2002/09/05 21:37:18 mickey Exp $	*/
 
 /*
  * Copyright (c) 1998,2000 Michael Shalayeff
@@ -220,6 +220,7 @@ ledctl(int on, int off, int toggle)
 #ifdef _KERNEL
 extern int (*cpu_hpt_init)(vaddr_t hpt, vsize_t hptsize);
 
+void fpu_save(vaddr_t va);
 void ficache(pa_space_t sp, vaddr_t va, vsize_t size);
 void fdcache(pa_space_t sp, vaddr_t va, vsize_t size);
 void pdcache(pa_space_t sp, vaddr_t va, vsize_t size);
-- 
cgit v1.2.3