Index: /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp
===================================================================
--- /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp	(revision 7876)
+++ /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp	(revision 7877)
@@ -3552,4 +3552,18 @@
   (btl (:$ub bit) (:%l int)))
 
+;; might be able to use al/ah here
+(define-x8632-vinsn set-c-flag-if-variable-logbitp (()
+                                                    ((bit :imm)
+                                                     (int :imm))
+                                                    ((temp0 :u8)
+                                                     (temp1 :u8)))
+  (movl (:$l 31) (:%l temp1))
+  (movl (:%l bit) (:%l temp0))
+  (sarl (:$ub x8632::fixnumshift) (:%l temp0))
+  (addl (:$b x8632::fixnumshift) (:%l temp0))
+  (rcmpl (:%l temp0) (:%l temp1))
+  (cmoval (:%l temp1) (:%l temp0))
+  (btl (:%l temp0) (:%l int)))
+
 (define-x8632-vinsn multiply-immediate (((dest :imm))
                                         ((src :imm)
@@ -3639,4 +3653,36 @@
   (movl (:%l temp) (:@ (:%seg :rcontext) x8632::tcr.next-tsp)))
 
+(define-x8632-vinsn (temp-push-single-float :push :word :csp)
+    (()
+     ((f :single-float)))
+  (movd (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%mmx x8632::stack-temp))
+  (subl (:$b 8) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp))
+  (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l x8632::ra0))
+  (movd (:%mmx x8632::stack-temp) (:@ (:%l x8632::ra0)))
+  (movss (:%xmm f) (:@ 4 (:%l x8632::ra0))))
+
+(define-x8632-vinsn (temp-pop-single-float :pop :word :csp)
+    (((f :single-float))
+     ())
+  (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l x8632::ra0))
+  (movss (:@ 4 (:%q x8664::ra0)) (:%xmm f))
+  (addl (:$b (* 2 x8632::dnode-size)) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp)))
+
+(define-x8632-vinsn (temp-push-double-float :push :word :csp)
+    (()
+     ((f :double-float)))
+  (movd (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%mmx x8632::stack-temp))
+  (subl (:$b 16) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp))
+  (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l x8632::ra0))
+  (movd (:%mmx x8632::stack-temp) (:@ (:%l x8632::ra0)))
+  (movsd (:%xmm f) (:@ 8 (:%l x8632::ra0))))
+
+(define-x8632-vinsn (temp-pop-double-float :pop :word :csp)
+    (((f :double-float))
+     ())
+  (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l x8632::ra0))
+  (movsd (:@ 8 (:%l x8632::ra0)) (:%xmm f))
+  (addl (:$b 16) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp)))
+
 (queue-fixup
  (fixup-x86-vinsn-templates
