Index: arch/ia64/src/context.S
===================================================================
--- arch/ia64/src/context.S	(revision d5d2a3ff84d6d7012c3225ebf93d3becc7bfeb68)
+++ arch/ia64/src/context.S	(revision 87cb9e23b30ef01a53a4e81a1976ef1bae6418df)
@@ -37,6 +37,25 @@
 	/* loc2 */
 	mov loc3 = ar.rsc
-	mov loc4 = ar.bsp
+
+	.auto
+
+	/*
+	 * Flush dirty registers to backing store.
+	 * After this ar.bsp and ar.bspstore are equal.
+	 */
+	flushrs
+	mov loc4 = ar.bsp	
+	
+	/*
+	 * Put RSE to enforced lazy mode.
+	 * So that ar.rnat can be read.
+	 */
+	movl loc5 = ~3
+	and loc5 = loc3, loc5
+	mov ar.rsc = loc5
 	mov loc5 = ar.rnat
+
+	.explicit
+
 	mov loc6 = ar.lc
 	mov loc7 = ar.ec
@@ -146,9 +165,23 @@
 	ld8 loc10 = [in0], 8	;;	/* load ar.ssd */
 	
+	.auto	
+
+	/*
+	 * Invalidate the ALAT
+	 */
+	invala
+
 	/*
 	 * Restore application registers
 	 */
+
+	mov ar.bspstore = loc4
+	mov ar.rnat = loc5
+	mov ar.pfs = loc0
+	mov ar.rsc = loc3
+
+	.explicit
+
 	mov ar.unat = loc2	;;
-	/* TODO: restore ar.rsc, ar.rnat, ar.bspstore */	
 	mov ar.lc = loc6
 	mov ar.ec = loc7
@@ -218,5 +251,4 @@
 	mov pr = loc2, ~0
 	
-	mov ar.pfs = loc0
 	mov ar.unat = loc1
 	
