Module Name:    src
Committed By:   mrg
Date:           Tue Feb  2 03:07:06 UTC 2010

Modified Files:
        src/sys/arch/sparc64/sparc64: locore.s

Log Message:
for now, reduce a few #ifdef SPITFIRE cases by introducing a new
ASI_DCACHE_TAG_OR_INV that is either ASI_DCACHE_{TAG,_INVALIDATE}.

increase the common code in cache_flush_phys().


To generate a diff of this commit:
cvs rdiff -u -r1.308 -r1.309 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.308 src/sys/arch/sparc64/sparc64/locore.s:1.309
--- src/sys/arch/sparc64/sparc64/locore.s:1.308	Mon Feb  1 07:01:40 2010
+++ src/sys/arch/sparc64/sparc64/locore.s	Tue Feb  2 03:07:06 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.s,v 1.308 2010/02/01 07:01:40 mrg Exp $	*/
+/*	$NetBSD: locore.s,v 1.309 2010/02/02 03:07:06 mrg Exp $	*/
 
 /*
  * Copyright (c) 1996-2002 Eduardo Horvath
@@ -195,6 +195,12 @@
 /* Give this real authority: reset the machine */
 #define NOTREACHED	sir
 
+#ifdef SPITFIRE
+#define ASI_DCACHE_TAG_OR_INV	ASI_DCACHE_TAG
+#else
+#define ASI_DCACHE_TAG_OR_INV	ASI_DCACHE_INVALIDATE
+#endif
+
 /*
  * This macro will clear out a cache line before an explicit
  * access to that location.  It's mostly used to make certain
@@ -206,11 +212,11 @@
 #ifdef DCACHE_BUG
 #define DLFLUSH(a,t) \
 	andn	a, 0x1f, t; \
-	stxa	%g0, [ t ] ASI_DCACHE_TAG; \
+	stxa	%g0, [ t ] ASI_DCACHE_TAG_OR_INV; \
 	membar	#Sync
 /* The following can be used if the pointer is 16-byte aligned */
 #define DLFLUSH2(t) \
-	stxa	%g0, [ t ] ASI_DCACHE_TAG; \
+	stxa	%g0, [ t ] ASI_DCACHE_TAG_OR_INV; \
 	membar	#Sync
 #else
 #define DLFLUSH(a,t)
@@ -2364,11 +2370,7 @@
 1:
 #if 1
 	/* Now we need to blast away the D$ to make sure we're in sync */
-#ifdef SPITFIRE
-	stxa	%g0, [%g7] ASI_DCACHE_TAG
-#else
-	stxa	%g0, [%g7] ASI_DCACHE_INVALIDATE
-#endif
+	stxa	%g0, [%g7] ASI_DCACHE_TAG_OR_INV
 	brnz,pt	%g7, 1b
 	 dec	8, %g7
 #endif
@@ -5386,11 +5388,7 @@
 	andn	%o3, PSTATE_IE, %o4			! Turn off PSTATE_IE bit
 	wrpr	%o4, 0, %pstate
 1:
-#ifdef SPITFIRE
-	stxa	%g0, [%o1] ASI_DCACHE_TAG
-#else
-	stxa	%g0, [%o1] ASI_DCACHE_INVALIDATE
-#endif
+	stxa	%g0, [%o1] ASI_DCACHE_TAG_OR_INV
 	brnz,pt	%o1, 1b
 	 dec	32, %o1
 	sethi	%hi(KERNBASE), %o2
@@ -5463,11 +5461,7 @@
 	bne,pt	%xcc, 1b
 	 membar	#LoadStore
 
-#ifdef SPITFIRE
-	stxa	%g0, [%o0] ASI_DCACHE_TAG
-#else
-	stxa	%g0, [%o0] ASI_DCACHE_INVALIDATE
-#endif
+	stxa	%g0, [%o0] ASI_DCACHE_TAG_OR_INV
 	ba,pt	%icc, 1b
 	 membar	#StoreLoad
 2:
@@ -5515,38 +5509,30 @@
 	clr	%o4
 1:
 	ldxa	[%o4] ASI_DCACHE_TAG, %o3
-#ifdef SPITFIRE
-	ldda	[%o4] ASI_ICACHE_TAG, %g0	! Tag goes in %g1 -- not on cheetah
-#endif
 	sllx	%o3, 40-29, %o3	! Shift D$ tag into place
 	and	%o3, %o2, %o3	! Mask out trash
-#ifdef SPITFIRE
+
 	cmp	%o0, %o3
 	blt,pt	%xcc, 2f	! Too low
-	 sllx	%g1, 40-35, %g1	! Shift I$ tag into place
-	cmp	%o1, %o3
+	 cmp	%o1, %o3
 	bgt,pt	%xcc, 2f	! Too high
 	 nop
 
 	membar	#LoadStore
-	stxa	%g0, [%o4] ASI_DCACHE_TAG ! Just right
+	stxa	%g0, [%o4] ASI_DCACHE_TAG_OR_INV ! Just right
 2:
-	and	%g1, %o2, %g1	! Mask out trash
+#ifdef SPITFIRE
+	ldda	[%o4] ASI_ICACHE_TAG, %g0	! Tag goes in %g1
+	sllx	%g1, 40-35, %g1			! Shift I$ tag into place
+	and	%g1, %o2, %g1			! Mask out trash
 	cmp	%o0, %g1
 	blt,pt	%xcc, 3f
 	 cmp	%o1, %g1
 	bgt,pt	%xcc, 3f
 	 nop
 	stxa	%g0, [%o4] ASI_ICACHE_TAG
-#else
-	cmp	%o0, %o3
-	blt,pt	%xcc, 3f
-	 cmp	%o1, %o3
-	bgt,pt	%xcc, 3f
-	 nop
-	stxa	%g0, [%o4] ASI_DCACHE_INVALIDATE ! Just right
-#endif
 3:
+#endif
 	membar	#StoreLoad
 	dec	32, %o5
 	brgz,pt	%o5, 1b

Reply via email to