diff --git a/compiler/mips/memory.lisp b/compiler/mips/memory.lisp
index 1ff8a07306d822d735afae0fa539b289bb81206e..4531b7e8ffb0fcc8c29bbf59779fa567b0d46c17 100644
--- a/compiler/mips/memory.lisp
+++ b/compiler/mips/memory.lisp
@@ -7,6 +7,8 @@
 ;;; Scott Fahlman (FAHLMAN@CMUC). 
 ;;; **********************************************************************
 ;;;
+;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/memory.lisp,v 1.2 1990/02/08 19:40:59 wlott Exp $
+;;;
 ;;;    This file contains the MIPS definitions of some general purpose memory
 ;;; reference VOPs inherited by basic memory reference operations.
 ;;;
@@ -28,7 +30,7 @@
   (:variant-vars offset lowtag)
   (:policy :fast-safe)
   (:generator 4
-    (ld value object offset lowtag)))
+    (loadw value object offset lowtag)))
 ;;;
 (define-vop (cell-set)
   (:args (object :scs (descriptor-reg))
@@ -36,7 +38,7 @@
   (:variant-vars offset lowtag)
   (:policy :fast-safe)
   (:generator 4
-    (st value object offset lowtag)))
+    (storew value object offset lowtag)))
 ;;;
 (define-vop (cell-setf)
   (:args (object :scs (descriptor-reg))
@@ -46,7 +48,7 @@
   (:variant-vars offset lowtag)
   (:policy :fast-safe)
   (:generator 4
-    (st value object offset lowtag)
+    (storew value object offset lowtag)
     (move result value)))
 
 ;;; Define-Cell-Accessors  --  Interface
@@ -80,7 +82,7 @@
   (:variant-vars base lowtag)
   (:info offset)
   (:generator 4
-    (ld value object (+ base offset) lowtag)))
+    (loadw value object (+ base offset) lowtag)))
 ;;;
 (define-vop (slot-set)
   (:args (object :scs (descriptor-reg))
@@ -88,7 +90,7 @@
   (:variant-vars base lowtag)
   (:info offset)
   (:generator 4
-    (st value object (+ base offset) lowtag)))
+    (storew value object (+ base offset) lowtag)))
 
 
 
@@ -105,44 +107,30 @@
 ;;;
 (defmacro define-indexer (name write-p op shift)
   `(define-vop (,name)
-     (:args (object :scs (descriptor-reg)
-		    ,@(unless (zerop shift)
-			'(:target object-temp)))
-	    (index :scs (any-reg descriptor-reg immediate negative-immediate)
-		   :target index-temp)
+     (:args (object :scs (descriptor-reg))
+	    (index :scs (any-reg descriptor-reg immediate negative-immediate))
 	    ,@(when write-p
 		'((value :scs (any-reg descriptor-reg) :target result))))
      (:results (,(if write-p 'result 'value)
 		:scs (any-reg descriptor-reg)))
-     (:variant-vars offset)
-     ,@(unless (zerop shift)
-	 `((:temporary (:scs (descriptor-reg)
-			     :from (:argument 0))
-		       object-temp)))
-     (:temporary (:scs (descriptor-reg)
-		       :from (:argument 0))
-		 index-temp)
+     (:variant-vars offset lowtag)
      (:policy :fast-safe)
      (:generator 5
        (sc-case index
 	 ((immediate negative-immediate)
 	  (inst ,op value object
-		;; ### Is this right?  Is index supposed to be a byte or word
-		;; offset?
-		(- (+ (tn-value index) offset) other-pointer-type))
+		(- (+ (ash (tn-value index) (- word-shift ,shift))
+		      (ash offset word-shift))
+		   lowtag))
 	  ,(if write-p
 	       '(move result value)
 	       '(nop)))
 	 (t
-	  ;; This code assumes that object has other-pointer low tag bits.
-	  ;; Note: the temporary reg causes GC problems.
 	  ,@(if (zerop shift)
-		`((inst add index-temp object index))
-		`((move object-temp object)
-		  (inst srl index-temp index ,shift)
-		  (inst add index-temp object-temp index-temp)))
-	  (inst ,op value index-temp (- offset other-pointer-type))
-	  (move index-temp zero-tn)
+		`((inst add lip-tn object index))
+		`((inst srl lip-tn index ,shift)
+		  (inst add lip-tn lip-tn object)))
+	  (inst ,op value lip-tn (- (ash offset word-shift) lowtag))
 	  ,@(when write-p
 	      `((move result value))))))))