From: Guillermo J. Rozas <edu/mit/csail/zurich/gjr>
Date: Thu, 28 Oct 1993 04:45:51 +0000 (+0000)
Subject: Add a floating-vector rewrite rule.
X-Git-Tag: 20090517-FFI~7653
X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=4e2a47504f2c9d9640a4b3f2df962af07701c707;p=mit-scheme.git

Add a floating-vector rewrite rule.
---

diff --git a/v7/src/compiler/machines/C/rulrew.scm b/v7/src/compiler/machines/C/rulrew.scm
index 2ce274e5f..8b40670dc 100644
--- a/v7/src/compiler/machines/C/rulrew.scm
+++ b/v7/src/compiler/machines/C/rulrew.scm
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: rulrew.scm,v 1.2 1993/06/10 04:59:46 gjr Exp $
+$Id: rulrew.scm,v 1.3 1993/10/28 04:45:51 gjr Exp $
 
 Copyright (c) 1992-1993 Massachusetts Institute of Technology
 
@@ -146,4 +146,30 @@ MIT in each case. |#
 
 (define (rtl:constant-fixnum? expression)
   (and (rtl:constant? expression)
-       (fix:fixnum? (rtl:constant-value expression))))
\ No newline at end of file
+       (fix:fixnum? (rtl:constant-value expression))))
+
+(define-rule rewriting
+  (FLOAT-OFFSET (REGISTER (? base register-known-value))
+		(MACHINE-CONSTANT 0))
+  (QUALIFIER (rtl:simple-float-offset-address? base))
+  (rtl:make-float-offset (rtl:float-offset-address-base base)
+			 (rtl:float-offset-address-offset base)))
+
+(define (rtl:simple-float-offset-address? expr)
+  (and (rtl:float-offset-address? expr)
+       (let ((offset (rtl:float-offset-address-offset expr)))
+	 (or (rtl:machine-constant? offset)
+	     (rtl:register? offset)
+	     (and (rtl:object->datum? offset)
+		  (rtl:register? (rtl:object->datum-expression offset)))))
+       (let ((base (rtl:float-offset-address-base expr)))
+	 (or (rtl:register? base)
+	     (and (rtl:offset-address? base)
+		  (let ((base* (rtl:offset-address-base base))
+			(offset* (rtl:offset-address-offset base)))
+		    (and (rtl:machine-constant? offset*)
+			 (or (rtl:register? base*)
+			     (and (rtl:object->address? base*)
+				  (rtl:register?
+				   (rtl:object->address-expression
+				    base*)))))))))))
\ No newline at end of file