From: Ivan Maidanski Date: Sun, 29 Jan 2012 17:46:40 +0000 (+0400) Subject: Code refactoring regarding GC_PUSH_ONE_HEAP (mark) X-Git-Tag: gc7_3alpha2~162 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0589e7c42dc7c884c49081f829309ecccd1c63f0;p=platform%2Fupstream%2Flibgc.git Code refactoring regarding GC_PUSH_ONE_HEAP (mark) * finalize.c (GC_ignore_self_finalize_mark_proc): Pass GC_mark_stack_top to GC_PUSH_ONE_HEAP. * mark.c (PUSH_GRANULE): Likewise. * include/private/gc_pmark.h (GC_PUSH_ONE_HEAP): Replace hard-coded GC_mark_stack_top with mark_stack_top argument; reformat comment; add missing brackets. --- diff --git a/finalize.c b/finalize.c index 56f62f1..f66d76e 100644 --- a/finalize.c +++ b/finalize.c @@ -335,7 +335,7 @@ STATIC void GC_ignore_self_finalize_mark_proc(ptr_t p) for (q = p; q <= scan_limit; q += ALIGNMENT) { r = *(word *)q; if ((ptr_t)r < p || (ptr_t)r > target_limit) { - GC_PUSH_ONE_HEAP(r, q); + GC_PUSH_ONE_HEAP(r, q, GC_mark_stack_top); } } } diff --git a/include/private/gc_pmark.h b/include/private/gc_pmark.h index 42fbb20..04aa8c3 100644 --- a/include/private/gc_pmark.h +++ b/include/private/gc_pmark.h @@ -392,18 +392,14 @@ exit_label: ; \ } #endif - -/* - * As above, but interior pointer recognition as for - * normal heap pointers. - */ -#define GC_PUSH_ONE_HEAP(p,source) \ - FIXUP_POINTER(p); \ - if ((ptr_t)(p) >= (ptr_t)GC_least_plausible_heap_addr \ - && (ptr_t)(p) < (ptr_t)GC_greatest_plausible_heap_addr) { \ - GC_mark_stack_top = GC_mark_and_push( \ - (void *)(p), GC_mark_stack_top, \ - GC_mark_stack_limit, (void * *)(source)); \ +/* As above, but interior pointer recognition as for normal heap pointers. */ +#define GC_PUSH_ONE_HEAP(p,source,mark_stack_top) \ + { \ + FIXUP_POINTER(p); \ + if ((ptr_t)(p) >= (ptr_t)GC_least_plausible_heap_addr \ + && (ptr_t)(p) < (ptr_t)GC_greatest_plausible_heap_addr) \ + mark_stack_top = GC_mark_and_push((void *)(p), mark_stack_top, \ + GC_mark_stack_limit, (void * *)(source)); \ } /* Mark starting at mark stack entry top (incl.) down to */ diff --git a/mark.c b/mark.c index 87e2b4a..5bef7f9 100644 --- a/mark.c +++ b/mark.c @@ -1537,25 +1537,25 @@ GC_INNER void GC_push_all_stack(ptr_t bottom, ptr_t top) # define USE_PUSH_MARKED_ACCELERATORS # define PUSH_GRANULE(q) \ { word qcontents = (q)[0]; \ - GC_PUSH_ONE_HEAP(qcontents, (q)); } + GC_PUSH_ONE_HEAP(qcontents, q, GC_mark_stack_top); } # elif GC_GRANULE_WORDS == 2 # define USE_PUSH_MARKED_ACCELERATORS # define PUSH_GRANULE(q) \ { word qcontents = (q)[0]; \ - GC_PUSH_ONE_HEAP(qcontents, (q)); \ + GC_PUSH_ONE_HEAP(qcontents, q, GC_mark_stack_top); \ qcontents = (q)[1]; \ - GC_PUSH_ONE_HEAP(qcontents, (q)+1); } + GC_PUSH_ONE_HEAP(qcontents, (q)+1, GC_mark_stack_top); } # elif GC_GRANULE_WORDS == 4 # define USE_PUSH_MARKED_ACCELERATORS # define PUSH_GRANULE(q) \ { word qcontents = (q)[0]; \ - GC_PUSH_ONE_HEAP(qcontents, (q)); \ + GC_PUSH_ONE_HEAP(qcontents, q, GC_mark_stack_top); \ qcontents = (q)[1]; \ - GC_PUSH_ONE_HEAP(qcontents, (q)+1); \ + GC_PUSH_ONE_HEAP(qcontents, (q)+1, GC_mark_stack_top); \ qcontents = (q)[2]; \ - GC_PUSH_ONE_HEAP(qcontents, (q)+2); \ + GC_PUSH_ONE_HEAP(qcontents, (q)+2, GC_mark_stack_top); \ qcontents = (q)[3]; \ - GC_PUSH_ONE_HEAP(qcontents, (q)+3); } + GC_PUSH_ONE_HEAP(qcontents, (q)+3, GC_mark_stack_top); } # endif #endif /* !USE_MARK_BYTES && MARK_BIT_PER_GRANULE */