#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/lapgn2.scm,v 1.14 1990/01/18 22:42:02 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/lapgn2.scm,v 1.15 1990/01/20 07:26:22 cph Exp $
Copyright (c) 1987, 1988, 1989, 1990 Massachusetts Institute of Technology
(define (load-machine-register! source-register machine-register)
;; Copy the contents of `source-register' to `machine-register'.
(if (machine-register? source-register)
- (if (eqv? source-register machine-register)
- (LAP)
- (register->register-transfer source-register machine-register))
+ (LAP ,@(clear-registers! machine-register)
+ (if (eqv? source-register machine-register)
+ (LAP)
+ (register->register-transfer source-register machine-register)))
(if (is-alias-for-register? machine-register source-register)
- (LAP)
- (reference->register-transfer
- (standard-register-reference source-register false true)
- machine-register))))
+ (clear-registers! machine-register)
+ (let ((source-reference
+ (standard-register-reference source-register false true)))
+ (LAP ,@(clear-registers! machine-register)
+ ,@(reference->register-transfer source-reference
+ machine-register))))))
\f
(define (move-to-alias-register! source type target)
;; Performs an assignment from register `source' to register
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules4.scm,v 4.10 1990/01/18 22:44:15 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules4.scm,v 4.11 1990/01/20 07:26:13 cph Exp $
Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
(define (interpreter-call-argument->machine-register! expression register)
(let ((target (register-reference register)))
- (let ((result
- (case (car expression)
- ((REGISTER)
- (load-machine-register! (rtl:register-number expression)
- register))
- ((CONSTANT)
- (LAP ,(load-constant (rtl:constant-value expression) target)))
- ((CONS-POINTER)
- (LAP ,(load-non-pointer (rtl:machine-constant-value
- (rtl:cons-pointer-type expression))
- (rtl:machine-constant-value
- (rtl:cons-pointer-datum expression))
- target)))
- ((OFFSET)
- (LAP (MOV L ,(offset->indirect-reference! expression) ,target)))
- (else
- (error "Unknown expression type" (car expression))))))
- (delete-register! register)
- result)))
+ (case (car expression)
+ ((REGISTER)
+ (load-machine-register! (rtl:register-number expression) register))
+ ((CONSTANT)
+ (LAP ,@(clear-registers! register)
+ ,(load-constant (rtl:constant-value expression) target)))
+ ((CONS-POINTER)
+ (LAP ,@(clear-registers! register)
+ ,(load-non-pointer (rtl:machine-constant-value
+ (rtl:cons-pointer-type expression))
+ (rtl:machine-constant-value
+ (rtl:cons-pointer-datum expression))
+ target)))
+ ((OFFSET)
+ (let ((source-reference (offset->indirect-reference! expression)))
+ (LAP ,@(clear-registers! register)
+ (MOV L ,source-reference ,target))))
+ (else
+ (error "Unknown expression type" (car expression))))))
(define-rule statement
(INTERPRETER-CALL:ACCESS (? environment) (? name))