diff --git a/lisp/interrupt.c b/lisp/interrupt.c
index 2c484f08f89687623ea8e3447dcff5787a5a0f03..0bb24cbb1a2e94d4a5f7bfbdf7843971e761af8a 100644
--- a/lisp/interrupt.c
+++ b/lisp/interrupt.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.c,v 1.23 2000/10/21 12:42:46 dtc Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.c,v 1.24 2000/10/21 13:01:23 dtc Exp $ */
 
 /* Interrupt handing magic. */
 
@@ -360,14 +360,6 @@ maybe_now_maybe_later(HANDLER_ARGS)
 
     SAVE_CONTEXT(); /**/
 
-#if defined(__linux__) && defined(i386)
-    /*
-     * Restore the FPU control word, setting the rounding mode to nearest.
-     */
-
-    setfpucw(contextstruct.fpstate->cw & ~0xc00);
-#endif
-
     if (SymbolValue(INTERRUPTS_ENABLED) == NIL) {
         pending_signal = signal;
         pending_code = DEREFCODE(code);
@@ -420,12 +412,22 @@ maybe_now_maybe_later(HANDLER_ARGS)
 #endif /* POSIX_SIGS */
 
 	arch_set_pseudo_atomic_interrupted(context);
-    } else
+    } else {
+#if defined(__linux__) && defined(i386)
+      /*
+       * Restore the FPU control word, setting the rounding mode to nearest.
+       */
+
+      if (contextstruct.fpstate)
+	setfpucw(contextstruct.fpstate->cw & ~0xc00);
+#endif
+
 #if ( defined( __linux__ ) && defined( i386 ) )
         interrupt_handle_now(signal, contextstruct);
 #else
         interrupt_handle_now(signal, code, context);
 #endif
+    }
 }
 
 /****************************************************************\