diff --git a/compiler/pack.lisp b/compiler/pack.lisp
index 86cd735b8c876c109fd06037cd2c94deac6a94e1..87a0c985c68d65f6ff0a72c2595ddc581b55a446 100644
--- a/compiler/pack.lisp
+++ b/compiler/pack.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/pack.lisp,v 1.44 1991/11/16 16:03:02 ram Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/pack.lisp,v 1.45 1992/05/03 21:45:55 wlott Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -959,7 +959,7 @@
 ;;; of the registers.  This way, all of these temps probably end up in one
 ;;; register.
 ;;;
-(defun select-location (tn sc)
+(defun select-location (tn sc &optional use-reserved-locs)
   (declare (type tn tn) (type sc sc) (inline member))
   (let* ((sb (sc-sb sc))
 	 (element-size (sc-element-size sc))
@@ -980,7 +980,9 @@
 
 	(if (or (eq (sb-kind sb) :unbounded)
 		(and (member current-start (sc-locations sc))
-		     (not (member current-start (sc-reserve-locations sc)))))
+		     (or use-reserved-locs
+			 (not (member current-start
+				      (sc-reserve-locations sc))))))
 	    (dotimes (i element-size
 			(return-from select-location current-start))
 	      (let ((offset (+ current-start i)))
@@ -1418,6 +1420,8 @@
 		(not (and (minusp (tn-cost tn)) (sc-save-p sc))))
 	(let ((loc (or (find-ok-target-offset original sc)
 		       (select-location original sc)
+		       (and restricted
+			    (select-location original sc t))
 		       (when (eq (sb-kind (sc-sb sc)) :unbounded)
 			 (grow-sc sc)
 			 (or (select-location original sc)