diff --git a/api/bdw-attrs.h b/api/bdw-attrs.h index 19d5250f2..a22445f14 100644 --- a/api/bdw-attrs.h +++ b/api/bdw-attrs.h @@ -39,7 +39,10 @@ static inline uint8_t gc_allocator_alloc_table_end_pattern(void) { static inline enum gc_old_generation_check_kind gc_old_generation_check_kind(size_t) { return GC_OLD_GENERATION_CHECK_NONE; } -static inline uint8_t gc_old_generation_check_alloc_table_bit_pattern(void) { +static inline uint8_t gc_old_generation_check_alloc_table_tag_mask(void) { + GC_CRASH(); +} +static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) { GC_CRASH(); } diff --git a/api/gc-api.h b/api/gc-api.h index 58cd5c02d..23113060c 100644 --- a/api/gc-api.h +++ b/api/gc-api.h @@ -193,7 +193,9 @@ static inline int gc_object_is_old_generation(struct gc_mutator *mut, uintptr_t granule = (addr & (alignment - 1)) / granule_size; uint8_t *byte_loc = (uint8_t*)(base + granule); uint8_t byte = atomic_load_explicit(byte_loc, memory_order_relaxed); - return byte & gc_old_generation_check_alloc_table_bit_pattern(); + uint8_t mask = gc_old_generation_check_alloc_table_tag_mask(); + uint8_t young = gc_old_generation_check_alloc_table_young_tag(); + return (byte & mask) != young; } case GC_OLD_GENERATION_CHECK_SMALL_OBJECT_NURSERY: { struct gc_heap *heap = gc_mutator_heap(mut); diff --git a/api/gc-attrs.h b/api/gc-attrs.h index bb563c0e2..0ef3e082b 100644 --- a/api/gc-attrs.h +++ b/api/gc-attrs.h @@ -34,7 +34,8 @@ enum gc_old_generation_check_kind { static inline enum gc_old_generation_check_kind gc_old_generation_check_kind(size_t obj_size) GC_ALWAYS_INLINE; -static inline uint8_t gc_old_generation_check_alloc_table_bit_pattern(void) GC_ALWAYS_INLINE; +static inline uint8_t gc_old_generation_check_alloc_table_tag_mask(void) GC_ALWAYS_INLINE; +static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) GC_ALWAYS_INLINE; enum gc_write_barrier_kind { GC_WRITE_BARRIER_NONE, diff --git a/api/mmc-attrs.h b/api/mmc-attrs.h index fe9edb0a4..7066caf23 100644 --- a/api/mmc-attrs.h +++ b/api/mmc-attrs.h @@ -44,9 +44,11 @@ static inline enum gc_old_generation_check_kind gc_old_generation_check_kind(siz } return GC_OLD_GENERATION_CHECK_NONE; } -static inline uint8_t gc_old_generation_check_alloc_table_bit_pattern(void) { - // The three mark bits. - return 2 + 4 + 8; +static inline uint8_t gc_old_generation_check_alloc_table_tag_mask(void) { + return 7; +} +static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) { + return 1; } static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t obj_size) { @@ -58,12 +60,10 @@ static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t obj_size) return GC_WRITE_BARRIER_NONE; } static inline size_t gc_write_barrier_card_table_alignment(void) { - GC_ASSERT(GC_GENERATIONAL); - return 4 * 1024 * 1024; + GC_CRASH(); } static inline size_t gc_write_barrier_card_size(void) { - GC_ASSERT(GC_GENERATIONAL); - return 256; + GC_CRASH(); } static inline size_t gc_write_barrier_field_table_alignment(void) { GC_ASSERT(GC_GENERATIONAL); diff --git a/api/pcc-attrs.h b/api/pcc-attrs.h index 913208cdd..727d134c0 100644 --- a/api/pcc-attrs.h +++ b/api/pcc-attrs.h @@ -46,7 +46,10 @@ static inline enum gc_old_generation_check_kind gc_old_generation_check_kind(siz return GC_OLD_GENERATION_CHECK_SMALL_OBJECT_NURSERY; return GC_OLD_GENERATION_CHECK_SLOW; } -static inline uint8_t gc_old_generation_check_alloc_table_bit_pattern(void) { +static inline uint8_t gc_old_generation_check_alloc_table_tag_mask(void) { + GC_CRASH(); +} +static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) { GC_CRASH(); } diff --git a/api/semi-attrs.h b/api/semi-attrs.h index b8baab693..c749fd3cf 100644 --- a/api/semi-attrs.h +++ b/api/semi-attrs.h @@ -41,7 +41,10 @@ static inline uint8_t gc_allocator_alloc_table_end_pattern(void) { static inline enum gc_old_generation_check_kind gc_old_generation_check_kind(size_t) { return GC_OLD_GENERATION_CHECK_NONE; } -static inline uint8_t gc_old_generation_check_alloc_table_bit_pattern(void) { +static inline uint8_t gc_old_generation_check_alloc_table_tag_mask(void) { + GC_CRASH(); +} +static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) { GC_CRASH(); }