X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fgencgc-internal.h;h=94e3f09689b3c6b1bfc4184f784d88c0b020acfe;hb=666a3a77ee04225cf861ed8e1e7f378b8438d925;hp=ba56529662cd50c07855292c85791ce1ad86fcc7;hpb=4e5668af19abcf84587bf3f7a1c4294cd92c94a7;p=sbcl.git diff --git a/src/runtime/gencgc-internal.h b/src/runtime/gencgc-internal.h index ba56529..94e3f09 100644 --- a/src/runtime/gencgc-internal.h +++ b/src/runtime/gencgc-internal.h @@ -39,11 +39,10 @@ int gencgc_handle_wp_violation(void *); * output the C version in genesis. -- JES, 2006-12-30. */ struct page { - /* The name of this field is not well-chosen for its actual use. - * This is the offset from the start of the page to the start - * of the alloc_region which contains/contained it. It's negative or 0 + /* This is the offset from the start of the page to the start of + * the alloc_region which contains/contained it. */ - long first_object_offset; + unsigned long region_start_offset; /* the number of bytes of this page that are used. This may be less * than the actual bytes used for pages within the current @@ -93,7 +92,7 @@ struct page { /* values for the page.allocated field */ -extern unsigned page_table_pages; +extern page_index_t page_table_pages; extern struct page *page_table; @@ -111,14 +110,18 @@ void gc_set_region_empty(struct alloc_region *region); /* * predicates */ + static inline boolean space_matches_p(lispobj obj, generation_index_t space) { - page_index_t page_index=(void*)obj - (void *)DYNAMIC_SPACE_START; - return ((page_index >= 0) - && ((page_index = - ((unsigned long)page_index)/PAGE_BYTES) < page_table_pages) - && (page_table[page_index].gen == space)); + if (obj >= DYNAMIC_SPACE_START) { + page_index_t page_index=((pointer_sized_uint_t)obj + - DYNAMIC_SPACE_START) / PAGE_BYTES; + return ((page_index < page_table_pages) && + (page_table[page_index].gen == space)); + } else { + return 0; + } } static inline boolean