Fix bug in disassembler/write-linkage-section by which only
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Thu, 12 Jul 1990 16:42:39 +0000 (16:42 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Thu, 12 Jul 1990 16:42:39 +0000 (16:42 +0000)
even-numbered variable caches were being printed.

v7/src/compiler/machines/bobcat/dassm1.scm

index 73ce7452ec987b8cd74ad40ea5b67db2c50cdb06..65b08031ff5b2edc361fae7ad999d07dcf39319c 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/dassm1.scm,v 4.14 1989/10/26 07:37:28 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/dassm1.scm,v 4.15 1990/07/12 16:42:39 jinx Rel $
 
 Copyright (c) 1988, 1989 Massachusetts Institute of Technology
 
@@ -198,22 +198,24 @@ MIT in each case. |#
        (else false)))
 \f
 (define (disassembler/write-linkage-section block symbol-table index)
-  (define (write-caches index size how-many writer)
-    (let loop ((index index) (how-many how-many))
-      (if (zero? how-many)
-         'DONE
-         (begin
-           (disassembler/write-instruction
-            symbol-table
-            (compiled-code-block/index->offset index)
-            (lambda ()
-              (writer block index)))
-           (loop (+ size index) (-1+ how-many))))))
-
   (let* ((field (object-datum (system-vector-ref block index)))
         (descriptor (integer-divide field #x10000)))
     (let ((kind (integer-divide-quotient descriptor))
          (length (integer-divide-remainder descriptor)))
+
+      (define (write-caches size writer)
+       (let loop ((index (1+ index))
+                  (how-many (quotient length size)))
+         (if (zero? how-many)
+             'DONE
+             (begin
+               (disassembler/write-instruction
+                symbol-table
+                (compiled-code-block/index->offset index)
+                (lambda ()
+                  (writer block index)))
+               (loop (+ size index) (-1+ how-many))))))
+
       (disassembler/write-instruction
        symbol-table
        (compiled-code-block/index->offset index)
@@ -221,22 +223,24 @@ MIT in each case. |#
         (write-string "#[LINKAGE-SECTION ")
         (write field)
         (write-string "]")))
-      (write-caches
-       (1+ index)
-       compiled-code-block/objects-per-procedure-cache
-       (quotient length compiled-code-block/objects-per-procedure-cache)
        (case kind
         ((0)
-         disassembler/write-procedure-cache)
+         (write-caches
+          compiled-code-block/objects-per-procedure-cache
+          disassembler/write-procedure-cache))
         ((1)
+         (write-caches
+          compiled-code-block/objects-per-variable-cache
          (lambda (block index)
-           (disassembler/write-variable-cache "Reference" block index)))
+           (disassembler/write-variable-cache "Reference" block index))))
         ((2)
+         (write-caches
+          compiled-code-block/objects-per-variable-cache
          (lambda (block index)
-           (disassembler/write-variable-cache "Assignment" block index)))
+           (disassembler/write-variable-cache "Assignment" block index))))
         (else
          (error "disassembler/write-linkage-section: Unknown section kind"
-                kind))))
+                kind)))
       (1+ (+ index length)))))
 \f
 (define-integrable (variable-cache-name cache)