summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/sparc/reg_win/window.S
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/lib/libcpu/sparc/reg_win/window.S12
1 files changed, 6 insertions, 6 deletions
diff --git a/c/src/lib/libcpu/sparc/reg_win/window.S b/c/src/lib/libcpu/sparc/reg_win/window.S
index 06a7056c03..f57fbe18a8 100644
--- a/c/src/lib/libcpu/sparc/reg_win/window.S
+++ b/c/src/lib/libcpu/sparc/reg_win/window.S
@@ -76,7 +76,8 @@ SYM(window_overflow_trap_handler):
*
* l1 = pc
* l2 = npc
- * l3 = wim (from trap table)
+ * l3 = wim (from trap vector)
+ * l4 = wim << 1 (from trap vector)
*/
PUBLIC(window_underflow_trap_handler)
@@ -96,15 +97,14 @@ SYM(window_underflow_trap_handler):
* register will result in the local register set changing.
*/
- ! In WIM 3 write instruction delay. since WIM<=0 from trap entry
- sll %l3, 1, %l4 ! l4 = WIM << 1
srl %l3, SPARC_NUMBER_OF_REGISTER_WINDOWS-1, %l5
- or %l5, %l4, %i5 ! %i5= (WIM << 1) |
+ or %l5, %l4, %l5 ! l5 = (WIM << 1) |
! (WIM >> (Number Windows-1))
+ mov %l5, %wim ! load the new WIM
+ nop; nop; nop ! 3 slot delay
restore ! Two restores to get into the
- restore %o5, %g0, %l7 ! window to restore. Carry along new WIM
+ restore ! window to restore
ldd [%sp + 0x00], %l0 ! First the local register set
- mov %l7, %wim ! load the new WIM
ldd [%sp + 0x08], %l2
ldd [%sp + 0x10], %l4
ldd [%sp + 0x18], %l6