diff --git a/compiler/mips/insts.lisp b/compiler/mips/insts.lisp
index b70ddbee8efd6b45b465498c7124bca0cf646c86..463aac00300fbaa759c10cdddbcc6ea47d7eb99e 100644
--- a/compiler/mips/insts.lisp
+++ b/compiler/mips/insts.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman (FAHLMAN@CMUC). 
 ;;; **********************************************************************
 ;;;
-;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/insts.lisp,v 1.13 1990/04/24 19:10:22 wlott Exp $
+;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/insts.lisp,v 1.14 1990/04/26 20:13:41 wlott Exp $
 ;;;
 ;;; Description of the MIPS architecture.
 ;;;
@@ -261,16 +261,16 @@
 (defmacro define-load/store-instruction (name op)
   `(define-instruction (,name)
      (immediate (op :constant ,op)
-		(rs :argument register)
 		(rt :argument register)
+		(rs :argument register)
 		(immediate :argument (signed-byte 16)))
      (immediate (op :constant ,op)
-		(rs :argument register)
 		(rt :argument register)
+		(rs :argument register)
 		(immediate :argument addi-fixup))
      (immediate (op :constant ,op)
-		(rs :argument register)
 		(rt :argument register)
+		(rs :argument register)
 		(immediate :constant 0))))
 
 (define-load/store-instruction lb #b100000)
@@ -485,20 +485,31 @@
   (header-object (type :constant #x66)))
 
 
-(define-pseudo-instruction compute-code-from-fn 64 (code fn label)
-  ;; code = fn - fn-tag - header - label-offset + other-pointer-tag
-  (let ((offset (- vm:other-pointer-type
-		   vm:function-pointer-type
-		   (label-position label)
-		   (component-header-length))))
-    (inst addu code fn offset)))
-
-(define-pseudo-instruction compute-code-from-lra 64 (code lra label)
-  ;; code = lra - other-pointer-tag - header - label-offset + other-pointer-tag
-  (let ((offset (- (+ (label-position label) (component-header-length)))))
-    (inst addu code lra offset)))
+(defmacro define-compute-instruction (name calculation)
+  `(progn
+     (defun ,name (label)
+       ,calculation)
+     (define-instruction (,name)
+       (immediate (op :constant #b001001)
+		  (rt :argument register)
+		  (rs :argument register)
+		  (immediate :argument label
+			     :function ,name)))))
+
+;; code = fn - fn-tag - header - label-offset + other-pointer-tag
+(define-compute-instruction compute-code-from-fn
+			    (- vm:other-pointer-type
+			       vm:function-pointer-type
+			       (label-position label)
+			       (component-header-length)))
+
+;; code = lra - other-pointer-tag - header - label-offset + other-pointer-tag
+(define-compute-instruction compute-code-from-lra
+			    (- (+ (label-position label)
+				  (component-header-length))))
+
+;; lra = code + other-pointer-tag + header + label-offset - other-pointer-tag
+(define-compute-instruction compute-lra-from-code
+			    (+ (label-position label)
+			       (component-header-length)))
 
-(define-pseudo-instruction compute-lra-from-code 64 (lra code label)
-  ;; lra = code + other-pointer-tag + header + label-offset - other-pointer-tag
-  (let ((offset (+ (label-position label) (component-header-length))))
-    (inst addu lra code offset)))