From f8add652ebde4a151d1f54dfc30e25cd8ed3f3d1 Mon Sep 17 00:00:00 2001 From: Kevin Tew Date: Wed, 5 Nov 2008 21:09:00 +0000 Subject: [PATCH] Improve fixup_table caching svn: r12294 --- src/mzscheme/gc2/newgc.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mzscheme/gc2/newgc.c b/src/mzscheme/gc2/newgc.c index 4b2668631b..233b62f980 100644 --- a/src/mzscheme/gc2/newgc.c +++ b/src/mzscheme/gc2/newgc.c @@ -2100,6 +2100,7 @@ static void repair_heap(void) struct mpage *page; int i; NewGC *gc = GC; + Fixup_Proc *fixup_table = gc->fixup_table; for(i = 0; i < PAGE_TYPES; i++) { for(page = GC->gen1_pages[i]; page; page = page->next) { @@ -2115,7 +2116,7 @@ static void repair_heap(void) page->big_page = 1; /* remove the mark */ switch(page->page_type) { case PAGE_TAGGED: - gc->fixup_table[*(unsigned short*)start](start); + fixup_table[*(unsigned short*)start](start); break; case PAGE_ATOMIC: break; case PAGE_ARRAY: @@ -2127,7 +2128,7 @@ static void repair_heap(void) case PAGE_TARRAY: { unsigned short tag = *(unsigned short *)start; end -= INSET_WORDS; - while(start < end) start += gc->fixup_table[tag](start); + while(start < end) start += fixup_table[tag](start); break; } } @@ -2144,7 +2145,7 @@ static void repair_heap(void) if(info->mark) { info->mark = 0; - gc->fixup_table[*(unsigned short*)(start+1)](start+1); + fixup_table[*(unsigned short*)(start+1)](start+1); } else { info->dead = 1; } @@ -2182,7 +2183,7 @@ static void repair_heap(void) void **tempend = (start++) + (size - INSET_WORDS); unsigned short tag = *(unsigned short*)start; while(start < tempend) - start += gc->fixup_table[tag](start); + start += fixup_table[tag](start); info->mark = 0; start = PPTR(info) + size; } else {