(size (primitive-object-size obj)))
(cond
((not lowtag))
- (;; KLUDGE described in dan_b message "Another one for the
- ;; collection [bug 108]" (sbcl-devel 2004-01-22)
- ;;
- ;; In a freshly started SBCL 0.8.7.20ish, (TIME (ROOM T)) causes
- ;; debugger invoked on a SB-INT:BUG in thread 5911:
- ;; failed AVER: "(SAP= CURRENT END)"
- ;; [WHN: Similar things happened on one but not the other of my
- ;; machines when I just run ROOM a lot in a loop.]
- ;;
- ;; This appears to be due to my [DB] abuse of the primitive
- ;; object macros to define a thread object that shares a lowtag
- ;; with fixnums and has no widetag: it looks like the code that
- ;; generates *META-ROOM-INFO* infers from this that even fixnums
- ;; are thread-sized - probably undesirable.
- ;;
- ;; This [the fix; the EQL NAME 'THREAD clause here] is more in the
- ;; nature of a workaround than a really good fix. I'm not sure
- ;; what a really good fix is: I /think/ it's probably to remove
- ;; the :LOWTAG option in DEFINE-PRIMITIVE-OBJECT THREAD, then teach
- ;; genesis to generate the necessary OBJECT_SLOT_OFFSET macros
- ;; for assembly source in the runtime/genesis/*.h files.
- (eql name 'thread))
((not widetag)
(let ((info (make-room-info :name name
:kind :lowtag))
(simple-array-unsigned-byte-16-widetag . 1)
(simple-array-unsigned-byte-31-widetag . 2)
(simple-array-unsigned-byte-32-widetag . 2)
- (simple-array-unsigned-byte-60-widetag . 3)
+ (simple-array-unsigned-fixnum-widetag . #.sb!vm:word-shift)
(simple-array-unsigned-byte-63-widetag . 3)
(simple-array-unsigned-byte-64-widetag . 3)
(simple-array-signed-byte-8-widetag . 0)
(simple-array-signed-byte-16-widetag . 1)
- (simple-array-unsigned-byte-29-widetag . 2)
- (simple-array-signed-byte-30-widetag . 2)
+ (simple-array-fixnum-widetag . #.sb!vm:word-shift)
(simple-array-signed-byte-32-widetag . 2)
- (simple-array-signed-byte-61-widetag . 3)
(simple-array-signed-byte-64-widetag . 3)
(simple-array-single-float-widetag . 2)
(simple-array-double-float-widetag . 3)
(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)))))
;; will be a short. On platforms with larger ones, it'll
;; be an int.
(bytes-used (unsigned
- #.(if (typep sb!vm:gencgc-page-bytes
+ #.(if (typep sb!vm:gencgc-card-bytes
'(unsigned-byte 16))
16
32)))
(maybe-skip-page ()
#!+gencgc
(when (eq space :dynamic)
- (loop with page-mask = #.(1- sb!vm:gencgc-page-bytes)
+ (loop with page-mask = #.(1- sb!vm:gencgc-card-bytes)
for addr of-type sb!vm:word = (sap-int current)
while (>= addr skip-tests-until-addr)
do
(return-from maybe-skip-page))
;; Move CURRENT to start of next page.
(setf current (int-sap (+ (logandc2 addr page-mask)
- sb!vm:gencgc-page-bytes)))
+ sb!vm:gencgc-card-bytes)))
(maybe-finish-mapping))))))
(maybe-map (obj obj-tag n-obj-bytes &optional (ok t))
(let ((next (typecase n-obj-bytes
#.simple-array-unsigned-byte-32-widetag
#.simple-array-signed-byte-8-widetag
#.simple-array-signed-byte-16-widetag
- ;; #.simple-array-signed-byte-30-widetag
#.simple-array-signed-byte-32-widetag
#.simple-array-single-float-widetag
#.simple-array-double-float-widetag