wingo pushed a commit to branch wip-whippet in repository guile. commit 6c444b33f10b555ce90caace758a0dc499e37677 Author: Andy Wingo <wi...@igalia.com> AuthorDate: Fri Mar 7 10:33:10 2025 +0100
Remove card-marking barriers Field barriers aren't slower and are more precise. --- api/bdw-attrs.h | 6 ------ api/gc-api.h | 9 --------- api/gc-attrs.h | 3 --- api/mmc-attrs.h | 6 ------ api/pcc-attrs.h | 6 ------ api/semi-attrs.h | 6 ------ 6 files changed, 36 deletions(-) diff --git a/api/bdw-attrs.h b/api/bdw-attrs.h index a22445f14..7c03144b5 100644 --- a/api/bdw-attrs.h +++ b/api/bdw-attrs.h @@ -49,12 +49,6 @@ static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) { static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t) { return GC_WRITE_BARRIER_NONE; } -static inline size_t gc_write_barrier_card_table_alignment(void) { - GC_CRASH(); -} -static inline size_t gc_write_barrier_card_size(void) { - GC_CRASH(); -} static inline size_t gc_write_barrier_field_table_alignment(void) { GC_CRASH(); } diff --git a/api/gc-api.h b/api/gc-api.h index 23113060c..2b08d18b3 100644 --- a/api/gc-api.h +++ b/api/gc-api.h @@ -228,15 +228,6 @@ static inline int gc_write_barrier_fast(struct gc_mutator *mut, struct gc_ref ob switch (gc_write_barrier_kind(obj_size)) { case GC_WRITE_BARRIER_NONE: return 0; - case GC_WRITE_BARRIER_CARD: { - size_t card_table_alignment = gc_write_barrier_card_table_alignment(); - size_t card_size = gc_write_barrier_card_size(); - uintptr_t addr = gc_ref_value(obj); - uintptr_t base = addr & ~(card_table_alignment - 1); - uintptr_t card = (addr & (card_table_alignment - 1)) / card_size; - atomic_store_explicit((uint8_t*)(base + card), 1, memory_order_relaxed); - return 0; - } case GC_WRITE_BARRIER_FIELD: { if (!gc_object_is_old_generation(mut, obj, obj_size)) return 0; diff --git a/api/gc-attrs.h b/api/gc-attrs.h index 0ef3e082b..e7ea8c8f3 100644 --- a/api/gc-attrs.h +++ b/api/gc-attrs.h @@ -39,14 +39,11 @@ static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) GC_ALW enum gc_write_barrier_kind { GC_WRITE_BARRIER_NONE, - GC_WRITE_BARRIER_CARD, GC_WRITE_BARRIER_FIELD, GC_WRITE_BARRIER_SLOW }; static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t obj_size) GC_ALWAYS_INLINE; -static inline size_t gc_write_barrier_card_table_alignment(void) GC_ALWAYS_INLINE; -static inline size_t gc_write_barrier_card_size(void) GC_ALWAYS_INLINE; static inline size_t gc_write_barrier_field_table_alignment(void) GC_ALWAYS_INLINE; static inline ptrdiff_t gc_write_barrier_field_table_offset(void) GC_ALWAYS_INLINE; static inline size_t gc_write_barrier_field_fields_per_byte(void) GC_ALWAYS_INLINE; diff --git a/api/mmc-attrs.h b/api/mmc-attrs.h index 7066caf23..0c6162dc9 100644 --- a/api/mmc-attrs.h +++ b/api/mmc-attrs.h @@ -59,12 +59,6 @@ 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_CRASH(); -} -static inline size_t gc_write_barrier_card_size(void) { - GC_CRASH(); -} static inline size_t gc_write_barrier_field_table_alignment(void) { GC_ASSERT(GC_GENERATIONAL); return gc_allocator_alloc_table_alignment(); diff --git a/api/pcc-attrs.h b/api/pcc-attrs.h index 727d134c0..064e5181a 100644 --- a/api/pcc-attrs.h +++ b/api/pcc-attrs.h @@ -60,12 +60,6 @@ static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t obj_size) return GC_WRITE_BARRIER_FIELD; return GC_WRITE_BARRIER_SLOW; } -static inline size_t gc_write_barrier_card_table_alignment(void) { - GC_CRASH(); -} -static inline size_t gc_write_barrier_card_size(void) { - GC_CRASH(); -} static inline size_t gc_write_barrier_field_table_alignment(void) { GC_ASSERT(GC_GENERATIONAL); return 64 * 1024 * 1024; diff --git a/api/semi-attrs.h b/api/semi-attrs.h index c749fd3cf..763f45606 100644 --- a/api/semi-attrs.h +++ b/api/semi-attrs.h @@ -51,12 +51,6 @@ static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) { static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t) { return GC_WRITE_BARRIER_NONE; } -static inline size_t gc_write_barrier_card_table_alignment(void) { - GC_CRASH(); -} -static inline size_t gc_write_barrier_card_size(void) { - GC_CRASH(); -} static inline size_t gc_write_barrier_field_table_alignment(void) { GC_CRASH(); }