Module Name: src
Committed By: martin
Date: Mon May 17 11:51:10 UTC 2010
Modified Files:
src/sys/arch/sparc64/sparc64: locore.s
Log Message:
Simplify primary CPU startup slightly by using the fact that our cpuinfo's
curpcb pointer points to the uarea/pcb of lwp0 and by remembering the pointer
to this cpuinfo, thus avoiding a few CPUINFO_VA references.
To generate a diff of this commit:
cvs rdiff -u -r1.328 -r1.329 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.328 src/sys/arch/sparc64/sparc64/locore.s:1.329
--- src/sys/arch/sparc64/sparc64/locore.s:1.328 Sat Mar 20 23:31:30 2010
+++ src/sys/arch/sparc64/sparc64/locore.s Mon May 17 11:51:10 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.328 2010/03/20 23:31:30 chs Exp $ */
+/* $NetBSD: locore.s,v 1.329 2010/05/17 11:51:10 martin Exp $ */
/*
* Copyright (c) 2006-2010 Matthew R. Green
@@ -4294,7 +4294,7 @@
/*
* Get pointer to our cpu_info struct
*/
-
+ mov %l1, %l7 ! save cpu_info pointer
ldx [%l1 + CI_PADDR], %l1 ! Load the interrupt stack's PA
sethi %hi(0xa0000000), %l2 ! V=1|SZ=01|NFO=0|IE=0
@@ -4322,10 +4322,8 @@
!! being lwp0 here and it's uarea is mapped special
!! and already accessible here)
flushw
- sethi %hi(CPUINFO_VA+CI_CURLWP), %l0
- LDPTR [%l0 + %lo(CPUINFO_VA+CI_CURLWP)], %l0
+ LDPTR [%l7 + CI_CPCB], %l0 ! load PCB/uarea pointer
set USPACE - TF_SIZE - CC64FSZ, %l1
- LDPTR [%l0 + L_PCB], %l0
add %l1, %l0, %l0
#ifdef _LP64
andn %l0, 0x0f, %l0 ! Needs to be 16-byte aligned
@@ -4357,13 +4355,11 @@
/*
* install our TSB pointers
*/
- sethi %hi(CPUINFO_VA+CI_TSB_DMMU), %l0
- sethi %hi(CPUINFO_VA+CI_TSB_IMMU), %l1
sethi %hi(_C_LABEL(tsbsize)), %l2
sethi %hi(0x1fff), %l3
sethi %hi(TSB), %l4
- LDPTR [%l0 + %lo(CPUINFO_VA+CI_TSB_DMMU)], %l0
- LDPTR [%l1 + %lo(CPUINFO_VA+CI_TSB_IMMU)], %l1
+ LDPTR [%l7 + CI_TSB_DMMU], %l0
+ LDPTR [%l7 + CI_TSB_IMMU], %l1
ld [%l2 + %lo(_C_LABEL(tsbsize))], %l2
or %l3, %lo(0x1fff), %l3
or %l4, %lo(TSB), %l4
@@ -4406,12 +4402,15 @@
sethi %hi(0x40000), %o2
btst %o2, %o1
bz 0f
-
+
+ LDPTR [%l7 + CI_SPINUP], %o1
set 1f, %o0 ! Debug printf
call _C_LABEL(prom_printf)
+ mov %sp, %o2
+
.data
1:
- .asciz "Calling startup routine...\r\n"
+ .asciz "Calling startup routine %p with stack at %p...\r\n"
_ALIGN
.text
0:
@@ -4420,8 +4419,7 @@
* Call our startup routine.
*/
- sethi %hi(CPUINFO_VA+CI_SPINUP), %l0
- LDPTR [%l0 + %lo(CPUINFO_VA+CI_SPINUP)], %o1
+ LDPTR [%l7 + CI_SPINUP], %o1
call %o1 ! Call routine
clr %o0 ! our frame arg is ignored