diff --git a/src/compiler/x86/float-sse2.lisp b/src/compiler/x86/float-sse2.lisp
index bd82461cfcbc47131c6542513a87dd9b9e253985..bfa6df901f8f69274fa01913883e121224936813 100644
--- a/src/compiler/x86/float-sse2.lisp
+++ b/src/compiler/x86/float-sse2.lisp
@@ -756,10 +756,11 @@
   (frob single-float-op single-reg single-float)
   (frob double-float-op double-reg double-float))
 
-(macrolet ((generate (movinst opinst commutative rtype ea ea-stack)
-	     (let ((stack-sc (if (eq rtype 'single-reg)
-				 'single-stack
-				 'double-stack)))
+(macrolet ((generate (movinst opinst commutative arg-type)
+	     (multiple-value-bind (rtype stack-sc ea ea-stack)
+		 (if (eq arg-type 'single)
+		     (values 'single-reg 'single-stack 'ea-for-sf-desc 'ea-for-sf-stack)
+		     (values 'double-reg 'double-stack 'ea-for-df-desc 'ea-for-df-stack))
 	       `(progn
 		  (cond
 		    ((location= x r)
@@ -810,7 +811,7 @@
 		  (:translate ,op)
                   (:temporary (:sc single-reg) tmp)
                   (:generator ,scost
-                    (generate movss ,sinst ,commutative single-reg ea-for-sf-desc ea-for-sf-stack)))
+                    (generate movss ,sinst ,commutative single)))
                 (define-vop (,dname double-float-op)
 		  (:args (x :scs (double-reg) :target r)
 			 (y :scs (double-reg descriptor-reg)
@@ -818,7 +819,7 @@
                   (:translate ,op)
                   (:temporary (:sc double-reg) tmp)
                   (:generator ,dcost
-                    (generate movsd ,dinst ,commutative double-reg ea-for-df-desc ea-for-df-stack))))))
+                    (generate movsd ,dinst ,commutative double))))))
   (frob + addss +/single-float 2 addsd +/double-float 2 t)
   (frob - subss -/single-float 2 subsd -/double-float 2 nil)
   (frob * mulss */single-float 4 mulsd */double-float 5 t)