diff --git a/compiler/sparc/arith.lisp b/compiler/sparc/arith.lisp
index 5a2a8034ce6325607221874e618b34484dd22fe1..d4c20f4b240abc2d28cbb6ff46f7b823bd1a707c 100644
--- a/compiler/sparc/arith.lisp
+++ b/compiler/sparc/arith.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman (FAHLMAN@CMUC). 
 ;;; **********************************************************************
 ;;;
-;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/arith.lisp,v 1.2 1990/12/03 19:21:09 wlott Exp $
+;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/arith.lisp,v 1.3 1990/12/11 22:16:03 wlott Exp $
 ;;;
 ;;;    This file contains the VM definition arithmetic VOPs for the MIPS.
 ;;;
@@ -123,79 +123,79 @@
 
 (eval-when (compile load eval)
 
-(defmacro define-binop (translate cost op)
+(defmacro define-binop (translate untagged-penalty op)
   `(progn
      (define-vop (,(symbolicate "FAST-" translate "/FIXNUM=>FIXNUM")
 		  fast-fixnum-binop)
        (:translate ,translate)
-       (:generator ,(1+ cost)
+       (:generator 2
 	 (inst ,op r x y)))
      (define-vop (,(symbolicate 'fast- translate '-c/fixnum=>fixnum)
 		  fast-fixnum-binop-c)
        (:translate ,translate)
-       (:generator ,cost
+       (:generator 1
 	 (inst ,op r x (fixnum y))))
      (define-vop (,(symbolicate "FAST-" translate "/SIGNED=>SIGNED")
 		  fast-signed-binop)
        (:translate ,translate)
-       (:generator ,(+ cost 3)
+       (:generator ,(1+ untagged-penalty)
 	 (inst ,op r x y)))
      (define-vop (,(symbolicate 'fast- translate '-c/signed=>signed)
 		  fast-signed-binop-c)
        (:translate ,translate)
-       (:generator ,(+ cost 2)
+       (:generator ,untagged-penalty
 	 (inst ,op r x y)))
      (define-vop (,(symbolicate "FAST-" translate "/UNSIGNED=>UNSIGNED")
 		  fast-unsigned-binop)
        (:translate ,translate)
-       (:generator ,(+ cost 3)
+       (:generator ,(1+ untagged-penalty)
 	 (inst ,op r x y)))
      (define-vop (,(symbolicate 'fast- translate '-c/unsigned=>unsigned)
 		  fast-unsigned-binop-c)
        (:translate ,translate)
-       (:generator ,(+ cost 2)
+       (:generator ,untagged-penalty
 	 (inst ,op r x y)))))
 
 ); eval-when
 
-(define-binop + 2 add)
-(define-binop - 2 sub)
-(define-binop logand 1 and)
-(define-binop logandc2 1 andn)
-(define-binop logior 1 or)
-(define-binop logorc2 1 orn)
-(define-binop logxor 1 xor)
-(define-binop logeqv 1 xnor)
+(define-binop + 4 add)
+(define-binop - 4 sub)
+(define-binop logand 2 and)
+(define-binop logandc2 2 andn)
+(define-binop logior 2 or)
+(define-binop logorc2 2 orn)
+(define-binop logxor 2 xor)
+(define-binop logeqv 2 xnor)
 
 ;;; Special case fixnum + and - that trap on overflow.  Useful when we
 ;;; don't know that the output type is a fixnum.
 
 (define-vop (fast-+/fixnum fast-+/fixnum=>fixnum)
   (:results (r :scs (any-reg descriptor-reg)))
-  (:result-types (:or signed-num unsigned-num))
+  (:result-types *)
   (:note nil)
-  (:generator 1
+  (:generator 4
     (inst taddcctv r x y)))
 
 (define-vop (fast-+-c/fixnum fast-+-c/fixnum=>fixnum)
   (:results (r :scs (any-reg descriptor-reg)))
-  (:result-types (:or signed-num unsigned-num))
+  (:result-types *)
   (:note nil)
-  (:generator 1
+  (:generator 3
     (inst taddcctv r x y)))
 
 (define-vop (fast--/fixnum fast--/fixnum=>fixnum)
   (:results (r :scs (any-reg descriptor-reg)))
-  (:result-types (:or signed-num unsigned-num))
+  (:result-types *)
   (:note nil)
-  (:generator 1
+  (:generator 4
     (inst tsubcctv r x y)))
 
 (define-vop (fast---c/fixnum fast---c/fixnum=>fixnum)
   (:results (r :scs (any-reg descriptor-reg)))
-  (:result-types (:or signed-num unsigned-num))
+  (:result-types *)
   (:note nil)
-  (:generator 1
+  (:generator 3
     (inst tsubcctv r x y)))
 
 ;;; Shifting