diff --git a/lisp/sparc-assem.S b/lisp/sparc-assem.S
index 3fbba20e22714bff54a9e7df19aa032021135504..6870ad94270399d6cf689e30af8ef8cd38b38067 100644
--- a/lisp/sparc-assem.S
+++ b/lisp/sparc-assem.S
@@ -55,7 +55,7 @@ _call_into_lisp:
         /* Save the return address. */
         st      %i7, [%fp-4]
 
-        /* Clear the descriptor regs. */
+        /* Clear the descriptor regs. (See sparc/vm.lisp) */
         mov     reg_ZERO, reg_A0
         mov     reg_ZERO, reg_A1
         mov     reg_ZERO, reg_A2
@@ -64,7 +64,6 @@ _call_into_lisp:
         mov     reg_ZERO, reg_A5
         mov     reg_ZERO, reg_OCFP
         mov     reg_ZERO, reg_LRA
-        mov     reg_ZERO, reg_L2
         mov     reg_ZERO, reg_CODE
 
         /* Establish NIL */
@@ -161,11 +160,13 @@ _call_into_c:
 	st	reg_L0, [reg_CFP+4]
 
         /* Store LISP state */
-	andn	reg_ALLOC, 7, reg_L1
-        store(reg_L1,_current_dynamic_space_free_pointer)
         store(reg_BSP,_current_binding_stack_pointer)
         store(reg_CSP,_current_control_stack_pointer)
         store(reg_CFP,_current_control_frame_pointer)
+	/* Use reg_CFP as a work register, and restore it */
+	andn	reg_ALLOC, 7, reg_CFP
+        store(reg_CFP,_current_dynamic_space_free_pointer)
+		load(_current_control_frame_pointer, reg_CFP)
 
         /* No longer in Lisp. */
         store(reg_CSP,_foreign_function_call_active)
@@ -561,3 +562,9 @@ save_context:
 	SET_SIZE(save_context)
 
 #endif
+/*
+ * Local variables:
+ * tab-width: 8
+ * End:
+ */						
+