src/share/vm/memory/barrierSet.cpp

Thu, 03 Dec 2009 15:01:57 -0800

author
ysr
date
Thu, 03 Dec 2009 15:01:57 -0800
changeset 1526
6aa7255741f3
parent 1280
df6caf649ff7
child 1907
c18cbe5936b8
permissions
-rw-r--r--

6906727: UseCompressedOops: some card-marking fixes related to object arrays
Summary: Introduced a new write_ref_array(HeapWords* start, size_t count) method that does the requisite MemRegion range calculation so (some of the) clients of the erstwhile write_ref_array(MemRegion mr) do not need to worry. This removed all external uses of array_size(), which was also simplified and made private. Asserts were added to catch other possible issues. Further, less essential, fixes stemming from this investigation are deferred to CR 6904516 (to follow shortly in hs17).
Reviewed-by: kvn, coleenp, jmasa

ysr@777 1 /*
ysr@777 2 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved.
ysr@777 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ysr@777 4 *
ysr@777 5 * This code is free software; you can redistribute it and/or modify it
ysr@777 6 * under the terms of the GNU General Public License version 2 only, as
ysr@777 7 * published by the Free Software Foundation.
ysr@777 8 *
ysr@777 9 * This code is distributed in the hope that it will be useful, but WITHOUT
ysr@777 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ysr@777 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ysr@777 12 * version 2 for more details (a copy is included in the LICENSE file that
ysr@777 13 * accompanied this code).
ysr@777 14 *
ysr@777 15 * You should have received a copy of the GNU General Public License version
ysr@777 16 * 2 along with this work; if not, write to the Free Software Foundation,
ysr@777 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ysr@777 18 *
ysr@777 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
ysr@777 20 * CA 95054 USA or visit www.sun.com if you need additional information or
ysr@777 21 * have any questions.
ysr@777 22 *
ysr@777 23 */
ysr@777 24
ysr@777 25 # include "incls/_precompiled.incl"
ysr@777 26 # include "incls/_barrierSet.cpp.incl"
ysr@777 27
ysr@1280 28 // count is number of array elements being written
ysr@777 29 void BarrierSet::static_write_ref_array_pre(HeapWord* start, size_t count) {
ysr@1280 30 assert(count <= (size_t)max_intx, "count too large");
ysr@1280 31 #if 0
ysr@1280 32 warning("Pre: \t" INTPTR_FORMAT "[" SIZE_FORMAT "]\t",
ysr@1280 33 start, count);
ysr@1280 34 #endif
ysr@1280 35 if (UseCompressedOops) {
ysr@1280 36 Universe::heap()->barrier_set()->write_ref_array_pre((narrowOop*)start, (int)count);
ysr@1280 37 } else {
ysr@1280 38 Universe::heap()->barrier_set()->write_ref_array_pre( (oop*)start, (int)count);
ysr@1280 39 }
ysr@777 40 }
ysr@777 41
ysr@1280 42 // count is number of array elements being written
ysr@777 43 void BarrierSet::static_write_ref_array_post(HeapWord* start, size_t count) {
ysr@1526 44 // simply delegate to instance method
ysr@1526 45 Universe::heap()->barrier_set()->write_ref_array(start, count);
ysr@777 46 }

mercurial