From 0273dc0c34228315a7b4431c458cc58004aef930 Mon Sep 17 00:00:00 2001
From: "Guillermo J. Rozas" <edu/mit/csail/zurich/gjr>
Date: Thu, 19 May 1988 01:47:37 +0000
Subject: [PATCH] Fix bug in INTERPRETER-REGISTER.  It now checks whether the
 offset is a known offset directly, and if not, it tries the aligned version
 instead.  The bug was noticed because interpreter entries are 6 bytes long,
 so only half of them are aligned, and the others were not found.

---
 v7/src/compiler/machines/bobcat/dassm2.scm | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/v7/src/compiler/machines/bobcat/dassm2.scm b/v7/src/compiler/machines/bobcat/dassm2.scm
index fcc0f56e3..aa5340b6e 100644
--- a/v7/src/compiler/machines/bobcat/dassm2.scm
+++ b/v7/src/compiler/machines/bobcat/dassm2.scm
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/dassm2.scm,v 4.5 1988/05/14 16:19:24 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/dassm2.scm,v 4.6 1988/05/19 01:47:37 jinx Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -229,14 +229,15 @@ MIT in each case. |#
       (else false))))
 
 (define (interpreter-register register offset)
-  (with-aligned-offset offset
-    (lambda (word-offset residue)
-      (and (= register interpreter-register-pointer)
-	   (let ((entry (assq word-offset interpreter-register-assignments)))
-	     (and entry
-		  (if (= residue 0)
-		      (cdr entry)
-		      `(,@(cdr entry) (,residue)))))))))
+  (and (= register interpreter-register-pointer)
+       (let ((entry (assq offset interpreter-register-assignments)))
+	 (if entry
+	     (cdr entry)
+	     (let ((entry (assq word-offset interpreter-register-assignments)))
+	       (and entry
+		    (if (= residue 0)
+			(cdr entry)
+			`(,@(cdr entry) (,residue)))))))))
 
 (define (with-aligned-offset offset receiver)
   (let ((q/r (integer-divide offset 4)))
-- 
2.25.1