diff --git a/assembly/mips/array.lisp b/assembly/mips/array.lisp
index 7294ccf149cb8464a3d62daeb96dcc6183a025d5..cc0dc15f5b57af5a8dbaa5e3273424997b67fc0c 100644
--- a/assembly/mips/array.lisp
+++ b/assembly/mips/array.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman (FAHLMAN@CMUC). 
 ;;; **********************************************************************
 ;;;
-;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/assembly/mips/array.lisp,v 1.7 1990/04/24 03:13:54 wlott Exp $
+;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/assembly/mips/array.lisp,v 1.8 1990/05/23 06:11:51 wlott Exp $
 ;;;
 ;;;    This file contains the support routines for arrays and vectors.
 ;;;
@@ -16,6 +16,8 @@
 (in-package "C")
 
 
+(eval-when (eval)
+
 (defmacro allocate-vector (type length words vector ndescr)
   `(pseudo-atomic (,ndescr)
      (inst or ,vector alloc-tn vm:other-pointer-type)
@@ -36,28 +38,32 @@
   (declare (ignore vector words))
   nil)
 
+); eval-when (eval)
 
-(define-assembly-routine (allocate-vector
-			  (:arg type)
-			  (:arg length)
-			  (:arg words)
-			  (:res result)
 
-			  (:temp vector :sc descriptor-reg)
-			  (:temp ndescr :sc non-descriptor-reg :type random))
+(define-assembly-routine (allocate-vector
+			  ()
+			  (:arg type any-reg a0-offset)
+			  (:arg length any-reg a1-offset)
+			  (:arg words any-reg a2-offset)
+			  (:res result descriptor-reg a0-offset)
+
+			  (:temp ndescr non-descriptor-reg nl0-offset)
+			  (:temp vector descriptor-reg a3-offset))
   (allocate-vector type length words vector ndescr)
   (maybe-invoke-gc vector words)
   (move result vector))
 
 
 (define-assembly-routine (alloc-g-vector
-			  (:arg length)
-			  (:arg fill)
-			  (:res result)
+			  ()
+			  (:arg length any-reg a0-offset)
+			  (:arg fill any-reg a1-offset)
+			  (:res result descriptor-reg a0-offset)
 
-			  (:temp ndescr :sc non-descriptor-reg :type random)
-			  (:temp lip :sc interior-reg :type interior)
-			  (:temp vector :sc descriptor-reg))
+			  (:temp ndescr non-descriptor-reg nl0-offset)
+			  (:temp lip interior-reg lip-offset)
+			  (:temp vector descriptor-reg a3-offset))
 
   (allocate-vector vm:simple-vector-type length length vector ndescr)
   (inst beq length zero-tn done)
@@ -72,17 +78,18 @@
   (inst addu lip lip vm:word-bytes)
 
   done
-
+  
   (move result vector))
 
 
 (define-assembly-routine (alloc-string
-			  (:arg length)
-			  (:res result)
+			  ()
+			  (:arg length any-reg a0-offset)
+			  (:res result descriptor-reg a0-offset)
 
-			  (:temp ndescr :sc non-descriptor-reg :type random)
-			  (:temp vector :sc descriptor-reg)
-			  (:temp words :sc non-descriptor-reg :type fixnum))
+			  (:temp ndescr non-descriptor-reg nl0-offset)
+			  (:temp words any-reg nl1-offset)
+			  (:temp vector descriptor-reg a3-offset))
   ;; Note: When we calculate the number of words needed, we assure that there
   ;; will be at least one extra byte available.  This allows us to pass strings
   ;; to C land without having to tack an extra null on the end ourselves.
@@ -108,19 +115,19 @@
 
 
 
-
 
 ;;;; Hash primitives
 
 (define-assembly-routine (sxhash-simple-string
-			  (:arg string)
-			  (:res result)
-
-			  (:temp lip :sc interior-reg :type interior)
-			  (:temp length :sc any-reg :type fixnum)
-			  (:temp accum :sc non-descriptor-reg :type random)
-			  (:temp data :sc non-descriptor-reg :type random)
-			  (:temp byte :sc non-descriptor-reg :type random))
+			  ()
+			  (:arg string descriptor-reg a0-offset)
+			  (:res result any-reg a0-offset)
+
+			  (:temp lip interior-reg lip-offset)
+			  (:temp length any-reg a2-offset)
+			  (:temp accum non-descriptor-reg nl0-offset)
+			  (:temp data non-descriptor-reg nl1-offset)
+			  (:temp byte non-descriptor-reg nl2-offset))
   (loadw length string vm:vector-length-slot vm:other-pointer-type)
   (inst addu lip string
 	(- (* vm:vector-data-offset vm:word-bytes) vm:other-pointer-type))
@@ -203,15 +210,15 @@
 
 
 (define-assembly-routine (sxhash-simple-substring
-			  (:arg string)
-			  (:arg length)
-			  (:res result)
-
-			  (:temp lip :sc interior-reg :type interior)
-			  (:temp accum :sc non-descriptor-reg :type random)
-			  (:temp data :sc non-descriptor-reg :type random)
-			  (:temp byte :sc non-descriptor-reg :type random))
-  (loadw length string vm:vector-length-slot vm:other-pointer-type)
+			  ()
+			  (:arg string descriptor-reg a0-offset)
+			  (:arg length any-reg a1-offset)
+			  (:res result any-reg a0-offset)
+
+			  (:temp lip interior-reg lip-offset)
+			  (:temp accum non-descriptor-reg nl0-offset)
+			  (:temp data non-descriptor-reg nl1-offset)
+			  (:temp byte non-descriptor-reg nl2-offset))
   (inst addu lip string
 	(- (* vm:vector-data-offset vm:word-bytes) vm:other-pointer-type))
   (inst b test)
@@ -290,3 +297,4 @@
 
   (inst sll result accum 5)
   (inst srl result result 3))
+