Module Name: src
Committed By: nakayama
Date: Sun Nov 29 03:31:33 UTC 2009
Modified Files:
src/sys/arch/sparc64/sparc64: locore.s
Log Message:
- calculate end PA correctly.
- wrap more spitfire specific (flushing I$) code.
- fix inverted #if condition for flushing I$ (and restore ASI_ICACHE_TAG).
To generate a diff of this commit:
cvs rdiff -u -r1.295 -r1.296 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.295 src/sys/arch/sparc64/sparc64/locore.s:1.296
--- src/sys/arch/sparc64/sparc64/locore.s:1.295 Sat Nov 28 21:38:55 2009
+++ src/sys/arch/sparc64/sparc64/locore.s Sun Nov 29 03:31:33 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.295 2009/11/28 21:38:55 mrg Exp $ */
+/* $NetBSD: locore.s,v 1.296 2009/11/29 03:31:33 nakayama Exp $ */
/*
* Copyright (c) 1996-2002 Eduardo Horvath
@@ -5948,6 +5948,7 @@
tnz 1 ! Error!
#endif
add %o0, %o1, %o1 ! End PA
+ dec %o1
!!
!! Both D$ and I$ tags match pa bits 40-13, but
@@ -5973,7 +5974,9 @@
and %o3, %o2, %o3 ! Mask out trash
cmp %o0, %o3
blt,pt %xcc, 2f ! Too low
+#ifdef SPITFIRE
sllx %g1, 40-35, %g1 ! Shift I$ tag into place
+#endif
cmp %o1, %o3
bgt,pt %xcc, 2f ! Too high
nop
@@ -5985,13 +5988,14 @@
stxa %g0, [%o4] ASI_DCACHE_INVALIDATE ! Just right
#endif
2:
-#ifndef SPITFIRE
+#ifdef SPITFIRE
+ and %g1, %o2, %g1 ! Mask out trash
cmp %o0, %g1
blt,pt %xcc, 3f
cmp %o1, %g1
- bgt,pt %icc, 3f
+ bgt,pt %xcc, 3f
nop
- stxa %g0, [%o4] ASI_DCACHE_INVALIDATE
+ stxa %g0, [%o4] ASI_ICACHE_TAG
3:
#endif
membar #StoreLoad