mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Remove card-marking barriers
Field barriers aren't slower and are more precise.
This commit is contained in:
parent
4a95a514b7
commit
6c444b33f1
6 changed files with 0 additions and 36 deletions
|
@ -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) {
|
static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t) {
|
||||||
return GC_WRITE_BARRIER_NONE;
|
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) {
|
static inline size_t gc_write_barrier_field_table_alignment(void) {
|
||||||
GC_CRASH();
|
GC_CRASH();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)) {
|
switch (gc_write_barrier_kind(obj_size)) {
|
||||||
case GC_WRITE_BARRIER_NONE:
|
case GC_WRITE_BARRIER_NONE:
|
||||||
return 0;
|
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: {
|
case GC_WRITE_BARRIER_FIELD: {
|
||||||
if (!gc_object_is_old_generation(mut, obj, obj_size))
|
if (!gc_object_is_old_generation(mut, obj, obj_size))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -39,14 +39,11 @@ static inline uint8_t gc_old_generation_check_alloc_table_young_tag(void) GC_ALW
|
||||||
|
|
||||||
enum gc_write_barrier_kind {
|
enum gc_write_barrier_kind {
|
||||||
GC_WRITE_BARRIER_NONE,
|
GC_WRITE_BARRIER_NONE,
|
||||||
GC_WRITE_BARRIER_CARD,
|
|
||||||
GC_WRITE_BARRIER_FIELD,
|
GC_WRITE_BARRIER_FIELD,
|
||||||
GC_WRITE_BARRIER_SLOW
|
GC_WRITE_BARRIER_SLOW
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t obj_size) GC_ALWAYS_INLINE;
|
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 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 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;
|
static inline size_t gc_write_barrier_field_fields_per_byte(void) GC_ALWAYS_INLINE;
|
||||||
|
|
|
@ -59,12 +59,6 @@ static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t obj_size)
|
||||||
}
|
}
|
||||||
return GC_WRITE_BARRIER_NONE;
|
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) {
|
static inline size_t gc_write_barrier_field_table_alignment(void) {
|
||||||
GC_ASSERT(GC_GENERATIONAL);
|
GC_ASSERT(GC_GENERATIONAL);
|
||||||
return gc_allocator_alloc_table_alignment();
|
return gc_allocator_alloc_table_alignment();
|
||||||
|
|
|
@ -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_FIELD;
|
||||||
return GC_WRITE_BARRIER_SLOW;
|
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) {
|
static inline size_t gc_write_barrier_field_table_alignment(void) {
|
||||||
GC_ASSERT(GC_GENERATIONAL);
|
GC_ASSERT(GC_GENERATIONAL);
|
||||||
return 64 * 1024 * 1024;
|
return 64 * 1024 * 1024;
|
||||||
|
|
|
@ -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) {
|
static inline enum gc_write_barrier_kind gc_write_barrier_kind(size_t) {
|
||||||
return GC_WRITE_BARRIER_NONE;
|
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) {
|
static inline size_t gc_write_barrier_field_table_alignment(void) {
|
||||||
GC_CRASH();
|
GC_CRASH();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue