Fix bug in byte-offset-address re-write rule.
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Tue, 18 Feb 1992 21:57:31 +0000 (21:57 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Tue, 18 Feb 1992 21:57:31 +0000 (21:57 +0000)
It was constructing invalid RTL, and using the wrong offset to boot.

v7/src/compiler/machines/i386/rulrew.scm

index f6dd73d08fe7a1b989bfa9a3f7225ebef6fc3616..6bc5f3efe3d5189e062fc9e88498e57c414d8f16 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/i386/rulrew.scm,v 1.7 1992/02/17 22:35:54 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/i386/rulrew.scm,v 1.8 1992/02/18 21:57:31 jinx Exp $
 $MC68020-Header: /scheme/src/compiler/machines/bobcat/RCS/rulrew.scm,v 1.4 1991/10/25 06:50:06 cph Exp $
 
 Copyright (c) 1992 Massachusetts Institute of Technology
@@ -116,16 +116,15 @@ MIT in each case. |#
                     (offset* (rtl:offset-number base)))
                 (and (= (rtl:register-number base*) address)
                      (= offset* offset)))))))
-  (let ((target (rtl:make-offset address offset)))
+  (let ((target (let ((base (rtl:byte-offset-address-base source)))
+                 (if (rtl:register? base)
+                     (register-known-value (rtl:register-number base))
+                     base))))
     (list 'ASSIGN
          target
-         (rtl:make-byte-offset-address
-          target
-          (rtl:byte-offset-address-number
-           (let ((base (rtl:byte-offset-address-base source)))
-             (if (rtl:register? base)
-                 (register-known-value (rtl:register-number base))
-                 base)))))))
+         (rtl:make-byte-offset-address target
+                                       (rtl:byte-offset-address-number
+                                        source)))))
 
 (define-rule rewriting
   (EQ-TEST (? source) (REGISTER (? comparand register-known-value)))