From 9081a6d5d38ddf9944e13a56fcd7f3c0b97113c2 Mon Sep 17 00:00:00 2001
From: ram <ram>
Date: Sat, 12 May 1990 21:09:01 +0000
Subject: [PATCH] Fixed output type assertion on logical operations to be *
 rather than T, and added fixnum ASH VOp.

---
 compiler/old-rt/arith.lisp | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/compiler/old-rt/arith.lisp b/compiler/old-rt/arith.lisp
index 5a453fb90..d3b855d0a 100644
--- a/compiler/old-rt/arith.lisp
+++ b/compiler/old-rt/arith.lisp
@@ -102,7 +102,7 @@
 	    :scs (any-reg descriptor-reg))
 	 (y :target r
 	    :scs (any-reg descriptor-reg short-immediate unsigned-immediate)))
-  (:result-types t))
+  (:result-types *))
 
 (define-fixnum-binop fast-logior/fixnum fast-logic-binop/fixnum logior o
   :immed-op oil :unsigned t :commute-op o)
@@ -113,13 +113,26 @@
 (define-fixnum-binop fast-logxor/fixnum fast-logic-binop/fixnum logxor x
   :immed-op xil :unsigned t :commute-op x)
 
-#|
+
 (define-vop (fast-ash/fixnum fast-binop/fixnum)
+  (:args (i :scs (any-reg descriptor-reg)
+	    :target r))
+  (:arg-types fixnum (:constant (integer -31 31)))
+  (:info n)
+  (:translate ash)
   (:generator 1
-    (sc-case y
-      ((any-reg descriptor-reg)
-       ))))
-|#
+    (cond ((plusp n)
+	   (if (> n 15)
+	       (inst sli16 r (- n 16))
+	       (inst sli r n)))
+	  ((minusp n)
+	   (if (> n 15)
+	       (inst sari16 r (- n 16))
+	       (inst sari r n))))
+
+    (unless (location= i r)
+      (inst lr r i))))
+
 
 (define-miscop-variants effectless-unaffected-two-arg-miscop
 			logand logior logxor)
-- 
GitLab