From 0589e7c42dc7c884c49081f829309ecccd1c63f0 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Sun, 29 Jan 2012 21:46:40 +0400 Subject: [PATCH] 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. --- finalize.c | 2 +- include/private/gc_pmark.h | 20 ++++++++------------ mark.c | 14 +++++++------- 3 files changed, 16 insertions(+), 20 deletions(-) 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 */ -- 2.7.4