From: Mark Friedman <edu/mit/csail/zurich/markf>
Date: Thu, 19 May 1988 15:22:46 +0000 (+0000)
Subject: Added an explicit FIXNUM->OBJECT rtl type for eventual
X-Git-Tag: 20090517-FFI~12753
X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=46817d69eed8d4cb5e874d0e2e7d85cf65889dba;p=mit-scheme.git

Added an explicit FIXNUM->OBJECT rtl type for eventual
support for reusing the unboxed results of fixnum operations
---

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)