Skip to content

Commit 795e290

Browse files
committed
Avoid extra set of age bit flags
1 parent e057ff3 commit 795e290

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

gc/default/default.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -839,14 +839,20 @@ RVALUE_AGE_GET(VALUE obj)
839839
}
840840

841841
static void
842-
RVALUE_AGE_SET(VALUE obj, int age)
842+
RVALUE_AGE_SET_BITMAP(VALUE obj, int age)
843843
{
844844
RUBY_ASSERT(age <= RVALUE_OLD_AGE);
845845
bits_t *age_bits = GET_HEAP_PAGE(obj)->age_bits;
846846
// clear the bits
847847
age_bits[RVALUE_AGE_BITMAP_INDEX(obj)] &= ~(RVALUE_AGE_BIT_MASK << (RVALUE_AGE_BITMAP_OFFSET(obj)));
848848
// shift the correct value in
849849
age_bits[RVALUE_AGE_BITMAP_INDEX(obj)] |= ((bits_t)age << RVALUE_AGE_BITMAP_OFFSET(obj));
850+
}
851+
852+
static void
853+
RVALUE_AGE_SET(VALUE obj, int age)
854+
{
855+
RVALUE_AGE_SET_BITMAP(obj, age);
850856
if (age == RVALUE_OLD_AGE) {
851857
RB_FL_SET_RAW(obj, RUBY_FL_PROMOTED);
852858
}
@@ -1581,7 +1587,7 @@ heap_page_add_freeobj(rb_objspace_t *objspace, struct heap_page *page, VALUE obj
15811587
page->freelist = slot;
15821588
asan_lock_freelist(page);
15831589

1584-
RVALUE_AGE_RESET(obj);
1590+
RVALUE_AGE_SET_BITMAP(obj, 0);
15851591

15861592
if (RGENGC_CHECK_MODE &&
15871593
/* 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
69516957
}
69526958

69536959
memset((void *)src, 0, src_slot_size);
6954-
RVALUE_AGE_RESET(src);
6960+
RVALUE_AGE_SET_BITMAP(src, 0);
69556961

69566962
/* Set bits for object in new location */
69576963
if (remembered) {

0 commit comments

Comments
 (0)