From bb265b21c00b8a51cb4d50d3c3c9864661c8dad8 Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" <edu/mit/csail/zurich/gjr> Date: Wed, 17 Nov 1993 05:22:39 +0000 Subject: [PATCH] Patch BYTE-OFFSET-ADDRESS rules to avoid warnings and errors from an implicit cast. --- v7/src/compiler/machines/C/rules1.scm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/v7/src/compiler/machines/C/rules1.scm b/v7/src/compiler/machines/C/rules1.scm index ed3a28466..9ca4cf5da 100644 --- a/v7/src/compiler/machines/C/rules1.scm +++ b/v7/src/compiler/machines/C/rules1.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Id: rules1.scm,v 1.5 1993/10/30 12:58:11 gjr Exp $ +$Id: rules1.scm,v 1.6 1993/11/17 05:22:39 gjr Exp $ Copyright (c) 1992-1993 Massachusetts Institute of Technology @@ -150,14 +150,26 @@ MIT in each case. |# (lambda (base index target) (LAP ,target " = &" ,base "[" ,index "];\n\t")))) +;; This rule is not written in the obvious way (commented out) because +;; it is used by the code generator to bump closures. Sometimes the +;; target is the value register (type scheme object) and the obvious +;; code would imply an implicit cast from pointer to integer, which +;; some compilers (e.g. -std1 on alpha) do not like. + (define-rule statement (ASSIGN (REGISTER (? target)) (BYTE-OFFSET-ADDRESS (REGISTER (? source)) (MACHINE-CONSTANT (? offset)))) + #| (standard-unary-conversion source 'CHAR* target 'CHAR* (lambda (source target) - (LAP ,target " = &" ,source "[" ,offset "];\n\t")))) + (LAP ,target " = &" ,source "[" ,offset "];\n\t"))) + |# + (standard-unary-conversion + source 'LONG target 'ULONG + (lambda (source target) + (LAP ,target " = ((unsigned long) (" ,base " + " ,offset "));\n\t")))) (define-rule statement (ASSIGN (REGISTER (? target)) -- 2.25.1