diff options
| author | Matt Valentine-House <matt@eightbitraptor.com> | 2026-02-03 14:39:48 -0500 |
|---|---|---|
| committer | Matt Valentine-House <matt@eightbitraptor.com> | 2026-02-13 14:29:14 +0000 |
| commit | 1b65282961de25380d4c6e34d249136d0ea1fa5c (patch) | |
| tree | 6c47a13c69dc70dda1c154f9e868b1342d535e5c | |
| parent | 5c71c8c55bd71cff64e670097e4800d9e3d67ae4 (diff) | |
hardcode and look up magic numbers
instead of computing them on page add
| -rw-r--r-- | gc/default/default.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/gc/default/default.c b/gc/default/default.c index c766521108..8fa030cadc 100644 --- a/gc/default/default.c +++ b/gc/default/default.c @@ -841,11 +841,13 @@ heap_page_in_global_empty_pages_pool(rb_objspace_t *objspace, struct heap_page * #define GET_PAGE_HEADER(x) (&GET_PAGE_BODY(x)->header) #define GET_HEAP_PAGE(x) (GET_PAGE_HEADER(x)->page) -static inline uint32_t -compute_slot_div_magic(unsigned short slot_size) -{ - return (uint32_t)(UINT32_MAX / slot_size) + 1; -} +static const uint32_t slot_div_magics[HEAP_COUNT] = { + 0x06666667U, + 0x03333334U, + 0x0199999aU, + 0x00cccccdU, + 0x00666667U, +}; static inline size_t slot_index_for_offset(size_t offset, uint32_t div_magic) @@ -2006,7 +2008,7 @@ heap_add_page(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *page) page->start = start; page->total_slots = slot_count; page->slot_size = heap->slot_size; - page->slot_div_magic = compute_slot_div_magic(heap->slot_size); + page->slot_div_magic = slot_div_magics[heap - heaps]; page->heap = heap; asan_unlock_freelist(page); |
