diff --git a/compiler/sparc/array.lisp b/compiler/sparc/array.lisp
index 6eac60ecce9111f09555f7cc67fb709412fd5c98..42d894a76ed2ad609c49b23da8caedeb790740f8 100644
--- a/compiler/sparc/array.lisp
+++ b/compiler/sparc/array.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman (FAHLMAN@CMUC). 
 ;;; **********************************************************************
 ;;;
-;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/array.lisp,v 1.4 1991/04/17 21:36:54 wlott Exp $
+;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/array.lisp,v 1.5 1991/05/04 18:46:52 wlott Exp $
 ;;;
 ;;;    This file contains the SPARC definitions for array operations.
 ;;;
@@ -193,6 +193,7 @@
 	 (:temporary (:scs (non-descriptor-reg)) temp)
 	 (:generator 15
 	   (multiple-value-bind (word extra) (floor index ,elements-per-word)
+	     (setf extra (logxor extra (1- ,elements-per-word)))
 	     (let ((offset (- (* (+ word vm:vector-data-offset) vm:word-bytes)
 			      vm:other-pointer-type)))
 	       (cond ((typep offset '(signed-byte 13))
@@ -203,7 +204,7 @@
 	     (unless (zerop extra)
 	       (inst srl result
 		     (logxor (* extra ,bits) ,(1- elements-per-word))))
-	     (unless (zerop extra)
+	     (unless (= extra ,(1- elements-per-word))
 	       (inst and result ,(1- (ash 1 bits)))))))
        (define-vop (,(symbolicate 'data-vector-set/ type))
 	 (:note "inline array store")