diff --git a/src/code/float-trap.lisp b/src/code/float-trap.lisp
index d97d04e82326ce6375d113dba879c32113f8d3c2..db0a9c41bf2b2e1b9f58aa332af643471a94c3ff 100644
--- a/src/code/float-trap.lisp
+++ b/src/code/float-trap.lisp
@@ -87,7 +87,7 @@
     (setf (x87-floating-point-modes) x87-modes)))
   )
 
-#+sse2
+#+(and sse2 (not darwin))
 (progn
   (defun floating-point-modes ()
     ;; Combine the modes from the FPU and SSE2 units.  Since the sse
@@ -119,7 +119,20 @@
       (setf (vm::sse2-floating-point-modes) new-mode)
       (setf (vm::x87-floating-point-modes) x87-modes))
     new-mode)
-)
+  )
+
+#(and sse2 darwin)
+(progn
+  (defun floating-point-modes ()
+    ;; Get just the SSE2 mode bits.
+    (vm::sse2-floating-point-modes))
+
+  (defun (setf floating-point-modes) (new-mode)
+    (declare (type (unsigned-byte 24) new-mode))
+    ;; Set the floating point modes for SSE2.
+    (setf (vm::sse2-floating-point-modes) new-mode)
+    new-mode)
+  )
 
 ;;; SET-FLOATING-POINT-MODES  --  Public
 ;;;