X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fgc-internal.h;h=c9d1911246bbe365960783b906076228e5415728;hb=8a632c14b592472873cfb214239c9387bc1a1ced;hp=6645871088929927054042773fa671b97b31990c;hpb=3a0f3612dc2bbf3e4e8e7395bcbbf8cd1791b963;p=sbcl.git diff --git a/src/runtime/gc-internal.h b/src/runtime/gc-internal.h index 6645871..c9d1911 100644 --- a/src/runtime/gc-internal.h +++ b/src/runtime/gc-internal.h @@ -16,6 +16,8 @@ #ifndef _GC_INTERNAL_H_ #define _GC_INTERNAL_H_ +#include + /* disabling gc assertions made no discernable difference to GC speed, * last I tried it - dan 2003.12.21 */ #if 1 @@ -59,20 +61,10 @@ NWORDS(unsigned long x, unsigned long n_bits) /* FIXME: Shouldn't this be defined in sbcl.h? */ -/* FIXME (1) this could probably be defined using something like - * sizeof(lispobj)*floor(sizeof(struct simple_fun)/sizeof(lispobj)) - * - FUN_POINTER_LOWTAG - * as I'm reasonably sure that simple_fun->code must always be the - * last slot in the object - - * FIXME (2) it also appears in purify.c, and it has a different value - * for SPARC users in that bit - */ - #if defined(LISP_FEATURE_SPARC) #define FUN_RAW_ADDR_OFFSET 0 #else -#define FUN_RAW_ADDR_OFFSET (6*sizeof(lispobj) - FUN_POINTER_LOWTAG) +#define FUN_RAW_ADDR_OFFSET (offsetof(struct simple_fun, code) - FUN_POINTER_LOWTAG) #endif /* values for the *_alloc_* parameters */ @@ -92,9 +84,12 @@ extern lispobj (*transother[256])(lispobj object); extern long (*sizetab[256])(lispobj *where); extern struct weak_pointer *weak_pointers; /* in gc-common.c */ +extern struct hash_table *weak_hash_tables; /* in gc-common.c */ extern void scavenge(lispobj *start, long n_words); extern void scavenge_interrupt_contexts(void); +extern void scav_weak_hash_tables(void); +extern void scan_weak_hash_tables(void); extern void scan_weak_pointers(void); lispobj copy_large_unboxed_object(lispobj object, long nwords); @@ -116,4 +111,10 @@ lispobj *gc_search_space(lispobj *start, size_t words, lispobj *pointer); #include "cheneygc-internal.h" #endif +#if N_WORD_BITS == 32 +# define SIMPLE_ARRAY_WORD_WIDETAG SIMPLE_ARRAY_UNSIGNED_BYTE_32_WIDETAG +#elif N_WORD_BITS == 64 +# define SIMPLE_ARRAY_WORD_WIDETAG SIMPLE_ARRAY_UNSIGNED_BYTE_64_WIDETAG +#endif + #endif /* _GC_INTERNAL_H_ */