diff --git a/compiler/x86/float-sse2.lisp b/compiler/x86/float-sse2.lisp
index 859fd73a6f15b1689df365d46d7e9052d8ccacf2..96ac451e88552c56b918b17f5d034518b49c6d12 100644
--- a/compiler/x86/float-sse2.lisp
+++ b/compiler/x86/float-sse2.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-sse2.lisp,v 1.5 2009/06/13 03:39:20 rtoy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/float-sse2.lisp,v 1.6 2009/06/14 14:19:19 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -1312,8 +1312,9 @@
     (sc-case r
       (complex-single-reg
        ;; x = a + b*i = b|a
-       (inst movss temp real)		; temp = ?|a
-       (inst unpcklps temp imag)	; temp = b|a
+       (inst xorps temp temp)		; temp = 0|0|0|0
+       (inst movss temp real)		; temp = 0|0|0|a
+       (inst unpcklps temp imag)	; temp = 0|0|b|a
        (inst movaps r temp))
       (complex-single-stack
        (inst movss (ea-for-csf-real-stack r) real)
@@ -1347,12 +1348,14 @@
   (:arg-types complex-single-float)
   (:results (r :scs (single-reg)))
   (:result-types single-float)
+  (:temporary (:sc complex-single-reg) temp)
   (:policy :fast-safe)
   (:note "complex float realpart")
   (:generator 3
     (sc-case x
       (complex-single-reg
-       (inst movss r x))
+       (inst xorps temp temp)		; temp = 0|0|0|0
+       (inst movss r x))		; r = 0|0|0|x
       (complex-single-stack
        (inst movss r (ea-for-csf-real-stack x)))
       (descriptor-reg
@@ -1364,12 +1367,14 @@
   (:arg-types complex-double-float)
   (:results (r :scs (double-reg)))
   (:result-types double-float)
+  (:temporary (:sc complex-double-reg) temp)
   (:policy :fast-safe)
   (:note "complex float realpart")
   (:generator 3
     (sc-case x
       (complex-double-reg
-       (inst movsd r x))
+       (inst xorpd temp temp)		; temp = 0|0
+       (inst movsd r x))		; r = 0|x
       (complex-double-stack
        (inst movsd r (ea-for-cdf-real-stack x)))
       (descriptor-reg
@@ -1388,10 +1393,12 @@
     (sc-case x
       (complex-single-reg
        ;; x = a+b*i = b|a
-       (inst movaps r x)
-       ;; Get the imag part to the low part of r.  We don't care about
+       ;; Get the imag part to the low part of temp.  We don't care about
        ;; the other parts of r.
-       (inst shufps r r #b01))
+       (inst shufps temp x #b01)	; temp = a|a|a|b
+       (inst xorps r r)			; r = 0|0|0|0
+       (inst movss r temp)		; r = 0|0|0|b
+       )
       (complex-single-stack
        (inst movss r (ea-for-csf-imag-stack x)))
       (descriptor-reg
@@ -1409,7 +1416,8 @@
   (:generator 3
     (sc-case x
       (complex-double-reg
-       (inst movhlps r x))
+       (inst xorpd r r)			; r = 0|0
+       (inst movhlps r x))		; r = 0|b
       (complex-double-stack
        (inst movsd r (ea-for-cdf-imag-stack x)))
       (descriptor-reg
@@ -2016,10 +2024,10 @@
 	     (:translate *)
 	     (:temporary (:scs (,complex-sc-type)) t0)
 	     (:generator ,cost
-	       (inst movaps t0 x)	; t0 = x
-	       (inst ,copy t0 t0)	; t0 = x|x
+	       (inst movaps t0 x)	; t0 = 0|x or 0|0|0|x
+	       (inst ,copy t0 t0)	; t0 = x|x or 0|0|x|x
 	       (unless (location= y r)
-		 (inst movaps r y))	; r = yi|yr
+		 (inst movaps r y))	; r = yi|yr or 0|0|yi|yr
 	       (inst ,fmul r t0)))))))
   (complex-*-float single mulps movlhps 4)
   (complex-*-float double mulpd unpcklpd 4))
@@ -2059,7 +2067,9 @@
     (inst movaps t1 x)			; t1 = u|u|xi|xr
     (inst movlhps t1 t1)		; t1 = xi|xr|xi|xr
     (inst divps t1 t0)
-    (inst movaps r t1)))
+    (inst xorps t0 t0)			; t0 = 0|0|0|0
+    (inst movaps r t1)
+    (inst movlhps r t0)))
 
 (define-vop (sse3-*/complex-double-float)
   (:translate *)
@@ -2148,4 +2158,6 @@
     (inst movd t0 tmp)			; t0 = 0|0|0|#x80000000
     (inst xorps t2 t0)			; t2 = a*d|-b*d
     (inst addps t2 t1)			; t2 = a*d+b*c | a*c-b*d
-    (inst movaps r t2)))
+    (inst xorps t1 t1)			; t1 = 0|0|0|0
+    (inst movaps r t2)
+    (inst movlhps r t1)))