Module Name: src Committed By: thorpej Date: Mon Dec 25 21:32:58 UTC 2023
Modified Files: src/sys/arch/amiga/amiga: locore.s src/sys/arch/atari/atari: locore.s src/sys/arch/cesfic/cesfic: locore.s src/sys/arch/hp300/hp300: locore.s src/sys/arch/luna68k/luna68k: locore.s src/sys/arch/m68k/include: pmap_motorola.h src/sys/arch/mac68k/mac68k: locore.s src/sys/arch/mvme68k/mvme68k: locore.s src/sys/arch/news68k/news68k: locore.s src/sys/arch/next68k/next68k: locore.s src/sys/arch/x68k/x68k: locore.s Log Message: loadustp(): Optimize for the overwhelmingly common case of "not the HP MMU". Rather than converting the level 1 table address to a page number before calling loadustp() only to have loadustp() convert it back to an address for the '851, '030, '040, and '060, instead pass the address and convert to a page number only in the case of the HP MMU. This is a wash on HP MMU machines (9000/320 and 9000/350), and saves at least 4 instructions (2x moveq + 2x lsXl) on every context switch on everything else. To generate a diff of this commit: cvs rdiff -u -r1.161 -r1.162 src/sys/arch/amiga/amiga/locore.s cvs rdiff -u -r1.117 -r1.118 src/sys/arch/atari/atari/locore.s cvs rdiff -u -r1.34 -r1.35 src/sys/arch/cesfic/cesfic/locore.s cvs rdiff -u -r1.174 -r1.175 src/sys/arch/hp300/hp300/locore.s cvs rdiff -u -r1.68 -r1.69 src/sys/arch/luna68k/luna68k/locore.s cvs rdiff -u -r1.38 -r1.39 src/sys/arch/m68k/include/pmap_motorola.h cvs rdiff -u -r1.175 -r1.176 src/sys/arch/mac68k/mac68k/locore.s cvs rdiff -u -r1.118 -r1.119 src/sys/arch/mvme68k/mvme68k/locore.s cvs rdiff -u -r1.71 -r1.72 src/sys/arch/news68k/news68k/locore.s cvs rdiff -u -r1.73 -r1.74 src/sys/arch/next68k/next68k/locore.s cvs rdiff -u -r1.122 -r1.123 src/sys/arch/x68k/x68k/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/amiga/amiga/locore.s diff -u src/sys/arch/amiga/amiga/locore.s:1.161 src/sys/arch/amiga/amiga/locore.s:1.162 --- src/sys/arch/amiga/amiga/locore.s:1.161 Mon May 30 09:56:02 2022 +++ src/sys/arch/amiga/amiga/locore.s Mon Dec 25 21:32:56 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.161 2022/05/30 09:56:02 andvar Exp $ */ +/* $NetBSD: locore.s,v 1.162 2023/12/25 21:32:56 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -1124,8 +1124,6 @@ ENTRY(probeva) */ ENTRY(loadustp) movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT,%d1 - lsll %d1,%d0 | convert to addr #ifdef M68060 cmpl #CPU_68060,_C_LABEL(cputype) | 68060? jeq Lldustp060 | yes, skip Index: src/sys/arch/atari/atari/locore.s diff -u src/sys/arch/atari/atari/locore.s:1.117 src/sys/arch/atari/atari/locore.s:1.118 --- src/sys/arch/atari/atari/locore.s:1.117 Fri Jan 6 10:28:27 2023 +++ src/sys/arch/atari/atari/locore.s Mon Dec 25 21:32:56 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.117 2023/01/06 10:28:27 tsutsui Exp $ */ +/* $NetBSD: locore.s,v 1.118 2023/12/25 21:32:56 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -1141,8 +1141,6 @@ ENTRY(probeva) */ ENTRY(loadustp) movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT,%d1 - lsll %d1,%d0 | convert to addr #if defined(M68060) cmpl #CPU_68060,_C_LABEL(cputype) | 68060? jeq Lldustp060 | yes, skip Index: src/sys/arch/cesfic/cesfic/locore.s diff -u src/sys/arch/cesfic/cesfic/locore.s:1.34 src/sys/arch/cesfic/cesfic/locore.s:1.35 --- src/sys/arch/cesfic/cesfic/locore.s:1.34 Mon May 30 09:56:03 2022 +++ src/sys/arch/cesfic/cesfic/locore.s Mon Dec 25 21:32:56 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.34 2022/05/30 09:56:03 andvar Exp $ */ +/* $NetBSD: locore.s,v 1.35 2023/12/25 21:32:56 thorpej Exp $ */ /* * Copyright (c) 1980, 1990, 1993 @@ -805,8 +805,6 @@ ENTRY(loadustp) tstl _C_LABEL(mmutype) | HP MMU? jeq Lhpmmu9 | yes, skip movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT,%d1 - lsll %d1,%d0 | convert to addr #if defined(M68040) cmpl #MMU_68040,_C_LABEL(mmutype) | 68040? jne LmotommuC | no, skip @@ -834,7 +832,10 @@ Lhpmmu9: andl #~MMU_CEN,%a0@(MMUCMD) | toggle cache enable orl #MMU_CEN,%a0@(MMUCMD) | to clear data cache 1: - movl %sp@(4),%a0@(MMUUSTP) | load a new USTP + movl %sp@(4),%d0 + moveq #PGSHIFT,%d1 + lsrl %d1,%d0 | convert to page frame + movl %d0,%a0@(MMUUSTP) | load a new USTP #endif rts Index: src/sys/arch/hp300/hp300/locore.s diff -u src/sys/arch/hp300/hp300/locore.s:1.174 src/sys/arch/hp300/hp300/locore.s:1.175 --- src/sys/arch/hp300/hp300/locore.s:1.174 Sat Oct 14 15:31:36 2023 +++ src/sys/arch/hp300/hp300/locore.s Mon Dec 25 21:32:57 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.174 2023/10/14 15:31:36 tsutsui Exp $ */ +/* $NetBSD: locore.s,v 1.175 2023/12/25 21:32:57 thorpej Exp $ */ /* * Copyright (c) 1980, 1990, 1993 @@ -1087,8 +1087,6 @@ ENTRY(loadustp) tstl _C_LABEL(mmutype) | HP MMU? jeq Lhpmmu9 | yes, skip movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT,%d1 - lsll %d1,%d0 | convert to addr #if defined(M68040) cmpl #MMU_68040,_C_LABEL(mmutype) | 68040? jne LmotommuC | no, skip @@ -1116,7 +1114,10 @@ Lhpmmu9: andl #~MMU_CEN,%a0@(MMUCMD) | toggle cache enable orl #MMU_CEN,%a0@(MMUCMD) | to clear data cache 1: - movl %sp@(4),%a0@(MMUUSTP) | load a new USTP + movl %sp@(4),%d0 + moveq #PGSHIFT,%d1 + lsrl %d1,%d0 | convert to page frame + movl %d0,%a0@(MMUUSTP) | load a new USTP #endif rts Index: src/sys/arch/luna68k/luna68k/locore.s diff -u src/sys/arch/luna68k/luna68k/locore.s:1.68 src/sys/arch/luna68k/luna68k/locore.s:1.69 --- src/sys/arch/luna68k/luna68k/locore.s:1.68 Fri Jun 10 21:42:24 2022 +++ src/sys/arch/luna68k/luna68k/locore.s Mon Dec 25 21:32:57 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.68 2022/06/10 21:42:24 tsutsui Exp $ */ +/* $NetBSD: locore.s,v 1.69 2023/12/25 21:32:57 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -784,8 +784,6 @@ ENTRY(ecacheoff) */ ENTRY(loadustp) movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT,%d1 - lsll %d1,%d0 | convert to addr #if defined(M68040) cmpl #MMU_68040,_C_LABEL(mmutype) | 68040? jne LmotommuC | no, skip Index: src/sys/arch/m68k/include/pmap_motorola.h diff -u src/sys/arch/m68k/include/pmap_motorola.h:1.38 src/sys/arch/m68k/include/pmap_motorola.h:1.39 --- src/sys/arch/m68k/include/pmap_motorola.h:1.38 Tue Sep 26 12:46:30 2023 +++ src/sys/arch/m68k/include/pmap_motorola.h Mon Dec 25 21:32:57 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_motorola.h,v 1.38 2023/09/26 12:46:30 tsutsui Exp $ */ +/* $NetBSD: pmap_motorola.h,v 1.39 2023/12/25 21:32:57 thorpej Exp $ */ /* * Copyright (c) 1991, 1993 @@ -176,7 +176,7 @@ struct pmap { #define PMAP_ACTIVATE(pmap, loadhw) \ { \ if ((loadhw)) \ - loadustp(m68k_btop((paddr_t)(pmap)->pm_stpa)); \ + loadustp((paddr_t)(pmap)->pm_stpa); \ } /* Index: src/sys/arch/mac68k/mac68k/locore.s diff -u src/sys/arch/mac68k/mac68k/locore.s:1.175 src/sys/arch/mac68k/mac68k/locore.s:1.176 --- src/sys/arch/mac68k/mac68k/locore.s:1.175 Mon May 30 09:56:03 2022 +++ src/sys/arch/mac68k/mac68k/locore.s Mon Dec 25 21:32:57 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.175 2022/05/30 09:56:03 andvar Exp $ */ +/* $NetBSD: locore.s,v 1.176 2023/12/25 21:32:57 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -956,8 +956,6 @@ ENTRY(ecacheoff) */ ENTRY(loadustp) movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT,%d1 - lsll %d1,%d0 | convert to addr #if defined(M68040) cmpl #MMU_68040,_C_LABEL(mmutype) | 68040? jne LmotommuC | no, skip Index: src/sys/arch/mvme68k/mvme68k/locore.s diff -u src/sys/arch/mvme68k/mvme68k/locore.s:1.118 src/sys/arch/mvme68k/mvme68k/locore.s:1.119 --- src/sys/arch/mvme68k/mvme68k/locore.s:1.118 Mon May 30 09:56:03 2022 +++ src/sys/arch/mvme68k/mvme68k/locore.s Mon Dec 25 21:32:57 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.118 2022/05/30 09:56:03 andvar Exp $ */ +/* $NetBSD: locore.s,v 1.119 2023/12/25 21:32:57 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -1097,8 +1097,6 @@ ENTRY_NOPROFILE(getsp) */ ENTRY(loadustp) movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT, %d1 - lsll %d1,%d0 | convert to addr #if defined(M68040) || defined(M68060) cmpl #MMU_68040,_C_LABEL(mmutype) | 68040? jne LmotommuC | no, skip Index: src/sys/arch/news68k/news68k/locore.s diff -u src/sys/arch/news68k/news68k/locore.s:1.71 src/sys/arch/news68k/news68k/locore.s:1.72 --- src/sys/arch/news68k/news68k/locore.s:1.71 Sun Oct 15 10:46:51 2023 +++ src/sys/arch/news68k/news68k/locore.s Mon Dec 25 21:32:57 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.71 2023/10/15 10:46:51 tsutsui Exp $ */ +/* $NetBSD: locore.s,v 1.72 2023/12/25 21:32:57 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -896,8 +896,6 @@ Lnocache8: */ ENTRY(loadustp) movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT, %d1 - lsll %d1,%d0 | convert to addr pflusha | flush entire TLB lea _C_LABEL(protorp),%a0 | CRP prototype movl %d0,%a0@(4) | stash USTP Index: src/sys/arch/next68k/next68k/locore.s diff -u src/sys/arch/next68k/next68k/locore.s:1.73 src/sys/arch/next68k/next68k/locore.s:1.74 --- src/sys/arch/next68k/next68k/locore.s:1.73 Fri Jun 16 20:01:20 2023 +++ src/sys/arch/next68k/next68k/locore.s Mon Dec 25 21:32:57 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.73 2023/06/16 20:01:20 andvar Exp $ */ +/* $NetBSD: locore.s,v 1.74 2023/12/25 21:32:57 thorpej Exp $ */ /* * Copyright (c) 1998 Darrin B. Jewell @@ -891,8 +891,6 @@ ENTRY(loadustp) tstl _C_LABEL(mmutype) | HP MMU? jeq Lhpmmu9 | yes, skip movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT,%d1 - lsll %d1,%d0 | convert to addr #if defined(M68040) cmpl #MMU_68040,_C_LABEL(mmutype) | 68040? jne LmotommuC | no, skip Index: src/sys/arch/x68k/x68k/locore.s diff -u src/sys/arch/x68k/x68k/locore.s:1.122 src/sys/arch/x68k/x68k/locore.s:1.123 --- src/sys/arch/x68k/x68k/locore.s:1.122 Sun Sep 17 07:22:17 2023 +++ src/sys/arch/x68k/x68k/locore.s Mon Dec 25 21:32:58 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.122 2023/09/17 07:22:17 andvar Exp $ */ +/* $NetBSD: locore.s,v 1.123 2023/12/25 21:32:58 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -833,8 +833,6 @@ ENTRY(ecacheoff) */ ENTRY(loadustp) movl %sp@(4),%d0 | new USTP - moveq #PGSHIFT,%d1 - lsll %d1,%d0 | convert to addr #if defined(M68040) || defined(M68060) cmpl #MMU_68040,_C_LABEL(mmutype) | 68040? jne LmotommuC | no, skip