diff --git a/compiler/x86/sse2-array.lisp b/compiler/x86/sse2-array.lisp
index b2feb550b2ee07d0bf4e484340f494b4a542c025..084c5ace88a88f417f02e023cc0d8b6273f4f0f0 100644
--- a/compiler/x86/sse2-array.lisp
+++ b/compiler/x86/sse2-array.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/sse2-array.lisp,v 1.1.2.2.2.1 2008/10/07 13:29:53 rtoy Exp $")
+ "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/sse2-array.lisp,v 1.1.2.2.2.2 2008/10/11 01:35:24 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -167,15 +167,20 @@
   (:result-types complex-single-float)
   (:guard (backend-featurep :sse2))
   (:generator 5
-    (let ((real-tn (complex-single-reg-real-tn value)))
-      (inst movss real-tn (make-ea :dword :base object :index index :scale 2
-				   :disp (- (* vm:vector-data-offset vm:word-bytes)
-					    vm:other-pointer-type))))
-    (let ((imag-tn (complex-single-reg-imag-tn value)))
-      (inst movss imag-tn (make-ea :dword :base object :index index :scale 2
-				   :disp (- (* (1+ vm:vector-data-offset)
-					       vm:word-bytes)
-					    vm:other-pointer-type))))))
+    #+(or)
+    (progn
+      (let ((real-tn (complex-single-reg-real-tn value)))
+	(inst movss real-tn (make-ea :dword :base object :index index :scale 2
+				     :disp (- (* vm:vector-data-offset vm:word-bytes)
+					      vm:other-pointer-type))))
+      (let ((imag-tn (complex-single-reg-imag-tn value)))
+	(inst movss imag-tn (make-ea :dword :base object :index index :scale 2
+				     :disp (- (* (1+ vm:vector-data-offset)
+						 vm:word-bytes)
+					      vm:other-pointer-type)))))
+    (inst movlps value (make-ea :dword :base object :index index :scale 2
+				:disp (- (* vm:vector-data-offset vm:word-bytes)
+					 vm:other-pointer-type)))))
 
 (define-vop (data-vector-ref-c/simple-array-complex-single-float)
   (:note "inline array access")
@@ -188,18 +193,24 @@
   (:result-types complex-single-float)
   (:guard (backend-featurep :sse2))
   (:generator 4
-    (let ((real-tn (complex-single-reg-real-tn value)))
-      (inst movsd real-tn
-	    (make-ea :dword :base object
-		     :disp (- (+ (* vm:vector-data-offset vm:word-bytes)
-				 (* 8 index))
-			      vm:other-pointer-type))))
-    (let ((imag-tn (complex-single-reg-imag-tn value)))
-      (inst movsd imag-tn
-	    (make-ea :dword :base object
-		     :disp (- (+ (* vm:vector-data-offset vm:word-bytes)
-				 (* 8 index) 4)
-			      vm:other-pointer-type))))))
+    #+(or)
+    (progn
+      (let ((real-tn (complex-single-reg-real-tn value)))
+	(inst movsd real-tn
+	      (make-ea :dword :base object
+		       :disp (- (+ (* vm:vector-data-offset vm:word-bytes)
+				   (* 8 index))
+				vm:other-pointer-type))))
+      (let ((imag-tn (complex-single-reg-imag-tn value)))
+	(inst movsd imag-tn
+	      (make-ea :dword :base object
+		       :disp (- (+ (* vm:vector-data-offset vm:word-bytes)
+				   (* 8 index) 4)
+				vm:other-pointer-type)))))
+    (inst movlps value (make-ea :dword :base object
+				:disp (- (+ (* vm:vector-data-offset vm:word-bytes)
+					    (* 8 index))
+					 vm:other-pointer-type)))))
 
 (define-vop (data-vector-set/simple-array-complex-single-float)
   (:note "inline array store")
@@ -214,22 +225,30 @@
   (:result-types complex-single-float)
   (:guard (backend-featurep :sse2))
   (:generator 5
-    (let ((value-real (complex-single-reg-real-tn value))
-	  (result-real (complex-single-reg-real-tn result)))
-      (inst movss (make-ea :dword :base object :index index :scale 2
-			   :disp (- (* vm:vector-data-offset
-				       vm:word-bytes)
-				    vm:other-pointer-type))
-	    value-real)
-      (inst movss result-real value-real))
-    (let ((value-imag (complex-single-reg-imag-tn value))
-	  (result-imag (complex-single-reg-imag-tn result)))
-      (inst movss (make-ea :dword :base object :index index :scale 2
-			   :disp (- (+ (* vm:vector-data-offset vm:word-bytes)
-				       4)
-				    vm:other-pointer-type))
-	    value-imag)
-      (inst movss result-imag value-imag))))
+    #+(or)
+    (progn
+      (let ((value-real (complex-single-reg-real-tn value))
+	    (result-real (complex-single-reg-real-tn result)))
+	(inst movss (make-ea :dword :base object :index index :scale 2
+			     :disp (- (* vm:vector-data-offset
+					 vm:word-bytes)
+				      vm:other-pointer-type))
+	      value-real)
+	(inst movss result-real value-real))
+      (let ((value-imag (complex-single-reg-imag-tn value))
+	    (result-imag (complex-single-reg-imag-tn result)))
+	(inst movss (make-ea :dword :base object :index index :scale 2
+			     :disp (- (+ (* vm:vector-data-offset vm:word-bytes)
+					 4)
+				      vm:other-pointer-type))
+	      value-imag)
+	(inst movss result-imag value-imag)))
+    (inst movlps (make-ea :dword :base object :index index :scale 2
+			  :disp (- (* vm:vector-data-offset
+				      vm:word-bytes)
+				   vm:other-pointer-type))
+	  value)
+    (inst movaps result value)))
 
 (define-vop (data-vector-set-c/simple-array-complex-single-float)
   (:note "inline array store")
@@ -244,23 +263,32 @@
   (:result-types complex-single-float)
   (:guard (backend-featurep :sse2))
   (:generator 4
-    (let ((value-real (complex-single-reg-real-tn value))
-	  (result-real (complex-single-reg-real-tn result)))
-      (inst movsd (make-ea :dword :base object
-			   :disp (- (+ (* vm:vector-data-offset
-					  vm:word-bytes)
-				       (* 8 index))
-				    vm:other-pointer-type))
-	    value-real)
-      (inst movsd result-real value-real))
-    (let ((value-imag (complex-single-reg-imag-tn value))
-	  (result-imag (complex-single-reg-imag-tn result)))
-      (inst movsd (make-ea :dword :base object
-			   :disp (- (+ (* vm:vector-data-offset vm:word-bytes)
-				       (* 8 index) 4)
-				    vm:other-pointer-type))
-	    value-imag)
-      (inst movsd result-imag value-imag))))
+    #+(or)
+    (progn
+      (let ((value-real (complex-single-reg-real-tn value))
+	    (result-real (complex-single-reg-real-tn result)))
+	(inst movsd (make-ea :dword :base object
+			     :disp (- (+ (* vm:vector-data-offset
+					    vm:word-bytes)
+					 (* 8 index))
+				      vm:other-pointer-type))
+	      value-real)
+	(inst movsd result-real value-real))
+      (let ((value-imag (complex-single-reg-imag-tn value))
+	    (result-imag (complex-single-reg-imag-tn result)))
+	(inst movsd (make-ea :dword :base object
+			     :disp (- (+ (* vm:vector-data-offset vm:word-bytes)
+					 (* 8 index) 4)
+				      vm:other-pointer-type))
+	      value-imag)
+	(inst movsd result-imag value-imag)))
+    (inst movlps (make-ea :dword :base object
+			  :disp (- (+ (* vm:vector-data-offset
+					 vm:word-bytes)
+				      (* 8 index))
+				   vm:other-pointer-type))
+	  value)
+    (inst movsd result value)))
 
 (define-vop (data-vector-ref/simple-array-complex-double-float)
   (:note "inline array access")