summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hawthorn <john@hawthorn.email>2025-07-31 09:10:32 -0700
committerJohn Hawthorn <john@hawthorn.email>2025-11-26 10:40:56 -0800
commit795e290ead63bdcc79e35d569759e07d594267ab (patch)
tree4b0e6bdc7faed37ee5447569136e629e215724bb
parente057ff333a3b2964e52c8a12485374efa2464762 (diff)
Avoid extra set of age bit flags
-rw-r--r--gc/default/default.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gc/default/default.c b/gc/default/default.c
index 9a2efab562..6439e31060 100644
--- a/gc/default/default.c
+++ b/gc/default/default.c
@@ -839,7 +839,7 @@ RVALUE_AGE_GET(VALUE obj)
}
static void
-RVALUE_AGE_SET(VALUE obj, int age)
+RVALUE_AGE_SET_BITMAP(VALUE obj, int age)
{
RUBY_ASSERT(age <= RVALUE_OLD_AGE);
bits_t *age_bits = GET_HEAP_PAGE(obj)->age_bits;
@@ -847,6 +847,12 @@ RVALUE_AGE_SET(VALUE obj, int age)
age_bits[RVALUE_AGE_BITMAP_INDEX(obj)] &= ~(RVALUE_AGE_BIT_MASK << (RVALUE_AGE_BITMAP_OFFSET(obj)));
// shift the correct value in
age_bits[RVALUE_AGE_BITMAP_INDEX(obj)] |= ((bits_t)age << RVALUE_AGE_BITMAP_OFFSET(obj));
+}
+
+static void
+RVALUE_AGE_SET(VALUE obj, int age)
+{
+ RVALUE_AGE_SET_BITMAP(obj, age);
if (age == RVALUE_OLD_AGE) {
RB_FL_SET_RAW(obj, RUBY_FL_PROMOTED);
}
@@ -1581,7 +1587,7 @@ heap_page_add_freeobj(rb_objspace_t *objspace, struct heap_page *page, VALUE obj
page->freelist = slot;
asan_lock_freelist(page);
- RVALUE_AGE_RESET(obj);
+ RVALUE_AGE_SET_BITMAP(obj, 0);
if (RGENGC_CHECK_MODE &&
/* obj should belong to page */
@@ -6951,7 +6957,7 @@ gc_move(rb_objspace_t *objspace, VALUE src, VALUE dest, size_t src_slot_size, si
}
memset((void *)src, 0, src_slot_size);
- RVALUE_AGE_RESET(src);
+ RVALUE_AGE_SET_BITMAP(src, 0);
/* Set bits for object in new location */
if (remembered) {