- Add another rule that exapands into PUSH.W &??
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Mon, 17 Feb 1992 22:36:58 +0000 (22:36 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Mon, 17 Feb 1992 22:36:58 +0000 (22:36 +0000)
- Fix cons-pointer rule.

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

index e9e26b51af4ce7c73e98471e6a700299cd718ae3..b248572e187015a3bc137dfedf2a4cb982635747 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/i386/rules1.scm,v 1.12 1992/02/15 16:21:03 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/i386/rules1.scm,v 1.13 1992/02/17 22:36:58 jinx Exp $
 $MC68020-Header: /scheme/src/compiler/machines/bobcat/RCS/rules1.scm,v 4.36 1991/10/25 06:49:58 cph Exp $
 
 Copyright (c) 1992 Massachusetts Institute of Technology
@@ -101,10 +101,12 @@ MIT in each case. |#
               =>
               (lambda (alias)
                 (if (pseudo-register? target)
-                    (reuse-pseudo-register-alias! datum 'GENERAL
-                                                  two-arg
-                                                  (lambda ()
-                                                    (three-arg alias)))
+                    (reuse-pseudo-register-alias!
+                     datum 'GENERAL
+                     (lambda (alias)
+                       (two-arg (register-reference alias)))
+                     (lambda ()
+                       (three-arg alias)))
                     (three-arg alias))))
              (else
               (two-arg (standard-move-to-target! datum target)))))))
@@ -206,6 +208,13 @@ MIT in each case. |#
   (LAP (MOV W ,(target-indirect-reference! a n)
            (&U ,(non-pointer->literal value)))))
 
+(define-rule statement
+  (ASSIGN (OFFSET (REGISTER (? a)) (? n))
+         (CONS-POINTER (MACHINE-CONSTANT (? type))
+                       (MACHINE-CONSTANT (? datum))))
+  (LAP (MOV W ,(target-indirect-reference! a n)
+           (&U ,(make-non-pointer-literal type datum)))))
+
 (define-rule statement
   (ASSIGN (OFFSET (REGISTER (? address)) (? offset))
          (BYTE-OFFSET-ADDRESS (OFFSET (REGISTER (? address)) (? offset))
@@ -229,11 +238,16 @@ MIT in each case. |#
   (QUALIFIER (register-value-class=word? r))
   (LAP (PUSH ,(source-register-reference r))))
 
+(define-rule statement
+  (ASSIGN (PRE-INCREMENT (REGISTER 4) -1) (CONSTANT (? value)))
+  (QUALIFIER (non-pointer-object? value))
+  (LAP (PUSH W (&U ,(non-pointer->literal value)))))
+
 (define-rule statement
   (ASSIGN (PRE-INCREMENT (REGISTER 4) -1)
          (CONS-POINTER (MACHINE-CONSTANT (? type))
                        (MACHINE-CONSTANT (? datum))))
-  (LAP (PUSH W (& ,(make-non-pointer-literal type datum)))))
+  (LAP (PUSH W (&U ,(make-non-pointer-literal type datum)))))
 \f
 ;;;; CHAR->ASCII/BYTE-OFFSET