diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/hppa/hppa/locore.S | 39 | ||||
-rw-r--r-- | sys/arch/hppa/hppa/vm_machdep.c | 39 | ||||
-rw-r--r-- | sys/arch/hppa/include/cpufunc.h | 3 |
3 files changed, 43 insertions, 38 deletions
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); |