diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2004-06-23 00:31:20 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2004-06-23 00:31:20 +0000 |
commit | d465477dff4677f6065ce89628a3d6462625df7f (patch) | |
tree | a3402e3e7ef7191a1690d0a1a01a04a9f3811d0f /sys | |
parent | 9e7ff69031f171313ebf79305f2518af6f10a801 (diff) |
When servicing 88110 exceptions, reset dsr and isr as fast as possible.
While there, simplify badaddr() handling on 88110.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/mvme88k/mvme88k/eh.S | 30 |
1 files changed, 9 insertions, 21 deletions
diff --git a/sys/arch/mvme88k/mvme88k/eh.S b/sys/arch/mvme88k/mvme88k/eh.S index 4e97857437a..3b30c0d089a 100644 --- a/sys/arch/mvme88k/mvme88k/eh.S +++ b/sys/arch/mvme88k/mvme88k/eh.S @@ -1,4 +1,4 @@ -/* $OpenBSD: eh.S,v 1.54 2004/06/22 23:00:15 miod Exp $ */ +/* $OpenBSD: eh.S,v 1.55 2004/06/23 00:31:19 miod Exp $ */ /* * Mach Operating System * Copyright (c) 1993-1991 Carnegie Mellon University @@ -821,16 +821,17 @@ ASLOCAL(m88110_ignore_data_exception) /* * For more info, see badaddr() below. * - * We just want to jump to "m88110_badaddr__return_nonzero" below. + * We just want to jump to "badaddr__return_nonzero" below. * * We don't worry about trashing R2 here because we're - * jumping back to the function badaddr() where we're allowd + * jumping back to the function badaddr() where we're allowed * to blast r2..r9 as we see fit. */ - or.u r2, r0, hi16(_ASM_LABEL(m88110_badaddr__return_nonzero)) - or r2, r2, lo16(_ASM_LABEL(m88110_badaddr__return_nonzero)) + or.u r2, r0, hi16(_ASM_LABEL(badaddr__return_nonzero)) + or r2, r2, lo16(_ASM_LABEL(badaddr__return_nonzero)) stcr r2, EXIP /* Make it the next instruction to execute */ + stcr r0, DSR /* Clear exception status */ RTE #endif /* M88110 */ @@ -936,15 +937,6 @@ ASLOCAL(badaddr__unknown_size) /*NOTREACHED*/ #endif -#ifdef M88110 -ASLOCAL(m88110_badaddr__return_nonzero) - /* - * On mc88110, we possibly took an exception and we have to clear - * DSR before the rte instruction clears the EFRZ bit in the PSR. - */ - stcr r0, DSR - /* FALLTHROUGH */ -#endif ASLOCAL(badaddr__return_nonzero) or r2, r0, 1 /* FALLTHROUGH */ @@ -2501,6 +2493,9 @@ ASLOCAL(m88110_have_pcb) st TMP, r31, REG_OFF(EF_DSAP) st TMP2, r31, REG_OFF(EF_DUAP) + stcr r0, ISR + stcr r0, DSR + ldcr r1, SR2 jmp r1 @@ -2576,13 +2571,6 @@ ASLOCAL(m88110_setup_phase_two) ASLOCAL(m88110_fpu_enable) FLUSH_PIPELINE - /* - * Now that EFRZ is cleared, we can clear DSR and ISR. - * This will allow other data exceptions to happen. - */ - stcr r0, ISR - stcr r0, DSR - xcr TMP, TMP, SR3 /* get E.F. pointer */ st r30, TMP, GENREG_OFF(30) /* save previous r30, r31 */ st r31, TMP, GENREG_OFF(31) /* save previous r30, r31 */ |