diff --git a/compiler/generic/vm-tran.lisp b/compiler/generic/vm-tran.lisp
index 094b78630f971b77987c409b7ffb359b20778da2..327e4bdfc7243aded085bfcfc63f73bf15be397d 100644
--- a/compiler/generic/vm-tran.lisp
+++ b/compiler/generic/vm-tran.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman (FAHLMAN@CMUC). 
 ;;; **********************************************************************
 ;;;
-;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/vm-tran.lisp,v 1.11 1990/06/06 03:57:36 wlott Exp $
+;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/vm-tran.lisp,v 1.12 1990/06/15 12:35:22 wlott Exp $
 ;;;
 ;;;    This file contains impelemtentation-dependent transforms.
 ;;;
@@ -139,17 +139,19 @@
 	      `(multiple-value-bind (word bit)
 				    (floor index ,',elements-per-word)
 		 (ldb ,(ecase vm:target-byte-order
-			 (:little-endian '(byte ,bits bit))
-			 (:big-endian '(byte 1 (- vm:word-bits ,bits bit))))
+			 (:little-endian '(byte ,bits (* bit ,bits)))
+			 (:big-endian '(byte ,bits (- vm:word-bits
+						      (* (1+ bit) ,bits)))))
 		      (%raw-bits vector (+ word vm:vector-data-offset)))))
 	    (deftransform data-vector-set ((vector index new-value)
 					   (,type * *))
 	      `(multiple-value-bind (word bit)
 				    (floor index ,',elements-per-word)
 		 (setf (ldb ,(ecase vm:target-byte-order
-			       (:little-endian '(byte ,bits bit))
+			       (:little-endian '(byte ,bits (* bit ,bits)))
 			       (:big-endian
-				'(byte 1 (- vm:word-bits ,bits bit))))
+				'(byte ,bits (- vm:word-bits
+						(* (1+ bit) ,bits)))))
 			    (%raw-bits vector (+ word vm:vector-data-offset)))
 		       new-value)))))))
   (frob simple-bit-vector 1)