}
/* we know the 2-word header is ptr-free */
- if (last_set < SMALL_BITMAP_SIZE + OBJECT_HEADER_WORDS) {
+ if (last_set < SMALL_BITMAP_SIZE + OBJECT_HEADER_WORDS && stored_size < (1 << SMALL_BITMAP_SHIFT)) {
desc = DESC_TYPE_SMALL_BITMAP | stored_size | ((*bitmap >> OBJECT_HEADER_WORDS) << SMALL_BITMAP_SHIFT);
SGEN_LOG (6, "Smallbitmap descriptor %p, size: %zd, last set: %d", (void*)desc, stored_size, last_set);
return (void*) desc;
}
/* FIXME: try run-len first */
/* Note: we can't skip the object header here, because it's not present */
- if (last_set <= SMALL_BITMAP_SIZE) {
+ if (last_set < SMALL_BITMAP_SIZE) {
return (void*)(desc | VECTOR_SUBTYPE_BITMAP | (*elem_bitmap << 16));
}
}