From 4e2a47504f2c9d9640a4b3f2df962af07701c707 Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Thu, 28 Oct 1993 04:45:51 +0000 Subject: [PATCH] Add a floating-vector rewrite rule. --- v7/src/compiler/machines/C/rulrew.scm | 30 +++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) 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 -- 2.25.1