Clean up all use of the *-space-free-pointers.
authorAlastair Bridgewater <nyef_sbcl@lisphacker.com>
Wed, 23 Dec 2009 13:35:11 +0000 (08:35 -0500)
committerAlastair Bridgewater <nyef@virtdev-1.lisphacker.com>
Wed, 19 Oct 2011 19:49:32 +0000 (15:49 -0400)
  * These are symbols whose value slots contain unboxed word-aligned
byte pointers.  Thus, they appear to lisp as fixnums.  They are not,
however, guaranteed to be word pointers.

  * Shift by n-fixnum-tag-bits instead of shifting by word-shift or
scaling by n-word-bytes in order to obtain byte pointers.

contrib/sb-introspect/introspect.lisp
src/code/alloc.lisp
src/code/debug-int.lisp
src/code/gc.lisp
src/code/room.lisp

index d85c015..3af8709 100644 (file)
@@ -842,12 +842,12 @@ Experimental: interface subject to change."
                (let* ((addr (sb-kernel:get-lisp-obj-address object))
                       (space
                        (cond ((< sb-vm:read-only-space-start addr
-                                 (* sb-vm:*read-only-space-free-pointer*
-                                    sb-vm:n-word-bytes))
+                                 (ash sb-vm:*read-only-space-free-pointer*
+                                      sb-vm:n-fixnum-tag-bits))
                               :read-only)
                              ((< sb-vm:static-space-start addr
-                                 (* sb-vm:*static-space-free-pointer*
-                                    sb-vm:n-word-bytes))
+                                 (ash sb-vm:*static-space-free-pointer*
+                                      sb-vm:n-fixnum-tag-bits))
                               :static)
                              ((< (sb-kernel:current-dynamic-space-start) addr
                                  (sb-sys:sap-int (sb-kernel:dynamic-space-free-pointer)))
index fa25d4e..c7b76f9 100644 (file)
   ;; WITHOUT-GCING implies WITHOUT-INTERRUPTS
   (or
    (without-gcing
-     (let* ((pointer *static-space-free-pointer*) ; in words
-            (free (* pointer n-word-bytes))
-            (vector (logior free other-pointer-lowtag)) ; in bytes, yay
+     (let* ((pointer (ash *static-space-free-pointer* n-fixnum-tag-bits))
+            (vector (logior pointer other-pointer-lowtag))
             ;; rounded to dual word boundary
             (nwords (logandc2 (+ lowtag-mask (+ words vector-data-offset 1))
                               lowtag-mask))
-            (new-pointer (+ *static-space-free-pointer* nwords))
-            (new-free (* new-pointer n-word-bytes)))
-       (when (> static-space-end new-free)
+            (new-pointer (+ pointer (ash nwords word-shift))))
+       (when (> static-space-end new-pointer)
          (store-word widetag
                      vector 0 other-pointer-lowtag)
-         (store-word (ash length word-shift)
+         (store-word (fixnumize length)
                      vector vector-length-slot other-pointer-lowtag)
-         (store-word 0 new-free)
-         (setf *static-space-free-pointer* new-pointer)
+         (store-word 0 new-pointer)
+         (setf *static-space-free-pointer*
+               (ash new-pointer (- n-fixnum-tag-bits)))
          (%make-lisp-obj vector))))
    (error 'simple-storage-condition
           :format-control "Not enough memory left in static space to ~
index 7569118..9df9a29 100644 (file)
@@ -1993,11 +1993,11 @@ register."
        #!-gencgc
        (and (logbitp 0 val)
             (or (< sb!vm:read-only-space-start val
-                   (* sb!vm:*read-only-space-free-pointer*
-                      sb!vm:n-word-bytes))
+                   (ash sb!vm:*read-only-space-free-pointer*
+                        sb!vm:n-fixnum-tag-bits))
                 (< sb!vm:static-space-start val
-                   (* sb!vm:*static-space-free-pointer*
-                      sb!vm:n-word-bytes))
+                   (ash sb!vm:*static-space-free-pointer*
+                        sb!vm:n-fixnum-tag-bits))
                 (< (current-dynamic-space-start) val
                    (sap-int (dynamic-space-free-pointer))))))
       (values (%make-lisp-obj val) t)
index 148547c..517cb0d 100644 (file)
           (current-dynamic-space-start))))
 
 (defun static-space-usage ()
-  (- (* sb!vm:*static-space-free-pointer* sb!vm:n-word-bytes)
+  (- (ash sb!vm:*static-space-free-pointer* sb!vm:n-fixnum-tag-bits)
      sb!vm:static-space-start))
 
 (defun read-only-space-usage ()
-  (- (* sb!vm::*read-only-space-free-pointer* sb!vm:n-word-bytes)
+  (- (ash sb!vm::*read-only-space-free-pointer* sb!vm:n-fixnum-tag-bits)
      sb!vm:read-only-space-start))
 
 (defun control-stack-usage ()
index 3877c29..a9ee633 100644 (file)
   (ecase space
     (:static
      (values (int-sap static-space-start)
-             (int-sap (* *static-space-free-pointer* n-word-bytes))))
+             (int-sap (ash *static-space-free-pointer* n-fixnum-tag-bits))))
     (:read-only
      (values (int-sap read-only-space-start)
-             (int-sap (* *read-only-space-free-pointer* n-word-bytes))))
+             (int-sap (ash *read-only-space-free-pointer* n-fixnum-tag-bits))))
     (:dynamic
      (values (int-sap (current-dynamic-space-start))
              (dynamic-space-free-pointer)))))