From 46817d69eed8d4cb5e874d0e2e7d85cf65889dba Mon Sep 17 00:00:00 2001 From: Mark Friedman Date: Thu, 19 May 1988 15:22:46 +0000 Subject: [PATCH] Added an explicit FIXNUM->OBJECT rtl type for eventual support for reusing the unboxed results of fixnum operations --- v7/src/compiler/rtlbase/rtlcon.scm | 25 +++++++++++++++++-------- v7/src/compiler/rtlbase/rtlexp.scm | 7 +++++-- v7/src/compiler/rtlbase/rtlty1.scm | 3 ++- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/v7/src/compiler/rtlbase/rtlcon.scm b/v7/src/compiler/rtlbase/rtlcon.scm index 454d75016..49a9d80bc 100644 --- a/v7/src/compiler/rtlbase/rtlcon.scm +++ b/v7/src/compiler/rtlbase/rtlcon.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlcon.scm,v 4.7 1988/05/09 19:52:24 mhwu Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlcon.scm,v 4.8 1988/05/19 15:22:46 markf Exp $ Copyright (c) 1987 Massachusetts Institute of Technology @@ -470,15 +470,24 @@ MIT in each case. |# (define-expression-method 'OBJECT->ADDRESS (object-selector rtl:make-object->address)) +(define-expression-method 'FIXNUM->OBJECT + (object-selector rtl:make-fixnum->object)) + (define-expression-method 'OBJECT->FIXNUM (lambda (receiver scfg-append! expression) - (expression-simplify* expression scfg-append! - (lambda (s-expression) - (assign-to-temporary - (rtl:make-object->fixnum s-expression) - scfg-append! - (lambda (temporary) - (receiver temporary))))))) + (cond ((or (rtl:fixnum-valued-expression? expression) + (rtl:constant? expression)) + (expression-simplify* expression scfg-append! + (lambda (s-constant) + (receiver s-constant)))) + (else + (expression-simplify* expression scfg-append! + (lambda (s-expression) + (assign-to-temporary + (rtl:make-object->fixnum s-expression) + scfg-append! + (lambda (temporary) + (receiver temporary))))))))) (define-expression-method 'CONS-POINTER (lambda (receiver scfg-append! type datum) diff --git a/v7/src/compiler/rtlbase/rtlexp.scm b/v7/src/compiler/rtlbase/rtlexp.scm index 090586ff7..3afbfd043 100644 --- a/v7/src/compiler/rtlbase/rtlexp.scm +++ b/v7/src/compiler/rtlbase/rtlexp.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlexp.scm,v 4.5 1988/05/09 19:51:39 mhwu Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlexp.scm,v 4.6 1988/05/19 15:20:13 markf Exp $ Copyright (c) 1987 Massachusetts Institute of Technology @@ -78,7 +78,10 @@ MIT in each case. |# (define (rtl:fixnum-valued-expression? expression) (if (rtl:register? expression) (register-contains-fixnum? (rtl:register-number expression)) - (rtl:object->fixnum? expression))) + (or (rtl:object->fixnum? expression) + (rtl:fixnum-1-arg? expression) + (rtl:fixnum-2-args? expression)))) + (define (rtl:optimizable? expression) ;;; In order to avoid a combinatorial explosion in the number of diff --git a/v7/src/compiler/rtlbase/rtlty1.scm b/v7/src/compiler/rtlbase/rtlty1.scm index f514f469f..d3e55f5b9 100644 --- a/v7/src/compiler/rtlbase/rtlty1.scm +++ b/v7/src/compiler/rtlbase/rtlty1.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlty1.scm,v 4.6 1988/05/09 19:50:30 mhwu Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlty1.scm,v 4.7 1988/05/19 15:22:29 markf Exp $ Copyright (c) 1987 Massachusetts Institute of Technology @@ -43,6 +43,7 @@ MIT in each case. |# (define-rtl-expression object->datum rtl: expression) (define-rtl-expression object->type rtl: register) (define-rtl-expression object->fixnum rtl: expression) +(define-rtl-expression fixnum->object rtl: expression) (define-rtl-expression offset rtl: register number) (define-rtl-expression pre-increment rtl: register number) (define-rtl-expression post-increment rtl: register number) -- 2.25.1