diff -r bb18957ad21e -r df6caf649ff7 src/share/vm/memory/barrierSet.cpp --- a/src/share/vm/memory/barrierSet.cpp Fri Jul 10 16:01:20 2009 -0700 +++ b/src/share/vm/memory/barrierSet.cpp Tue Jul 14 15:40:39 2009 -0700 @@ -25,12 +25,27 @@ # include "incls/_precompiled.incl" # include "incls/_barrierSet.cpp.incl" -// count is in HeapWord's +// count is number of array elements being written void BarrierSet::static_write_ref_array_pre(HeapWord* start, size_t count) { - Universe::heap()->barrier_set()->write_ref_array_pre(MemRegion(start, start + count)); + assert(count <= (size_t)max_intx, "count too large"); +#if 0 + warning("Pre: \t" INTPTR_FORMAT "[" SIZE_FORMAT "]\t", + start, count); +#endif + if (UseCompressedOops) { + Universe::heap()->barrier_set()->write_ref_array_pre((narrowOop*)start, (int)count); + } else { + Universe::heap()->barrier_set()->write_ref_array_pre( (oop*)start, (int)count); + } } -// count is in HeapWord's +// count is number of array elements being written void BarrierSet::static_write_ref_array_post(HeapWord* start, size_t count) { - Universe::heap()->barrier_set()->write_ref_array_work(MemRegion(start, start + count)); + assert(count <= (size_t)max_intx, "count too large"); + HeapWord* end = start + objArrayOopDesc::array_size((int)count); +#if 0 + warning("Post:\t" INTPTR_FORMAT "[" SIZE_FORMAT "] : [" INTPTR_FORMAT","INTPTR_FORMAT")\t", + start, count, start, end); +#endif + Universe::heap()->barrier_set()->write_ref_array_work(MemRegion(start, end)); }