diff --git a/lisp/Darwin-os.c b/lisp/Darwin-os.c
index e6111c32ad24f550e068465010fc8338b18d370a..c124ed60e1fe77a4e0865e56dd40c0a85f66210b 100644
--- a/lisp/Darwin-os.c
+++ b/lisp/Darwin-os.c
@@ -14,7 +14,7 @@
  * Frobbed for OpenBSD by Pierre R. Mai, 2001.
  * Frobbed for Darwin by Pierre R. Mai, 2003.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Darwin-os.c,v 1.24 2008/12/29 14:40:34 rtoy Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Darwin-os.c,v 1.25 2009/01/06 00:06:46 rtoy Rel $
  *
  */
 
@@ -197,9 +197,6 @@ sc_reg(os_context_t * context, int offset)
     return (int *) 0;
 }
 #elif defined(__i386__)
-unsigned long *
-os_sigcontext_reg(ucontext_t *scp, int index)
-{
 #if __DARWIN_UNIX03
   /* Nothing needed for 10.5 */
 #else
@@ -227,6 +224,10 @@ os_sigcontext_reg(ucontext_t *scp, int index)
 #define __fpu_fsw   fpu_fsw
 #define __fpu_mxcsr fpu_mxcsr
 #endif
+
+unsigned long *
+os_sigcontext_reg(ucontext_t *scp, int index)
+{
     switch (index) {
     case 0:
 	return (unsigned long *) &scp->uc_mcontext->__ss.__eax;
@@ -301,11 +302,13 @@ os_sigcontext_fpu_modes(ucontext_t *scp)
     DPRINTF(0, (stderr, "FPU modes = %08x (sw =  %4x, cw = %4x)\n",
 		modes, (unsigned int) sw, (unsigned int) cw));
 
-    mxcsr = scp->uc_mcontext->__fs.__fpu_mxcsr;
-    DPRINTF(0, (stderr, "SSE2 modes = %08x\n", mxcsr));
-
-    modes |= mxcsr;
+    if (fpu_mode == SSE2) {
+      mxcsr = scp->uc_mcontext->__fs.__fpu_mxcsr;
+      DPRINTF(0, (stderr, "SSE2 modes = %08x\n", mxcsr));
 
+      modes |= mxcsr;
+    }
+    
     DPRINTF(0, (stderr, "modes pre mask = %08x\n", modes));
 
     /* Convert exception mask to exception enable */