From cde9b4e76cab5975d3cfc53c89562e59c5c8e74a Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Thu, 1 Jul 1993 07:48:28 +0000 Subject: [PATCH] Fix a register allocator bug in float-load/offset, and add yet another floating-point pattern. --- v7/src/compiler/machines/spectrum/rulflo.scm | 29 +++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/v7/src/compiler/machines/spectrum/rulflo.scm b/v7/src/compiler/machines/spectrum/rulflo.scm index ceb570745..9093e63f7 100644 --- a/v7/src/compiler/machines/spectrum/rulflo.scm +++ b/v7/src/compiler/machines/spectrum/rulflo.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Id: rulflo.scm,v 4.37 1993/07/01 03:24:33 gjr Exp $ +$Id: rulflo.scm,v 4.38 1993/07/01 07:48:28 gjr Exp $ Copyright (c) 1989-1993 Massachusetts Institute of Technology @@ -116,9 +116,10 @@ MIT in each case. |# (LAP (FSTDX (S) ,source (INDEX ,index 0 ,base))))) (define (float-load/offset target base offset) - (%float-load/offset (flonum-target! target) - (standard-source! base) - offset)) + (let ((base (standard-source! base))) + (%float-load/offset (flonum-target! target) + base + offset))) (define (float-store/offset base offset source) (%float-store/offset (standard-source! base) @@ -141,6 +142,26 @@ MIT in each case. |# ;;;; Optimized floating-point references +(define-rule statement + (ASSIGN (REGISTER (? target)) + (FLOAT-OFFSET (OFFSET-ADDRESS (OBJECT->ADDRESS (REGISTER (? base))) + (MACHINE-CONSTANT (? w-offset))) + (MACHINE-CONSTANT (? f-offset)))) + (let ((b-offset (+ (* 4 w-offset) (* 8 f-offset)))) + (reuse-pseudo-register-alias! + base 'GENERAL + (lambda (base) + (let ((target (flonum-target! target))) + (LAP ,@(object->address base) + ,@(%float-load/offset target base b-offset)))) + (lambda () + (let* ((base (standard-source! base)) + (base* (standard-temporary!)) + (target (flonum-target! target))) + (LAP (LDO () (OFFSET ,b-offset 0 ,base) ,base*) + ,@(object->address base*) + (FLDDS () (OFFSET 0 0 ,base*) ,target))))))) + (define-rule statement (ASSIGN (REGISTER (? target)) (FLOAT-OFFSET (OFFSET-ADDRESS (OBJECT->ADDRESS (REGISTER (? base))) -- 2.25.1