diff --git a/compiler/x86/float.lisp b/compiler/x86/float.lisp
index cdab951edf26e64fd5885929a136cb54788c4109..4fe3af88f08ca9a250ab7e061dc1c471ed927eef 100644
--- a/compiler/x86/float.lisp
+++ b/compiler/x86/float.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman or slisp-group@cs.cmu.edu.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/float.lisp,v 1.8 1997/07/26 17:22:48 dtc Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/float.lisp,v 1.9 1997/08/30 16:01:01 dtc Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -1321,49 +1321,39 @@
   (:result-types unsigned-num)
   (:translate floating-point-modes)
   (:policy :fast-safe)
-  (:vop-var vop)
-  (:temporary (:sc dword-reg :offset  eax-offset :target res)  eax)
-  (:temporary (:sc dword-reg) tmp)
+  (:temporary (:sc dword-reg :offset eax-offset :target res :to :result) eax)
   (:generator 8
-   (inst mov tmp esp-tn)		; save stack pointer
    (inst sub esp-tn npx-env-size)	; make space on stack
    (inst wait)                          ; Catch any pending FPE exceptions
    (inst fstenv (make-ea :dword :base esp-tn)) ; masks all exceptions
    (inst fldenv (make-ea :dword :base esp-tn)) ; restore previous state
-   (inst mov ax-tn (make-ea :word :base esp-tn :disp npx-sw-offset))
-   (inst shl eax 16)			; current status to high word
+   ;; Current status to high word
+   (inst mov eax (make-ea :dword :base esp-tn :disp (- npx-sw-offset 2)))
+   ;; Exception mask to low word
    (inst mov ax-tn (make-ea :word :base esp-tn :disp npx-cw-offset))
-   (inst xor ax-tn #x3f)       ; turn exception mask to trap enable bits
-   (inst mov esp-tn tmp)		; reset stack
+   (inst add esp-tn npx-env-size)	; Pop stack
+   (inst xor eax #x3f)	; Flip exception mask to trap enable bits
    (move res eax)))
 
 (define-vop (set-floating-point-modes)
-  (:args (new :scs (unsigned-reg) :target res))
+  (:args (new :scs (unsigned-reg) :to :result :target res))
   (:results (res :scs (unsigned-reg)))
   (:arg-types unsigned-num)
   (:result-types unsigned-num)
   (:translate (setf floating-point-modes))
   (:policy :fast-safe)
-  (:vop-var vop)
-  (:temporary (:sc dword-reg :offset eax-offset) eax)
-  (:temporary (:sc dword-reg) stmp)
-  (:temporary (:sc dword-reg) wtmp)
+  (:temporary (:sc dword-reg :offset eax-offset :from :eval :to :result) eax)
   (:generator 3
-   (inst mov stmp esp-tn)		; save stack pointer
    (inst sub esp-tn npx-env-size)	; make space on stack
    (inst wait)                          ; Catch any pending FPE exceptions
    (inst fstenv (make-ea :dword :base esp-tn))
-   (inst mov ax-tn (make-ea :word :base esp-tn :disp npx-sw-offset))
-   (move wtmp new)
-   (inst shr wtmp 16)			; position sticky bits
-   (inst and wtmp #x3f)
-   (inst and eax wtmp)			; maybe new sticky bits
-   (inst mov (make-ea :word :base esp-tn :disp npx-sw-offset) ax-tn)
-   (move eax new)
+   (inst mov eax new)
    (inst xor eax #x3f)	    ; turn trap enable bits into exception mask
    (inst mov (make-ea :word :base esp-tn :disp npx-cw-offset) ax-tn)
+   (inst shr eax 16)			; position status word
+   (inst mov (make-ea :word :base esp-tn :disp npx-sw-offset) ax-tn)
    (inst fldenv (make-ea :dword :base esp-tn))
-   (move esp-tn stmp)			; reset stack
+   (inst add esp-tn npx-env-size)	; Pop stack
    (move res new)))