[OpenBIOS] [PATCH 8/8] SPARC64: rearrange saved state window order

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Sun Nov 22 19:38:44 CET 2015


Instead of storing the windows in numerical order, store them starting
from %cwp. This means the current window can be located at a fixed point
in the state, rather than calculating the offset based upon %cwp.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
---
 openbios-devel/arch/sparc64/cpustate.h |   26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/openbios-devel/arch/sparc64/cpustate.h b/openbios-devel/arch/sparc64/cpustate.h
index 35ca712..0c276bf 100644
--- a/openbios-devel/arch/sparc64/cpustate.h
+++ b/openbios-devel/arch/sparc64/cpustate.h
@@ -72,11 +72,15 @@
 	/* Get the number of windows in %g6 */ \
 	rdpr	%ver, %g6; \
 	and	%g6, 0xf, %g6; \
-	inc	%g6; \
+	\
+	mov     %g6, %g4; \
+	inc     %g4; \
+	\
+	/* Starting cwp in g7 */ \
+	rdpr    %cwp, %g7; \
 	\
 save_cpu_window_##type: \
-	deccc	%g6; \
-	wrpr	%g6, %cwp; \
+	wrpr    %g7, %cwp; \
 	stx	%l0, [%g5]; \
 	stx	%l1, [%g5 + 0x8]; \
 	stx	%l2, [%g5 + 0x10]; \
@@ -93,6 +97,9 @@ save_cpu_window_##type: \
 	stx	%i5, [%g5 + 0x68]; \
 	stx	%i6, [%g5 + 0x70]; \
 	stx	%i7, [%g5 + 0x78]; \
+	dec	%g7; \
+	and	%g7, %g6, %g7; \
+	subcc	%g4, 1, %g4; \
 	bne	save_cpu_window_##type; \
 	 add	%g5, 0x80, %g5; \
 	\
@@ -144,14 +151,18 @@ save_trap_state_##type: \
 	/* Get the number of windows in %g6 */ \
 	rdpr	%ver, %g6; \
 	and	%g6, 0xf, %g6; \
-	inc	%g6; \
+	\
+	mov	%g6, %g4; \
+	inc	%g4; \
+	\
+	/* Set starting window */ \
+	ldx	[%g1], %g7; \
 	\
 	/* Now iterate through all of the windows restoring all l and i registers */ \
 	add	%g1, 0x90, %g5; \
 	\
 restore_cpu_window_##type: \
-	deccc	%g6; \
-	wrpr	%g6, %cwp; \
+	wrpr	%g7, %cwp; \
 	ldx	[%g5], %l0; \
 	ldx	[%g5 + 0x8], %l1; \
 	ldx	[%g5 + 0x10], %l2; \
@@ -168,6 +179,9 @@ restore_cpu_window_##type: \
 	ldx	[%g5 + 0x68], %i5; \
 	ldx	[%g5 + 0x70], %i6; \
 	ldx	[%g5 + 0x78], %i7; \
+	dec	%g7; \
+	and	%g7, %g6, %g7; \
+	subcc	%g4, 1, %g4; \
 	bne	restore_cpu_window_##type; \
 	 add	%g5, 0x80, %g5; \
 	\
-- 
1.7.10.4




More information about the OpenBIOS mailing list