Upgrade spectrum back end to reflect changes in compiler since
authorChris Hanson <org/chris-hanson/cph>
Thu, 5 Feb 1987 21:49:47 +0000 (21:49 +0000)
committerChris Hanson <org/chris-hanson/cph>
Thu, 5 Feb 1987 21:49:47 +0000 (21:49 +0000)
original implementation.  This found some machine-dependent sections
of the "machine-independent" code.

v7/src/compiler/back/lapgn1.scm

index c46972255fb308c97516f7f0a6d531400f284b3f..e82d98bef1caa9f4b6962ae9b0ba3ae9b838bc6c 100644 (file)
@@ -37,7 +37,7 @@
 
 ;;;; LAP Code Generation
 
-;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/lapgn1.scm,v 1.24 1987/01/01 19:41:05 cph Exp $
+;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/lapgn1.scm,v 1.25 1987/02/05 21:49:47 cph Exp $
 
 (declare (usual-integrations))
 (using-syntax (access compiler-syntax-table compiler-package)
                               (delete-other-locations map alias)
                               instructions))))
 
+(define (allocate-assignment-alias! target type)
+  (let ((target (allocate-alias-register! target type)))
+    (delete-dead-registers!)
+    target))
+
 (define (allocate-temporary-register! type)
   (bind-allocator-values (allocate-temporary-register *register-map* type
                                                      *needed-registers*)
   (set! *register-map* map)
   (prefix-instructions! instructions)
   alias)
-
+\f
 (define (move-to-alias-register! source type target)
   (reuse-pseudo-register-alias! source type
     (lambda (reusable-alias)
       (allocate-temporary-register! type))))
 
 (define (reuse-pseudo-register-alias! source type if-reusable if-not)
+  ;; IF-NOT is assumed to return a machine register.
   (let ((reusable-alias
         (and (dead-register? source)
              (register-alias source type))))
        (begin (delete-dead-registers!)
               (if-reusable reusable-alias)
               (register-reference reusable-alias))
-       (let ((source (coerce->any source)))
+       (let ((alias (if (machine-register? source)
+                        source
+                        (register-alias source false))))
          (delete-dead-registers!)
-         (let ((target (register-reference (if-not))))
-           (prefix-instructions! `((MOVE L ,source ,target)))
-           target)))))
+         (let ((target (if-not)))
+           (prefix-instructions!
+            (if alias
+                (register->register-transfer alias target)
+                (home->register-transfer source target)))
+           (register-reference target))))))
 \f
 (define (add-pseudo-register-alias! register alias)
   (set! *register-map*