mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-15 08:10:17 +02:00
Fix inline old-generation check for nofl space mark byte changes
This commit is contained in:
parent
f1b660484e
commit
4a95a514b7
6 changed files with 24 additions and 12 deletions
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue