Index: /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp
===================================================================
--- /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp	(revision 9586)
+++ /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp	(revision 9587)
@@ -1379,4 +1379,17 @@
   (cvtsd2ss (:%xmm src) (:%xmm dest)))
 
+;;; these two clobber unboxed0, unboxed1 in tcr
+;;; (There's no way to move a value from the x87 stack to an xmm register,
+;;; so we have to go through memory.)
+(define-x8632-vinsn fp-stack-to-single (((dest :single-float))
+					())
+  (fstps (:@ (:%seg :rcontext) x8632::tcr.unboxed0))
+  (movss (:@ (:%seg :rcontext) x8632::tcr.unboxed0) (:%xmm dest)))
+
+(define-x8632-vinsn fp-stack-to-double (((dest :double-float))
+					())
+  (fstpl (:@ (:%seg :rcontext) x8632::tcr.unboxed0))
+  (movsd (:@ (:%seg :rcontext) x8632::tcr.unboxed0) (:%xmm dest)))
+
 (define-x8632-vinsn fitvals (()
                              ((n :u16const))
