Module Name: src Committed By: martin Date: Thu Nov 5 10:11:51 UTC 2015
Modified Files: src/sys/arch/sparc64/sparc64: locore.s Log Message: Most of the time return_from_trap already got called with tf->tf_tstate loaded in register %g1 - make it so for two more callers and remove the reload of that value. To generate a diff of this commit: cvs rdiff -u -r1.384 -r1.385 src/sys/arch/sparc64/sparc64/locore.s 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/sparc64/sparc64/locore.s diff -u src/sys/arch/sparc64/sparc64/locore.s:1.384 src/sys/arch/sparc64/sparc64/locore.s:1.385 --- src/sys/arch/sparc64/sparc64/locore.s:1.384 Sun Apr 5 20:34:00 2015 +++ src/sys/arch/sparc64/sparc64/locore.s Thu Nov 5 10:11:51 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.384 2015/04/05 20:34:00 palle Exp $ */ +/* $NetBSD: locore.s,v 1.385 2015/11/05 10:11:51 martin Exp $ */ /* * Copyright (c) 2006-2010 Matthew R. Green @@ -1954,7 +1954,7 @@ winfixfill: #if 0 /* Need to switch over to new stuff to fix WDR bug */ wrpr %g5, %cwp ! Restore cwp from before fill trap -- regs should now be consisent wrpr %g2, %g0, %tl ! Restore trap level -- we need to reuse it - set return_from_trap, %g4 + set return_from_trap, %g4 ! XXX - need to set %g1 to tstate set CTX_PRIMARY, %g7 wrpr %g4, 0, %tpc stxa %g0, [%g7] ASI_DMMU @@ -2975,8 +2975,8 @@ Lslowtrap_reenter: call _C_LABEL(trap) ! trap(tf, type, pc, pstate) nop - ba,a,pt %icc, return_from_trap - nop + b return_from_trap + ldx [%sp + CC64FSZ + STKB + TF_TSTATE], %g1 ! Load this for return_from_trap NOTREACHED #if 1 /* @@ -3364,7 +3364,7 @@ syscall_setup: return_from_syscall: wrpr %g0, PSTATE_KERN, %pstate ! Disable intterrupts wrpr %g0, 0, %tl ! Return to tl==0 - ba,a,pt %icc, return_from_trap + b return_from_trap nop NOTREACHED @@ -3928,8 +3928,8 @@ intrcmplt: ldub [%sp + CC64FSZ + STKB + TF_OLDPIL], %l3 ! restore old %pil wrpr %l3, 0, %pil - ba,a,pt %icc, return_from_trap - nop + b return_from_trap + ldx [%sp + CC64FSZ + STKB + TF_TSTATE], %g1 ! Load this for return_from_trap #ifdef notyet /* @@ -3962,6 +3962,7 @@ zshard: * registers are: * * [%sp + CC64FSZ + STKB] => trap frame + * %g1 => tstate from trap frame * * We must load all global, out, and trap registers from the trap frame. * @@ -3987,7 +3988,7 @@ return_from_trap: !! !! We'll make sure we flush our pcb here, rather than later. !! - ldx [%sp + CC64FSZ + STKB + TF_TSTATE], %g1 +! ldx [%sp + CC64FSZ + STKB + TF_TSTATE], %g1 ! already passed in, no need to reload btst TSTATE_PRIV, %g1 ! returning to userland? !! @@ -5965,7 +5966,7 @@ ENTRY(lwp_trampoline) /* * Here we finish up as in syscall, but simplified. */ - ba,a,pt %icc, return_from_trap + b return_from_trap nop /*