From a19576f5c67c58249758208d9d90f375066b662a Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Fri, 21 Aug 1987 14:47:41 +0000 Subject: [PATCH] Fix displacements. --- v7/src/compiler/machines/vax/insmac.scm | 34 +++++++++++++++++++------ 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/v7/src/compiler/machines/vax/insmac.scm b/v7/src/compiler/machines/vax/insmac.scm index 4abc3c0cf..821122cdc 100644 --- a/v7/src/compiler/machines/vax/insmac.scm +++ b/v7/src/compiler/machines/vax/insmac.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/vax/insmac.scm,v 1.5 1987/08/20 20:42:12 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/vax/insmac.scm,v 1.6 1987/08/21 14:47:41 jinx Exp $ Copyright (c) 1987 Massachusetts Institute of Technology @@ -130,14 +130,32 @@ MIT in each case. |# (else (error "expand-fields: Unknown field kind" (caar fields)))))))) -;; Patterned after integer-syntaxer in back-end/syntax.scm - (define (displacement-syntaxer expression size) - (let ((coercion (make-coercion-name 'DISPLACEMENT size))) - (if (and (pair? expression) - (memq (car expression) '(@PCO @PCR))) - `',((lexical-reference coercion-environment coercion) expression) - `(SYNTAX-EVALUATION ,expression ,coercion)))) + (cond ((not (pair? expression)) + `(SYNTAX-DISPLACEMENT ,expression + ,(make-coercion-name 'SIGNED size))) + ((eq? '@PCO (car expression)) + (integer-syntaxer (cadr expression) 'SIGNED size)) + ((eq? '@PCR (car expression)) + (nteger-syntaxer `(- ,(cadr expression) + (+ *PC* ,(/ size 8))) 'SIGNED size)) + (else + `(SYNTAX-DISPLACEMENT ,expression + ,(make-coercion-name 'SIGNED size))))) + +(define (syntax-displacement expression coercion) + (cond ((not (pair? expression)) + (error "syntax-displacement: bad displacement specifier" + expression)) + ((eq? (car expression) '@PCO) + (syntax-evaluation (cadr expression) coercion)) + ((eq? (car expression) '@PCR) + (syntax-evaluation `(- ,(cadr expression) + (+ *PC* ,(/ (coercion-size coercion) 8))) + coercion)) + (else + (error "syntax-displacement: bad displacement specifier" + expression)))) (define (collect-byte components tail receiver) (define (inner components receiver) -- 2.25.1