Module Name: src Committed By: matt Date: Wed Apr 6 05:37:59 UTC 2011
Modified Files: src/sys/arch/mips/mips: locore.S Log Message: Don't bother saving T8 (MIPS_CURLWP). Avoid branches when determining delay slot. To generate a diff of this commit: cvs rdiff -u -r1.185 -r1.186 src/sys/arch/mips/mips/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/mips/mips/locore.S diff -u src/sys/arch/mips/mips/locore.S:1.185 src/sys/arch/mips/mips/locore.S:1.186 --- src/sys/arch/mips/mips/locore.S:1.185 Tue Mar 15 07:39:22 2011 +++ src/sys/arch/mips/mips/locore.S Wed Apr 6 05:37:59 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.S,v 1.185 2011/03/15 07:39:22 matt Exp $ */ +/* $NetBSD: locore.S,v 1.186 2011/04/06 05:37:59 matt Exp $ */ /* * Copyright (c) 1992, 1993 @@ -218,6 +218,7 @@ REG_S s5, PCB_CONTEXT+SF_REG_S5(a2) REG_S s6, PCB_CONTEXT+SF_REG_S6(a2) REG_S s7, PCB_CONTEXT+SF_REG_S7(a2) + #REG_S t8, PCB_CONTEXT+SF_REG_T8(a2) # no reason to save MIPS_CURLWP REG_S sp, PCB_CONTEXT+SF_REG_SP(a2) REG_S s8, PCB_CONTEXT+SF_REG_S8(a2) REG_S ra, PCB_CONTEXT+SF_REG_RA(a2) @@ -367,7 +368,7 @@ REG_S s5, PCB_CONTEXT+SF_REG_S5(t0) REG_S s6, PCB_CONTEXT+SF_REG_S6(t0) REG_S s7, PCB_CONTEXT+SF_REG_S7(t0) - REG_S t8, PCB_CONTEXT+SF_REG_T8(t0) # MIPS_CURLWP + #REG_S t8, PCB_CONTEXT+SF_REG_T8(t0) # no reason to save MIPS_CURLWP REG_S sp, PCB_CONTEXT+SF_REG_SP(t0) REG_S s8, PCB_CONTEXT+SF_REG_S8(t0) REG_S t2, PCB_CONTEXT+SF_REG_RA(t0) @@ -385,7 +386,7 @@ move s0, MIPS_CURLWP # remember current lwp move MIPS_CURLWP, a0 # switch to softint lwp PTR_L s1, L_CPU(MIPS_CURLWP) # get curcpu() - nop # patchable load delay slot + nop # patchable load delay slot PTR_S MIPS_CURLWP, CPU_INFO_CURLWP(s1) # ... move s2, sp # remember sp move s3, t0 # remember curpcb @@ -440,7 +441,7 @@ /* - * savectx(struct pcb *) + * void savectx(struct pcb *) */ LEAF(savectx) #ifdef PARANOIA @@ -458,7 +459,7 @@ REG_S s5, PCB_CONTEXT+SF_REG_S5(a0) REG_S s6, PCB_CONTEXT+SF_REG_S6(a0) REG_S s7, PCB_CONTEXT+SF_REG_S7(a0) - REG_S t8, PCB_CONTEXT+SF_REG_T8(a0) + REG_S t8, PCB_CONTEXT+SF_REG_T8(a0) # MIPS_CURLWP #if defined(__mips_n32) || defined(__mips_n64) REG_S gp, PCB_CONTEXT+SF_REG_GP(a0) #endif @@ -487,7 +488,7 @@ REG_S s5, SF_REG_S5(a0) REG_S s6, SF_REG_S6(a0) REG_S s7, SF_REG_S7(a0) - REG_S t8, SF_REG_T8(a0) + #REG_S t8, SF_REG_T8(a0) # no reason to save MIPS_CURLWP #if defined(__mips_n32) || defined(__mips_n64) REG_S gp, SF_REG_GP(a0) #endif @@ -513,7 +514,7 @@ REG_L s5, SF_REG_S5(a0) REG_L s6, SF_REG_S6(a0) REG_L s7, SF_REG_S7(a0) - REG_L t8, SF_REG_T8(a0) + #REG_L t8, SF_REG_T8(a0) # no reason to load MIPS_CURLWP #if defined(__mips_n32) || defined(__mips_n64) REG_L gp, SF_REG_GP(a0) #endif @@ -626,19 +627,10 @@ * We check whether it's an unimplemented FP instruction here rather * than invoking mips_emul_inst(), since it is faster. */ - bgez a2, 1f # Check the branch delay bit. - nop -/* - * The instruction is in the branch delay slot. - */ - b 2f - INT_L a0, 4(a0) # a0 = coproc instruction -/* - * This is not in the branch delay slot. - */ -1: + srl v1, a2, 31 # move branch delay bit to LSB + sll v1, 2 # shift it left by 2 (mult by 4) + PTR_ADDIU a0, v1 # add to a0 INT_L a0, 0(a0) # a0 = coproc instruction -2: NOP_L # load delay /* @@ -690,7 +682,7 @@ /* * Finally, we can call - * mips_emul_fp(uint32_t instr, struct trapframe *tf, uint32_t cause). + * mips_emul_fp(uint32_t insn, struct trapframe *tf, uint32_t cause). */ 4: jal _C_LABEL(mips_emul_fp)