From: <dfr...@us...> - 2009-12-02 23:15:24
|
Revision: 15797 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15797&view=rev Author: dframpton-oss Date: 2009-12-02 23:15:12 +0000 (Wed, 02 Dec 2009) Log Message: ----------- Merge to r15794 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/generational/GenConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/generational/GenMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/Constants.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/Entrypoints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/Memory.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/PlanConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/GenConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/GenMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/Constants.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Entrypoints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Memory.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -326,20 +326,16 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean booleanBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; @@ -390,20 +386,16 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean byteBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; @@ -454,20 +446,16 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean charBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; @@ -518,25 +506,22 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean shortBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; } + /** * Write a int. Take appropriate write barrier actions.<p> * @@ -582,20 +567,16 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean intBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; @@ -646,20 +627,16 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean longBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; @@ -710,20 +687,16 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean floatBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; @@ -774,20 +747,16 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean doubleBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; @@ -838,20 +807,16 @@ * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ public boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // Either: write barriers are used and this is overridden, or + // Either: bulk copy is supported and this is overridden, or // write barriers are not used and this is never called if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); return false; Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -31,48 +31,72 @@ /** @return True of this Plan requires read barriers on booleans. */ public boolean needsBooleanReadBarrier() { return false; } + /** @return True if this Plan can perform bulk boolean arraycopy barriers. */ + public boolean booleanBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on bytes. */ public boolean needsByteWriteBarrier() { return false; } /** @return True of this Plan requires read barriers on bytes. */ public boolean needsByteReadBarrier() { return false; } + /** @return True if this Plan can perform bulk byte arraycopy barriers. */ + public boolean byteBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on chars. */ public boolean needsCharWriteBarrier() { return false; } /** @return True of this Plan requires read barriers on chars. */ public boolean needsCharReadBarrier() { return false; } + /** @return True if this Plan can perform bulk char arraycopy barriers. */ + public boolean charBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on shorts. */ public boolean needsShortWriteBarrier() { return false; } /** @return True of this Plan requires read barriers on shorts. */ public boolean needsShortReadBarrier() { return false; } + /** @return True if this Plan can perform bulk short arraycopy barriers. */ + public boolean shortBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on ints. */ public boolean needsIntWriteBarrier() { return false; } /** @return True of this Plan requires read barriers on ints. */ public boolean needsIntReadBarrier() { return false; } + /** @return True if this Plan can perform bulk int arraycopy barriers. */ + public boolean intBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on longs. */ public boolean needsLongWriteBarrier() { return false; } /** @return True of this Plan requires read barriers on longs. */ public boolean needsLongReadBarrier() { return false; } + /** @return True if this Plan can perform bulk long arraycopy barriers. */ + public boolean longBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on floats. */ public boolean needsFloatWriteBarrier() { return false; } /** @return True of this Plan requires read barriers on floats. */ public boolean needsFloatReadBarrier() { return false; } + /** @return True if this Plan can perform bulk float arraycopy barriers. */ + public boolean floatBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on doubles. */ public boolean needsDoubleWriteBarrier() { return false; } /** @return True of this Plan requires read barriers on doubles. */ public boolean needsDoubleReadBarrier() { return false; } + /** @return True if this Plan can perform bulk double arraycopy barriers. */ + public boolean doubleBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on object references. */ public boolean needsObjectReferenceWriteBarrier() { return false; } @@ -85,6 +109,9 @@ /** @return True if this Plan requires non-heap read barriers on object references. */ public boolean needsObjectReferenceNonHeapReadBarrier() { return false; } + /** @return True if this Plan can perform bulk object arraycopy barriers. */ + public boolean objectReferenceBulkCopySupported() { return false; } + /** @return True if this Plan requires linear scanning. */ public boolean needsLinearScan() { return org.mmtk.utility.Constants.SUPPORT_CARD_SCANNING;} Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/generational/GenConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/generational/GenConstraints.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/generational/GenConstraints.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -52,6 +52,10 @@ @Override public boolean needsObjectReferenceNonHeapWriteBarrier() { return Gen.USE_NON_HEAP_OBJECT_REFERENCE_WRITE_BARRIER; } + /** @return True if this Plan can perform bulk object arraycopy barriers. */ + @Override + public boolean objectReferenceBulkCopySupported() { return true; } + /** @return The specialized scan methods required */ @Override public int numSpecializedScans() { return 2; } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/generational/GenMutator.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/generational/GenMutator.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/generational/GenMutator.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -259,26 +259,21 @@ * In this case, we remember the mutated source address range and * will scan that address range at GC time. * - * @param src The source of the values to copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). + * @param src The source of the values to be copied + * @param srcIdx The starting source index * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. + * @param srcIdx The starting source index + * @param len The number of array elements to be copied * @return True if the update was performed by the barrier, false if * left to the caller (always false in this case). */ @Inline - public final boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, - ObjectReference dst, Offset dstOffset, - int bytes) { - // We can ignore when src is in old space, right? - if (!Gen.inNursery(dst)) - arrayRemset.insert(dst.toAddress().plus(dstOffset), - dst.toAddress().plus(dstOffset.plus(bytes))); + @Override + public final boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + if (!Gen.inNursery(dst)) { + Address start = dst.toAddress().plus(dstOffset); + arrayRemset.insert(start, start.plus(bytes)); + } return false; } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -18,7 +18,6 @@ import org.vmmagic.pragma.*; import org.vmmagic.unboxed.Address; import org.vmmagic.unboxed.ObjectReference; -import org.vmmagic.unboxed.Offset; import org.vmmagic.unboxed.Word; /** @@ -78,32 +77,6 @@ } /** - * A number of references are about to be copied from object - * <code>src</code> to object <code>dst</code> (as in an array - * copy). Thus, <code>dst</code> is the mutated object. Take - * appropriate write barrier actions.<p> - * - * @param src The source of the values to be copied - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param dst The mutated object, i.e. the destination of the copy. - * @param dstOffset The offset of the first destination address, in - * bytes relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. - * @return True if the update was performed by the barrier, false if - * left to the caller (always false in this case). - */ - @Override - public boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { - // TODO: Currently, read barriers implies that this is never used, perhaps - // we might want to use it sometime anyway? - if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); - return false; - } - - /** * Read a reference. Take appropriate read barrier action, and * return the value that was read.<p> This is a <b>substituting<b> * barrier. The call to this barrier takes the place of a load.<p> Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/Constants.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/Constants.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/Constants.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -72,6 +72,11 @@ * * TODO MMTk should really become independent of these Java types */ + byte LOG_BYTES_IN_CHAR= 1; + int BYTES_IN_CHAR = 1 << LOG_BYTES_IN_CHAR; + byte LOG_BITS_IN_CHAR = LOG_BITS_IN_BYTE + LOG_BYTES_IN_CHAR; + int BITS_IN_CHAR = 1 << LOG_BITS_IN_CHAR; + byte LOG_BYTES_IN_SHORT = 1; int BYTES_IN_SHORT = 1 << LOG_BYTES_IN_SHORT; byte LOG_BITS_IN_SHORT = LOG_BITS_IN_BYTE + LOG_BYTES_IN_SHORT; Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -159,7 +159,7 @@ } else { pagesCurrentlyOnFreeList -= pages; if (pageOffset > highWaterMark) { - if ((pageOffset ^ highWaterMark) > EmbeddedMetaData.PAGES_IN_REGION) { + if (highWaterMark == 0 || (pageOffset ^ highWaterMark) > EmbeddedMetaData.PAGES_IN_REGION) { int regions = 1 + ((pageOffset - highWaterMark) >> EmbeddedMetaData.LOG_PAGES_IN_REGION); int metapages = regions * metaDataPagesPerRegion; reserved += metapages; Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -616,20 +616,34 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx >= (dstIdx + BYTES_IN_ADDRESS)) { - Memory.arraycopy8Bit(src, srcIdx, dst, dstIdx, len); + if ((src != dst || srcIdx >= (dstIdx + BYTES_IN_ADDRESS)) && BYTE_BULK_COPY_SUPPORTED) { + if (NEEDS_BOOLEAN_ASTORE_BARRIER || NEEDS_BOOLEAN_ALOAD_BARRIER) { + Offset srcOffset = Offset.fromIntZeroExtend(srcIdx); + Offset dstOffset = Offset.fromIntZeroExtend(dstIdx); + Barriers.byteBulkCopy(src, srcOffset, dst, dstOffset, len); + } else { + Memory.arraycopy8Bit(src, srcIdx, dst, dstIdx, len); + } } else { - arraycopyOverlap(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); } } - // Outlined unlikely case of potentially overlapping subarrays - // Motivation is to reduce code space costs of inlined array copy. - @NoInline - private static void arraycopyOverlap(byte[] src, int srcIdx, byte[] dst, int dstIdx, int len) { + /** + * Perform element-by-element arraycopy for array of bytes. Used + * when bulk copy is not possible. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + @NoInline // unlikely case, so reduce code space costs + private static void arraycopyPiecemeal(byte[] src, int srcIdx, byte[] dst, int dstIdx, int len) { if (srcIdx < dstIdx) { srcIdx += len; dstIdx += len; @@ -663,20 +677,34 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx >= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_BOOLEAN)) { - Memory.arraycopy8Bit(src, srcIdx, dst, dstIdx, len); + if ((src != dst || srcIdx >= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_BOOLEAN)) && BOOLEAN_BULK_COPY_SUPPORTED) { + if (NEEDS_BOOLEAN_ASTORE_BARRIER || NEEDS_BOOLEAN_ALOAD_BARRIER) { + Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_BOOLEAN); + Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_BOOLEAN); + Barriers.booleanBulkCopy(src, srcOffset, dst, dstOffset, len); + } else { + Memory.arraycopy8Bit(src, srcIdx, dst, dstIdx, len); + } } else { - arraycopyOverlap(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); } } - // Outlined unlikely case of potentially overlapping subarrays - // Motivation is to reduce code space costs of inlined array copy. - @NoInline - private static void arraycopyOverlap(boolean[] src, int srcIdx, boolean[] dst, int dstIdx, int len) { + /** + * Perform element-by-element arraycopy for array of booleans. Used + * when bulk copy is not possible. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + @NoInline // unlikely case, so reduce code space costs + private static void arraycopyPiecemeal(boolean[] src, int srcIdx, boolean[] dst, int dstIdx, int len) { if (srcIdx < dstIdx) { srcIdx += len; dstIdx += len; @@ -710,20 +738,34 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx >= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_SHORT)) { - Memory.arraycopy16Bit(src, srcIdx, dst, dstIdx, len); + if ((src != dst || srcIdx >= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_SHORT)) && SHORT_BULK_COPY_SUPPORTED) { + if (NEEDS_SHORT_ASTORE_BARRIER || NEEDS_SHORT_ALOAD_BARRIER) { + Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_SHORT); + Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_SHORT); + Barriers.shortBulkCopy(src, srcOffset, dst, dstOffset, len); + } else { + Memory.arraycopy16Bit(src, srcIdx, dst, dstIdx, len); + } } else { - arraycopyOverlap(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); } } - // Outlined unlikely case of potentially overlapping subarrays - // Motivation is to reduce code space costs of inlined array copy. - @NoInline - private static void arraycopyOverlap(short[] src, int srcIdx, short[] dst, int dstIdx, int len) { + /** + * Perform element-by-element arraycopy for array of shorts. Used + * when bulk copy is not possible. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + @NoInline // unlikely case, so reduce code space costs + private static void arraycopyPiecemeal(short[] src, int srcIdx, short[] dst, int dstIdx, int len) { if (srcIdx < dstIdx) { srcIdx += len; dstIdx += len; @@ -757,20 +799,34 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx >= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_CHAR)) { - Memory.arraycopy16Bit(src, srcIdx, dst, dstIdx, len); + if ((src != dst || srcIdx >= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_CHAR)) && CHAR_BULK_COPY_SUPPORTED) { + if (NEEDS_CHAR_ASTORE_BARRIER || NEEDS_CHAR_ALOAD_BARRIER) { + Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_CHAR); + Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_CHAR); + Barriers.charBulkCopy(src, srcOffset, dst, dstOffset, len); + } else { + Memory.arraycopy16Bit(src, srcIdx, dst, dstIdx, len); + } } else { - arraycopyOverlap(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); } } - // Outlined unlikely case of potentially overlapping subarrays - // Motivation is to reduce code space costs of inlined array copy. - @NoInline - private static void arraycopyOverlap(char[] src, int srcIdx, char[] dst, int dstIdx, int len) { + /** + * Perform element-by-element arraycopy for array of chars. Used + * when bulk copy is not possible. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + @NoInline // unlikely case, so reduce code space costs + private static void arraycopyPiecemeal(char[] src, int srcIdx, char[] dst, int dstIdx, int len) { if (srcIdx < dstIdx) { srcIdx += len; dstIdx += len; @@ -804,20 +860,34 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx >= dstIdx) { - Memory.arraycopy32Bit(src, srcIdx, dst, dstIdx, len); + if ((src != dst || srcIdx >= dstIdx) && INT_BULK_COPY_SUPPORTED) { + if (NEEDS_INT_ASTORE_BARRIER || NEEDS_INT_ALOAD_BARRIER) { + Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_INT); + Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_INT); + Barriers.intBulkCopy(src, srcOffset, dst, dstOffset, len); + } else { + Memory.arraycopy32Bit(src, srcIdx, dst, dstIdx, len); + } } else { - arraycopyOverlap(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); } } - // Outlined unlikely case of potentially overlapping subarrays - // Motivation is to reduce code space costs of inlined array copy. - @NoInline - private static void arraycopyOverlap(int[] src, int srcIdx, int[] dst, int dstIdx, int len) { + /** + * Perform element-by-element arraycopy for array of ints. Used + * when bulk copy is not possible. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + @NoInline // unlikely case, so reduce code space costs + private static void arraycopyPiecemeal(int[] src, int srcIdx, int[] dst, int dstIdx, int len) { if (srcIdx < dstIdx) { srcIdx += len; dstIdx += len; @@ -851,20 +921,34 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx > dstIdx) { - Memory.arraycopy32Bit(src, srcIdx, dst, dstIdx, len); + if (src != dst || srcIdx > dstIdx && FLOAT_BULK_COPY_SUPPORTED) { + if (NEEDS_FLOAT_ASTORE_BARRIER || NEEDS_FLOAT_ALOAD_BARRIER) { + Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_FLOAT); + Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_FLOAT); + Barriers.floatBulkCopy(src, srcOffset, dst, dstOffset, len); + } else { + Memory.arraycopy32Bit(src, srcIdx, dst, dstIdx, len); + } } else { - arraycopyOverlap(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); } } - // Outlined unlikely case of potentially overlapping subarrays - // Motivation is to reduce code space costs of inlined array copy. - @NoInline - private static void arraycopyOverlap(float[] src, int srcIdx, float[] dst, int dstIdx, int len) { + /** + * Perform element-by-element arraycopy for array of floats. Used + * when bulk copy is not possible. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + @NoInline // unlikely case, so reduce code space costs + private static void arraycopyPiecemeal(float[] src, int srcIdx, float[] dst, int dstIdx, int len) { if (srcIdx < dstIdx) { srcIdx += len; dstIdx += len; @@ -898,20 +982,34 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx > dstIdx) { - Memory.arraycopy64Bit(src, srcIdx, dst, dstIdx, len); + if ((src != dst || srcIdx > dstIdx) && LONG_BULK_COPY_SUPPORTED) { + if (NEEDS_LONG_ASTORE_BARRIER || NEEDS_LONG_ALOAD_BARRIER) { + Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_LONG); + Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_LONG); + Barriers.longBulkCopy(src, srcOffset, dst, dstOffset, len); + } else { + Memory.arraycopy64Bit(src, srcIdx, dst, dstIdx, len); + } } else { - arraycopyOverlap(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); } } - // Outlined unlikely case of potentially overlapping subarrays - // Motivation is to reduce code space costs of inlined array copy. - @NoInline - private static void arraycopyOverlap(long[] src, int srcIdx, long[] dst, int dstIdx, int len) { + /** + * Perform element-by-element arraycopy for array of longs. Used + * when bulk copy is not possible. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + @NoInline // unlikely case, so reduce code space costs + private static void arraycopyPiecemeal(long[] src, int srcIdx, long[] dst, int dstIdx, int len) { if (srcIdx < dstIdx) { srcIdx += len; dstIdx += len; @@ -945,20 +1043,34 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx > dstIdx) { - Memory.arraycopy64Bit(src, srcIdx, dst, dstIdx, len); + if ((src != dst || srcIdx > dstIdx) && DOUBLE_BULK_COPY_SUPPORTED) { + if (NEEDS_DOUBLE_ASTORE_BARRIER || NEEDS_DOUBLE_ALOAD_BARRIER) { + Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_DOUBLE); + Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_DOUBLE); + Barriers.doubleBulkCopy(src, srcOffset, dst, dstOffset, len); + } else { + Memory.arraycopy64Bit(src, srcIdx, dst, dstIdx, len); + } } else { - arraycopyOverlap(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); } } - // Outlined unlikely case of potentially overlapping subarrays - // Motivation is to reduce code space costs of inlined array copy. - @NoInline - private static void arraycopyOverlap(double[] src, int srcIdx, double[] dst, int dstIdx, int len) { + /** + * Perform element-by-element arraycopy for array of doubles. Used + * when bulk copy is not possible. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + @NoInline // unlikely case, so reduce code space costs + private static void arraycopyPiecemeal(double[] src, int srcIdx, double[] dst, int dstIdx, int len) { if (srcIdx < dstIdx) { srcIdx += len; dstIdx += len; @@ -994,10 +1106,11 @@ (dstIdx + len) <= dst.length) { RVMType lhs = Magic.getObjectType(dst).asArray().getElementType(); RVMType rhs = Magic.getObjectType(src).asArray().getElementType(); + if ((lhs == rhs) || (lhs == RVMType.JavaLangObjectType) || RuntimeEntrypoints.isAssignableWith(lhs, rhs)) { - fastArrayCopy(src, srcIdx, dst, dstIdx, len); + arraycopyNoCheckcast(src, srcIdx, dst, dstIdx, len); } else { - slowArrayCopy(src, srcIdx, dst, dstIdx, len); + arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len); } } else { failWithIndexOutOfBoundsException(); @@ -1015,50 +1128,65 @@ * @param src The source array * @param srcIdx The starting source index * @param dst The destination array - * @param dstIdx The starting destination index + * @param dstIdx The starting source index * @param len The number of array elements to be copied */ - private static void fastArrayCopy(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) { - - boolean loToHi = (srcIdx > dstIdx); // direction of copy + private static void arraycopyNoCheckcast(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) { Offset srcOffset = Offset.fromIntZeroExtend(srcIdx << LOG_BYTES_IN_ADDRESS); Offset dstOffset = Offset.fromIntZeroExtend(dstIdx << LOG_BYTES_IN_ADDRESS); int bytes = len << LOG_BYTES_IN_ADDRESS; - if (!NEEDS_OBJECT_ALOAD_BARRIER && ((src != dst) || loToHi)) { - if (!NEEDS_OBJECT_ASTORE_BARRIER || - !Barriers.objectBulkCopy(src, srcOffset, dst, dstOffset, bytes)) { - Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), - Magic.objectAsAddress(src).plus(srcOffset), - bytes); + if (((src != dst) || (srcIdx > dstIdx)) && OBJECT_BULK_COPY_SUPPORTED) { + if (NEEDS_OBJECT_ASTORE_BARRIER || NEEDS_OBJECT_ALOAD_BARRIER) { + Barriers.objectBulkCopy(src, srcOffset, dst, dstOffset, bytes); + } else { + Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes); } } else { - // set up things according to the direction of the copy - int increment; - if (loToHi) { - increment = BYTES_IN_ADDRESS; + arraycopyPiecemealNoCheckcast(src, dst, len, srcOffset, dstOffset, bytes); + } + } + + /** + * Perform element-by-element arraycopy for array of objects without + * performing checkcast. Used when bulk copy is not possible, but + * checkcast is still not necessary. If barriers are required they + * must be explicitly invoked. + * + * @param src The source array + * @param srcIdx The starting source index + * @param dst The destination array + * @param dstIdx The starting destination index + * @param len The number of array elements to be copied + */ + private static void arraycopyPiecemealNoCheckcast(Object[] src, Object[] dst, int len, + Offset srcOffset, Offset dstOffset, int bytes) { + + // set up things according to the direction of the copy + int increment; + if (srcOffset.sGT(dstOffset)) { // direction of copy + increment = BYTES_IN_ADDRESS; + } else { + srcOffset = srcOffset.plus(bytes - BYTES_IN_ADDRESS); + dstOffset = dstOffset.plus(bytes - BYTES_IN_ADDRESS); + increment = -BYTES_IN_ADDRESS; + } + + // perform the copy + while (len-- != 0) { + Object value; + if (NEEDS_OBJECT_GETFIELD_BARRIER) { + value = Barriers.objectArrayRead(src, srcOffset.toInt() >> LOG_BYTES_IN_ADDRESS); } else { - srcOffset = srcOffset.plus(bytes - BYTES_IN_ADDRESS); - dstOffset = dstOffset.plus(bytes - BYTES_IN_ADDRESS); - increment = -BYTES_IN_ADDRESS; + value = Magic.getObjectAtOffset(src, srcOffset); } - - // perform the copy - while (len-- != 0) { - Object value; - if (NEEDS_OBJECT_GETFIELD_BARRIER) { - value = Barriers.objectArrayRead(src, srcOffset.toInt() >> LOG_BYTES_IN_ADDRESS); - } else { - value = Magic.getObjectAtOffset(src, srcOffset); - } - if (NEEDS_OBJECT_PUTFIELD_BARRIER) { - Barriers.objectArrayWrite(dst, dstOffset.toInt() >> LOG_BYTES_IN_ADDRESS, value); - } else { - Magic.setObjectAtOffset(dst, dstOffset, value); - } - srcOffset = srcOffset.plus(increment); - dstOffset = dstOffset.plus(increment); + if (NEEDS_OBJECT_PUTFIELD_BARRIER) { + Barriers.objectArrayWrite(dst, dstOffset.toInt() >> LOG_BYTES_IN_ADDRESS, value); + } else { + Magic.setObjectAtOffset(dst, dstOffset, value); } + srcOffset = srcOffset.plus(increment); + dstOffset = dstOffset.plus(increment); } } @@ -1076,7 +1204,7 @@ * @param dstIdx The starting destination index * @param len The number of array elements to be copied */ - private static void slowArrayCopy(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) { + private static void arraycopyPiecemeal(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) { // must perform copy in correct order if ((src != dst) || srcIdx > dstIdx) { // non-overlapping case: straightforward Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java 2009-11-26 03:40:00 UTC (rev 15796) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java 2009-12-02 23:15:12 UTC (rev 15797) @@ -13,7 +13,8 @@ package org.jikesrvm.mm.mminterface; import org.jikesrvm.runtime.Magic; -import org.mmtk.vm.VM; +import org.jikesrvm.runtime.Memory; +import org.jikesrvm.VM; import org.vmmagic.pragma.Entrypoint; import org.vmmagic.pragma.Inline; import org.vmmagic.pragma.Uninterruptible; @@ -38,8 +39,8 @@ if (NEEDS_JAVA_LANG_REFERENCE_GC_READ_BARRIER) { ObjectReference result = Selected.Mutator.get().javaLangReferenceReadBarrier(ObjectReference.fromObject(obj)); return result.toObject(); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); return null; } @@ -57,6 +58,8 @@ public static final boolean NEEDS_BOOLEAN_GETFIELD_BARRIER = NEEDS_BOOLEAN_GC_READ_BARRIER; /** True if the VM requires read barriers on boolean arrayload */ public static final boolean NEEDS_BOOLEAN_ALOAD_BARRIER = NEEDS_BOOLEAN_GC_READ_BARRIER; + /** True if the garbage collector does not support the bulk copy operation */ + public static final boolean BOOLEAN_BULK_COPY_SUPPORTED = !(NEEDS_BOOLEAN_ASTORE_BARRIER || NEEDS_BOOLEAN_ALOAD_BARRIER) || Selected.Constraints.get().booleanBulkCopySupported(); /** * Barrier for writes of booleans into fields of instances (ie putfield). @@ -72,8 +75,8 @@ if (NEEDS_BOOLEAN_GC_WRITE_BARRIER) { ObjectReference src = ObjectReference.fromObject(ref); Selected.Mutator.get().booleanWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); } /** @@ -87,13 +90,13 @@ */ @Inline @Entrypoint - public static void booleanArrayWrite(Object ref, int index, boolean value) { - if (NEEDS_OBJECT_GC_WRITE_BARRIER) { + public static void booleanArrayWrite(boolean[] ref, int index, boolean value) { + if (NEEDS_BOOLEAN_GC_WRITE_BARRIER) { ObjectReference array = ObjectReference.fromObject(ref); - Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_BOOLEAN); Selected.Mutator.get().booleanWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); } /** @@ -107,11 +110,11 @@ @Inline @Entrypoint public static boolean booleanFieldRead(Object ref, Offset offset, int locationMetadata) { - if (NEEDS_OBJECT_GC_READ_BARRIER) { + if (NEEDS_BOOLEAN_GC_READ_BARRIER) { ObjectReference src = ObjectReference.fromObject(ref); return Selected.Mutator.get().booleanRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); return false; } @@ -124,38 +127,32 @@ */ @Inline @Entrypoint - public static boolean booleanArrayRead(Object ref, int index) { - if (NEEDS_OBJECT_GC_READ_BARRIER) { + public static boolean booleanArrayRead(boolean[] ref, int index) { + if (NEEDS_BOOLEAN_GC_READ_BARRIER) { ObjectReference array = ObjectReference.fromObject(ref); - Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_BOOLEAN); return Selected.Mutator.get().booleanRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); return false; } /** * Barrier for a bulk copy of booleans (i.e. in an array copy). * - * @param src The source object - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param tgt The target object - * @param tgtOffset The offset of the first target address, in bytes - * relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. - * @return True if the update was performed by the barrier, false if - * left to the caller (always false in this case). + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied */ @Inline - public static boolean booleanBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) { - if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) { - return Selected.Mutator.get().booleanBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); - return false; + public static void booleanBulkCopy(boolean[] src, Offset srcOffset, boolean[] dst, Offset dstOffset, int bytes) { + if (VM.VerifyAssertions) VM._assert(BOOLEAN_BULK_COPY_SUPPORTED); + + if (!Selected.Mutator.get().booleanBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) { + Memory.arraycopy8Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes); + } } /** True if the garbage collector requires write barriers on byte putfield, arraystore or modifycheck */ @@ -170,6 +167,8 @@ public static final boolean NEEDS_BYTE_GETFIELD_BARRIER = NEEDS_BYTE_GC_READ_BARRIER; /** True if the VM requires read barriers on byte arrayload */ public static final boolean NEEDS_BYTE_ALOAD_BARRIER = NEEDS_BYTE_GC_READ_BARRIER; + /** True if the garbage collector does not support the bulk copy operation */ + public static final boolean BYTE_BULK_COPY_SUPPORTED = !(NEEDS_BYTE_ASTORE_BARRIER || NEEDS_BYTE_ALOAD_BARRIER) || Selected.Constraints.get().byteBulkCopySupported(); /** * Barrier for writes of bytes into fields of instances (ie putfield). @@ -185,8 +184,8 @@ if (NEEDS_BYTE_GC_WRITE_BARRIER) { ObjectReference src = ObjectReference.fromObject(ref); Selected.Mutator.get().byteWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); } /** @@ -200,13 +199,13 @@ */ @Inline @Entrypoint - public static void byteArrayWrite(Object ref, int index, byte value) { - if (NEEDS_OBJECT_GC_WRITE_BARRIER) { + public static void byteArrayWrite(byte[] ref, int index, byte value) { + if (NEEDS_BYTE_GC_WRITE_BARRIER) { ObjectReference array = ObjectReference.fromObject(ref); - Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); + Offset offset = Offset.fromIntZeroExtend(index); Selected.Mutator.get().byteWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); } /** @@ -220,11 +219,11 @@ @Inline @Entrypoint public static byte byteFieldRead(Object ref, Offset offset, int locationMetadata) { - if (NEEDS_OBJECT_GC_READ_BARRIER) { + if (NEEDS_BYTE_GC_READ_BARRIER) { ObjectReference src = ObjectReference.fromObject(ref); return Selected.Mutator.get().byteRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); return 0; } @@ -237,38 +236,32 @@ */ @Inline @Entrypoint - public static byte byteArrayRead(Object ref, int index) { - if (NEEDS_OBJECT_GC_READ_BARRIER) { + public static byte byteArrayRead(byte[] ref, int index) { + if (NEEDS_BYTE_GC_READ_BARRIER) { ObjectReference array = ObjectReference.fromObject(ref); - Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); + Offset offset = Offset.fromIntZeroExtend(index); return Selected.Mutator.get().byteRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); return 0; } /** - * Barrier for a bulk copy of objects (i.e. in an array copy). + * Barrier for a bulk copy of bytes (i.e. in an array copy). * - * @param src The source object - * @param srcOffset The offset of the first source address, in - * bytes, relative to <code>src</code> (in principle, this could be - * negative). - * @param tgt The target object - * @param tgtOffset The offset of the first target address, in bytes - * relative to <code>tgt</code> (in principle, this could be - * negative). - * @param bytes The size of the region being copied, in bytes. - * @return True if the update was performed by the barrier, false if - * left to the caller (always false in this case). + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied */ @Inline - public static boolean byteBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) { - if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) { - return Selected.Mutator.get().byteBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); - return false; + public static void byteBulkCopy(byte[] src, Offset srcOffset, byte[] dst, Offset dstOffset, int bytes) { + if (VM.VerifyAssertions) VM._assert(BYTE_BULK_COPY_SUPPORTED); + + if (!Selected.Mutator.get().byteBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) { + Memory.arraycopy8Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes); + } } @@ -284,6 +277,8 @@ public static final boolean NEEDS_CHAR_GETFIELD_BARRIER = NEEDS_CHAR_GC_READ_BARRIER; /** True if the VM requires read barriers on char arrayload */ public static final boolean NEEDS_CHAR_ALOAD_BARRIER = NEEDS_CHAR_GC_READ_BARRIER; + /** True if the garbage collector does not support the bulk copy operation */ + public static final boolean CHAR_BULK_COPY_SUPPORTED = !(NEEDS_CHAR_ASTORE_BARRIER || NEEDS_CHAR_ALOAD_BARRIER) || Selected.Constraints.get().charBulkCopySupported(); /** * Barrier for writes of chars into fields of instances (ie putfield). @@ -299,8 +294,8 @@ if (NEEDS_CHAR_GC_WRITE_BARRIER) { ObjectReference src = ObjectReference.fromObject(ref); Selected.Mutator.get().charWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); } /** @@ -314,13 +309,13 @@ */ @Inline @Entrypoint - public static void charArrayWrite(Object ref, int index, char value) { - if (NEEDS_OBJECT_GC_WRITE_BARRIER) { + public static void charArrayWrite(char[] ref, int index, char value) { + if (NEEDS_CHAR_GC_WRITE_BARRIER) { ObjectReference array = ObjectReference.fromObject(ref); Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); Selected.Mutator.get().charWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); } /** @@ -334,11 +329,11 @@ @Inline @Entrypoint public static char charFieldRead(Object ref, Offset offset, int locationMetadata) { - if (NEEDS_OBJECT_GC_READ_BARRIER) { + if (NEEDS_CHAR_GC_READ_BARRIER) { ObjectReference src = ObjectReference.fromObject(ref); return Selected.Mutator.get().charRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); - } else if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(false); + } else if (VM.VerifyAssertions) + VM._assert(false); return 0; } @@ -351,38 +346,32 @@ */ @Inline @Entrypoint... [truncated message content] |
From: <dfr...@us...> - 2009-12-02 23:27:10
|
Revision: 15798 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15798&view=rev Author: dframpton-oss Date: 2009-12-02 23:27:01 +0000 (Wed, 02 Dec 2009) Log Message: ----------- Merge to r15795 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/PlanConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java 2009-12-02 23:15:12 UTC (rev 15797) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java 2009-12-02 23:27:01 UTC (rev 15798) @@ -763,6 +763,126 @@ } /** + * Write a word. Take appropriate write barrier actions.<p> + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new word + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void wordWrite(ObjectReference src, Address slot, Word value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + } + + /** + * Read a word. Take appropriate read barrier action, and + * return the value that was read.<p> This is a <b>substituting<b> + * barrier. The call to this barrier takes the place of a load.<p> + * + * @param src The object reference holding the field being read. + * @param slot The address of the slot being read. + * @param metaDataA A value that assists the host VM in creating a load + * @param metaDataB A value that assists the host VM in creating a load + * @param mode The context in which the load occurred + * @return The word that was read. + */ + @Inline + public Word wordRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) { + // Either: read barriers are used and this is overridden, or + // read barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return Word.zero(); + } + + /** + * A number of words are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller (always false in this case). + */ + public boolean wordBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + // Either: bulk copy is supported and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** + * Write an address. Take appropriate write barrier actions.<p> + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new address + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void addressWrite(ObjectReference src, Address slot, Address value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + } + + /** + * Read an address. Take appropriate read barrier action, and + * return the value that was read.<p> This is a <b>substituting<b> + * barrier. The call to this barrier takes the place of a load.<p> + * + * @param src The object reference holding the field being read. + * @param slot The address of the slot being read. + * @param metaDataA A value that assists the host VM in creating a load + * @param metaDataB A value that assists the host VM in creating a load + * @param mode The context in which the load occurred + * @return The address that was read. + */ + @Inline + public Address addressRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) { + // Either: read barriers are used and this is overridden, or + // read barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return Address.zero(); + } + + /** + * A number of addresses are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller (always false in this case). + */ + public boolean addressBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + // Either: bulk copy is supported and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** * Write an object reference. Take appropriate write barrier actions.<p> * * <b>By default do nothing, override if appropriate.</b> Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java 2009-12-02 23:15:12 UTC (rev 15797) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java 2009-12-02 23:27:01 UTC (rev 15798) @@ -22,13 +22,13 @@ * issues with ordering of static initialization. */ @Uninterruptible public abstract class PlanConstraints { - /** @return True of this Plan requires read barriers on java.lang.reference types. */ + /** @return True if this Plan requires read barriers on java.lang.reference types. */ public boolean needsJavaLangReferenceReadBarrier() { return false; } /** @return True if this Plan requires write barriers on booleans. */ public boolean needsBooleanWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on booleans. */ + /** @return True if this Plan requires read barriers on booleans. */ public boolean needsBooleanReadBarrier() { return false; } /** @return True if this Plan can perform bulk boolean arraycopy barriers. */ @@ -37,7 +37,7 @@ /** @return True if this Plan requires write barriers on bytes. */ public boolean needsByteWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on bytes. */ + /** @return True if this Plan requires read barriers on bytes. */ public boolean needsByteReadBarrier() { return false; } /** @return True if this Plan can perform bulk byte arraycopy barriers. */ @@ -46,7 +46,7 @@ /** @return True if this Plan requires write barriers on chars. */ public boolean needsCharWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on chars. */ + /** @return True if this Plan requires read barriers on chars. */ public boolean needsCharReadBarrier() { return false; } /** @return True if this Plan can perform bulk char arraycopy barriers. */ @@ -55,7 +55,7 @@ /** @return True if this Plan requires write barriers on shorts. */ public boolean needsShortWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on shorts. */ + /** @return True if this Plan requires read barriers on shorts. */ public boolean needsShortReadBarrier() { return false; } /** @return True if this Plan can perform bulk short arraycopy barriers. */ @@ -64,7 +64,7 @@ /** @return True if this Plan requires write barriers on ints. */ public boolean needsIntWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on ints. */ + /** @return True if this Plan requires read barriers on ints. */ public boolean needsIntReadBarrier() { return false; } /** @return True if this Plan can perform bulk int arraycopy barriers. */ @@ -73,7 +73,7 @@ /** @return True if this Plan requires write barriers on longs. */ public boolean needsLongWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on longs. */ + /** @return True if this Plan requires read barriers on longs. */ public boolean needsLongReadBarrier() { return false; } /** @return True if this Plan can perform bulk long arraycopy barriers. */ @@ -82,7 +82,7 @@ /** @return True if this Plan requires write barriers on floats. */ public boolean needsFloatWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on floats. */ + /** @return True if this Plan requires read barriers on floats. */ public boolean needsFloatReadBarrier() { return false; } /** @return True if this Plan can perform bulk float arraycopy barriers. */ @@ -91,16 +91,34 @@ /** @return True if this Plan requires write barriers on doubles. */ public boolean needsDoubleWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on doubles. */ + /** @return True if this Plan requires read barriers on doubles. */ public boolean needsDoubleReadBarrier() { return false; } /** @return True if this Plan can perform bulk double arraycopy barriers. */ public boolean doubleBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on words. */ + public boolean needsWordWriteBarrier() { return false; } + + /** @return True if this Plan requires read barriers on words. */ + public boolean needsWordReadBarrier() { return false; } + + /** @return True if this Plan can perform bulk word arraycopy barriers. */ + public boolean wordBulkCopySupported() { return false; } + + /** @return True if this Plan requires write barriers on addresss. */ + public boolean needsAddressWriteBarrier() { return false; } + + /** @return True if this Plan requires read barriers on addresss. */ + public boolean needsAddressReadBarrier() { return false; } + + /** @return True if this Plan can perform bulk address arraycopy barriers. */ + public boolean addressBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on object references. */ public boolean needsObjectReferenceWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on object references. */ + /** @return True if this Plan requires read barriers on object references. */ public boolean needsObjectReferenceReadBarrier() { return false; } /** @return True if this Plan requires non-heap write barriers on object references. */ Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java 2009-12-02 23:15:12 UTC (rev 15797) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java 2009-12-02 23:27:01 UTC (rev 15798) @@ -18,9 +18,12 @@ import org.vmmagic.pragma.Entrypoint; import org.vmmagic.pragma.Inline; import org.vmmagic.pragma.Uninterruptible; +import org.vmmagic.unboxed.Address; +import org.vmmagic.unboxed.AddressArray; import org.vmmagic.unboxed.ObjectReference; import org.vmmagic.unboxed.Offset; import org.vmmagic.unboxed.Word; +import org.vmmagic.unboxed.WordArray; @Uninterruptible public class Barriers implements org.mmtk.utility.Constants { @@ -912,10 +915,10 @@ * Barrier for a bulk copy of doubles (i.e. in an array copy). * * @param src The source array - * @param srcOffset The starting source offset + * @param srcIdx The starting source index * @param dst The destination array - * @param dstOffset The starting destination offset - * @param bytes The number of bytes to be copied + * @param dstIdx The starting source index + * @param len The number of array elements to be copied */ @Inline public static void doubleBulkCopy(double[] src, Offset srcOffset, double[] dst, Offset dstOffset, int bytes) { @@ -927,6 +930,226 @@ } + /** True if the garbage collector requires write barriers on word putfield, arraystore or modifycheck */ + private static final boolean NEEDS_WORD_GC_WRITE_BARRIER = Selected.Constraints.get().needsWordWriteBarrier(); + /** True if the VM requires write barriers on word putfield */ + public static final boolean NEEDS_WORD_PUTFIELD_BARRIER = NEEDS_WORD_GC_WRITE_BARRIER; + /** True if the VM requires write barriers on word arraystore */ + public static final boolean NEEDS_WORD_ASTORE_BARRIER = NEEDS_WORD_GC_WRITE_BARRIER; + /** True if the garbage collector requires read barriers on word getfield or arrayload */ + private static final boolean NEEDS_WORD_GC_READ_BARRIER = Selected.Constraints.get().needsWordReadBarrier(); + /** True if the VM requires read barriers on word getfield */ + public static final boolean NEEDS_WORD_GETFIELD_BARRIER = NEEDS_WORD_GC_READ_BARRIER; + /** True if the VM requires read barriers on word arrayload */ + public static final boolean NEEDS_WORD_ALOAD_BARRIER = NEEDS_WORD_GC_READ_BARRIER; + /** True if the garbage collector supports the bulk copy operation */ + public static final boolean WORD_BULK_COPY_SUPPORTED = !(NEEDS_WORD_ASTORE_BARRIER || NEEDS_WORD_ALOAD_BARRIER) || Selected.Constraints.get().wordBulkCopySupported(); + + /** + * Barrier for writes of words into fields of instances (ie putfield). + * + * @param ref the object which is the subject of the putfield + * @param value the new value for the field + * @param offset the offset of the field to be modified + * @param locationMetadata an int that encodes the source location being modified + */ + @Inline + @Entrypoint + public static void wordFieldWrite(Object ref, Word value, Offset offset, int locationMetadata) { + if (NEEDS_WORD_GC_WRITE_BARRIER) { + ObjectReference src = ObjectReference.fromObject(ref); + Selected.Mutator.get().wordWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); + } else if (VM.VerifyAssertions) + VM._assert(false); + } + + /** + * Barrier for writes of objects into arrays (ie astore). + * + * @param ref the array which is the subject of the astore + * @param index the index into the array where the new reference + * resides. The index is the "natural" index into the array, for + * example a[index]. + * @param value the value to be stored. + */ + @Inline + @Entrypoint + public static void wordArrayWrite(WordArray ref, int index, Word value) { + if (NEEDS_WORD_GC_WRITE_BARRIER) { + ObjectReference array = ObjectReference.fromObject(ref); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_WORD); + Selected.Mutator.get().wordWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT); + } else if (VM.VerifyAssertions) + VM._assert(false); + } + + /** + * Barrier for loads of objects from fields of instances (ie getfield). + * + * @param ref the object which is the subject of the getfield + * @param offset the offset of the field to be read + * @param locationMetadata an int that encodes the source location being read + * @return The value read from the field. + */ + @Inline + @Entrypoint + public static Word wordFieldRead(Object ref, Offset offset, int locationMetadata) { + if (NEEDS_WORD_GC_READ_BARRIER) { + ObjectReference src = ObjectReference.fromObject(ref); + return Selected.Mutator.get().wordRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); + } else if (VM.VerifyAssertions) + VM._assert(false); + return Word.zero(); + } + + /** + * Barrier for loads of objects from fields of arrays (ie aload). + * + * @param ref the array containing the reference. + * @param index the index into the array were the reference resides. + * @return the value read from the array + */ + @Inline + @Entrypoint + public static Word wordArrayRead(WordArray ref, int index) { + if (NEEDS_WORD_GC_READ_BARRIER) { + ObjectReference array = ObjectReference.fromObject(ref); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_WORD); + return Selected.Mutator.get().wordRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT); + } else if (VM.VerifyAssertions) + VM._assert(false); + return Word.zero(); + } + + /** + * Barrier for a bulk copy of words (i.e. in an array copy). + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + */ + @Inline + public static void wordBulkCopy(WordArray src, Offset srcOffset, WordArray dst, Offset dstOffset, int bytes) { + if (VM.VerifyAssertions) VM._assert(WORD_BULK_COPY_SUPPORTED); + + if (!Selected.Mutator.get().wordBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) { + Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes); + } + } + + + /** True if the garbage collector requires write barriers on address putfield, arraystore or modifycheck */ + private static final boolean NEEDS_ADDRESS_GC_WRITE_BARRIER = Selected.Constraints.get().needsAddressWriteBarrier(); + /** True if the VM requires write barriers on address putfield */ + public static final boolean NEEDS_ADDRESS_PUTFIELD_BARRIER = NEEDS_ADDRESS_GC_WRITE_BARRIER; + /** True if the VM requires write barriers on address arraystore */ + public static final boolean NEEDS_ADDRESS_ASTORE_BARRIER = NEEDS_ADDRESS_GC_WRITE_BARRIER; + /** True if the garbage collector requires read barriers on address getfield or arrayload */ + private static final boolean NEEDS_ADDRESS_GC_READ_BARRIER = Selected.Constraints.get().needsAddressReadBarrier(); + /** True if the VM requires read barriers on address getfield */ + public static final boolean NEEDS_ADDRESS_GETFIELD_BARRIER = NEEDS_ADDRESS_GC_READ_BARRIER; + /** True if the VM requires read barriers on address arrayload */ + public static final boolean NEEDS_ADDRESS_ALOAD_BARRIER = NEEDS_ADDRESS_GC_READ_BARRIER; + /** True if the garbage collector supports the bulk copy operation */ + public static final boolean ADDRESS_BULK_COPY_SUPPORTED = !(NEEDS_ADDRESS_ASTORE_BARRIER || NEEDS_ADDRESS_ALOAD_BARRIER) || Selected.Constraints.get().addressBulkCopySupported(); + + /** + * Barrier for writes of addresss into fields of instances (ie putfield). + * + * @param ref the object which is the subject of the putfield + * @param value the new value for the field + * @param offset the offset of the field to be modified + * @param locationMetadata an int that encodes the source location being modified + */ + @Inline + @Entrypoint + public static void addressFieldWrite(Object ref, Address value, Offset offset, int locationMetadata) { + if (NEEDS_ADDRESS_GC_WRITE_BARRIER) { + ObjectReference src = ObjectReference.fromObject(ref); + Selected.Mutator.get().addressWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); + } else if (VM.VerifyAssertions) + VM._assert(false); + } + + /** + * Barrier for writes of objects into arrays (ie astore). + * + * @param ref the array which is the subject of the astore + * @param index the index into the array where the new reference + * resides. The index is the "natural" index into the array, for + * example a[index]. + * @param value the value to be stored. + */ + @Inline + @Entrypoint + public static void addressArrayWrite(AddressArray ref, int index, Address value) { + if (NEEDS_ADDRESS_GC_WRITE_BARRIER) { + ObjectReference array = ObjectReference.fromObject(ref); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); + Selected.Mutator.get().addressWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT); + } else if (VM.VerifyAssertions) + VM._assert(false); + } + + /** + * Barrier for loads of objects from fields of instances (ie getfield). + * + * @param ref the object which is the subject of the getfield + * @param offset the offset of the field to be read + * @param locationMetadata an int that encodes the source location being read + * @return The value read from the field. + */ + @Inline + @Entrypoint + public static Address addressFieldRead(Object ref, Offset offset, int locationMetadata) { + if (NEEDS_ADDRESS_GC_READ_BARRIER) { + ObjectReference src = ObjectReference.fromObject(ref); + return Selected.Mutator.get().addressRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); + } else if (VM.VerifyAssertions) + VM._assert(false); + return Address.zero(); + } + + /** + * Barrier for loads of objects from fields of arrays (ie aload). + * + * @param ref the array containing the reference. + * @param index the index into the array were the reference resides. + * @return the value read from the array + */ + @Inline + @Entrypoint + public static Address addressArrayRead(AddressArray ref, int index) { + if (NEEDS_ADDRESS_GC_READ_BARRIER) { + ObjectReference array = ObjectReference.fromObject(ref); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); + return Selected.Mutator.get().addressRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT); + } else if (VM.VerifyAssertions) + VM._assert(false); + return Address.zero(); + } + + /** + * Barrier for a bulk copy of addresss (i.e. in an array copy). + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + */ + @Inline + public static void addressBulkCopy(AddressArray src, Offset srcOffset, AddressArray dst, Offset dstOffset, int bytes) { + if (VM.VerifyAssertions) VM._assert(ADDRESS_BULK_COPY_SUPPORTED); + + if (!Selected.Mutator.get().addressBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) { + Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes); + } + } + + /** True if the garbage collector requires write barriers on reference putfield, arraystore or modifycheck */ private static final boolean NEEDS_OBJECT_GC_WRITE_BARRIER = Selected.Constraints.get().needsObjectReferenceWriteBarrier(); /** True if the VM requires write barriers on reference putfield */ Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java 2009-12-02 23:15:12 UTC (rev 15797) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java 2009-12-02 23:27:01 UTC (rev 15798) @@ -763,6 +763,126 @@ } /** + * Write a word. Take appropriate write barrier actions.<p> + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new word + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void wordWrite(ObjectReference src, Address slot, Word value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + } + + /** + * Read a word. Take appropriate read barrier action, and + * return the value that was read.<p> This is a <b>substituting<b> + * barrier. The call to this barrier takes the place of a load.<p> + * + * @param src The object reference holding the field being read. + * @param slot The address of the slot being read. + * @param metaDataA A value that assists the host VM in creating a load + * @param metaDataB A value that assists the host VM in creating a load + * @param mode The context in which the load occurred + * @return The word that was read. + */ + @Inline + public Word wordRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) { + // Either: read barriers are used and this is overridden, or + // read barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return Word.zero(); + } + + /** + * A number of words are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller (always false in this case). + */ + public boolean wordBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + // Either: bulk copy is supported and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** + * Write an address. Take appropriate write barrier actions.<p> + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new address + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void addressWrite(ObjectReference src, Address slot, Address value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + } + + /** + * Read an address. Take appropriate read barrier action, and + * return the value that was read.<p> This is a <b>substituting<b> + * barrier. The call to this barrier takes the place of a load.<p> + * + * @param src The object reference holding the field being read. + * @param slot The address of the slot being read. + * @param metaDataA A value that assists the host VM in creating a load + * @param metaDataB A value that assists the host VM in creating a load + * @param mode The context in which the load occurred + * @return The address that was read. + */ + @Inline + public Address addressRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) { + // Either: read barriers are used and this is overridden, or + // read barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return Address.zero(); + } + + /** + * A number of addresses are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller (always false in this case). + */ + public boolean addressBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + // Either: bulk copy is supported and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** * Write an object reference. Take appropriate write barrier actions.<p> * * <b>By default do nothing, override if appropriate.</b> Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/PlanConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/PlanConstraints.java 2009-12-02 23:15:12 UTC (rev 15797) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/PlanConstraints.java 2009-12-02 23:27:01 UTC (rev 15798) @@ -22,13 +22,13 @@ * issues with ordering of static initialization. */ @Uninterruptible public abstract class PlanConstraints { - /** @return True of this Plan requires read barriers on java.lang.reference types. */ + /** @return True if this Plan requires read barriers on java.lang.reference types. */ public boolean needsJavaLangReferenceReadBarrier() { return false; } /** @return True if this Plan requires write barriers on booleans. */ public boolean needsBooleanWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on booleans. */ + /** @return True if this Plan requires read barriers on booleans. */ public boolean needsBooleanReadBarrier() { return false; } /** @return True if this Plan can perform bulk boolean arraycopy barriers. */ @@ -37,7 +37,7 @@ /** @return True if this Plan requires write barriers on bytes. */ public boolean needsByteWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on bytes. */ + /** @return True if this Plan requires read barriers on bytes. */ public boolean needsByteReadBarrier() { return false; } /** @return True if this Plan can perform bulk byte arraycopy barriers. */ @@ -46,7 +46,7 @@ /** @return True if this Plan requires write barriers on chars. */ public boolean needsCharWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on chars. */ + /** @return True if this Plan requires read barriers on chars. */ public boolean needsCharReadBarrier() { return false; } /** @return True if this Plan can perform bulk char arraycopy barriers. */ @@ -55,7 +55,7 @@ /** @return True if this Plan requires write barriers on shorts. */ public boolean needsShortWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on shorts. */ + /** @return True if this Plan requires read barriers on shorts. */ public boolean needsShortReadBarrier() { return false; } /** @return True if this Plan can perform bulk short arraycopy barriers. */ @@ -64,7 +64,7 @@ /** @return True if this Plan requires write barriers on ints. */ public boolean needsIntWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on ints. */ + /** @return True if this Plan requires read barriers on ints. */ public boolean needsIntReadBarrier() { return false; } /** @return True if this Plan can perform bulk int arraycopy barriers. */ @@ -73,7 +73,7 @@ /** @return True if this Plan requires write barriers on longs. */ public boolean needsLongWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on longs. */ + /** @return True if this Plan requires read barriers on longs. */ public boolean needsLongReadBarrier() { return false; } /** @return True if this Plan can perform bulk long arraycopy barriers. */ @@ -82,7 +82,7 @@ /** @return True if this Plan requires write barriers on floats. */ public boolean needsFloatWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on floats. */ + /** @return True if this Plan requires read barriers on floats. */ public boolean needsFloatReadBarrier() { return false; } /** @return True if this Plan can perform bulk float arraycopy barriers. */ @@ -91,16 +91,34 @@ /** @return True if this Plan requires write barriers on doubles. */ public boolean needsDoubleWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on doubles. */ + /** @return True if this Plan requires read barriers on doubles. */ public boolean needsDoubleReadBarrier() { return false; } /** @return True if this Plan can perform bulk double arraycopy barriers. */ public boolean doubleBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on words. */ + public boolean needsWordWriteBarrier() { return false; } + + /** @return True if this Plan requires read barriers on words. */ + public boolean needsWordReadBarrier() { return false; } + + /** @return True if this Plan can perform bulk word arraycopy barriers. */ + public boolean wordBulkCopySupported() { return false; } + + /** @return True if this Plan requires write barriers on addresss. */ + public boolean needsAddressWriteBarrier() { return false; } + + /** @return True if this Plan requires read barriers on addresss. */ + public boolean needsAddressReadBarrier() { return false; } + + /** @return True if this Plan can perform bulk address arraycopy barriers. */ + public boolean addressBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on object references. */ public boolean needsObjectReferenceWriteBarrier() { return false; } - /** @return True of this Plan requires read barriers on object references. */ + /** @return True if this Plan requires read barriers on object references. */ public boolean needsObjectReferenceReadBarrier() { return false; } /** @return True if this Plan requires non-heap write barriers on object references. */ Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java 2009-12-02 23:15:12 UTC (rev 15797) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java 2009-12-02 23:27:01 UTC (rev 15798) @@ -18,9 +18,12 @@ import org.vmmagic.pragma.Entrypoint; import org.vmmagic.pragma.Inline; import org.vmmagic.pragma.Uninterruptible; +import org.vmmagic.unboxed.Address; +import org.vmmagic.unboxed.AddressArray; import org.vmmagic.unboxed.ObjectReference; import org.vmmagic.unboxed.Offset; import org.vmmagic.unboxed.Word; +import org.vmmagic.unboxed.WordArray; @Uninterruptible public class Barriers implements org.mmtk.utility.Constants { @@ -912,10 +915,10 @@ * Barrier for a bulk copy of doubles (i.e. in an array copy). * * @param src The source array - * @param srcOffset The starting source offset + * @param srcIdx The starting source index * @param dst The destination array - * @param dstOffset The starting destination offset - * @param bytes The number of bytes to be copied + * @param dstIdx The starting source index + * @param len The number of array elements to be copied */ @Inline public static void doubleBulkCopy(double[] src, Offset srcOffset, double[] dst, Offset dstOffset, int bytes) { @@ -927,6 +930,226 @@ } + /** True if the garbage collector requires write barriers on word putfield, arraystore or modifycheck */ + private static final boolean NEEDS_WORD_GC_WRITE_BARRIER = Selected.Constraints.get().needsWordWriteBarrier(); + /** True if the VM requires write barriers on word putfield */ + public static final boolean NEEDS_WORD_PUTFIELD_BARRIER = NEEDS_WORD_GC_WRITE_BARRIER; + /** True if the VM requires write barriers on word arraystore */ + public static final boolean NEEDS_WORD_ASTORE_BARRIER = NEEDS_WORD_GC_WRITE_BARRIER; + /** True if the garbage collector requires read barriers on word getfield or arrayload */ + private static final boolean NEEDS_WORD_GC_READ_BARRIER = Selected.Constraints.get().needsWordReadBarrier(); + /** True if the VM requires read barriers on word getfield */ + public static final boolean NEEDS_WORD_GETFIELD_BARRIER = NEEDS_WORD_GC_READ_BARRIER; + /** True if the VM requires read barriers on word arrayload */ + public static final boolean NEEDS_WORD_ALOAD_BARRIER = NEEDS_WORD_GC_READ_BARRIER; + /** True if the garbage collector supports the bulk copy operation */ + public static final boolean WORD_BULK_COPY_SUPPORTED = !(NEEDS_WORD_ASTORE_BARRIER || NEEDS_WORD_ALOAD_BARRIER) || Selected.Constraints.get().wordBulkCopySupported(); + + /** + * Barrier for writes of words into fields of instances (ie putfield). + * + * @param ref the object which is the subject of the putfield + * @param value the new value for the field + * @param offset the offset of the field to be modified + * @param locationMetadata an int that encodes the source location being modified + */ + @Inline + @Entrypoint + public static void wordFieldWrite(Object ref, Word value, Offset offset, int locationMetadata) { + if (NEEDS_WORD_GC_WRITE_BARRIER) { + ObjectReference src = ObjectReference.fromObject(ref); + Selected.Mutator.get().wordWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); + } else if (VM.VerifyAssertions) + VM._assert(false); + } + + /** + * Barrier for writes of objects into arrays (ie astore). + * + * @param ref the array which is the subject of the astore + * @param index the index into the array where the new reference + * resides. The index is the "natural" index into the array, for + * example a[index]. + * @param value the value to be stored. + */ + @Inline + @Entrypoint + public static void wordArrayWrite(WordArray ref, int index, Word value) { + if (NEEDS_WORD_GC_WRITE_BARRIER) { + ObjectReference array = ObjectReference.fromObject(ref); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_WORD); + Selected.Mutator.get().wordWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT); + } else if (VM.VerifyAssertions) + VM._assert(false); + } + + /** + * Barrier for loads of objects from fields of instances (ie getfield). + * + * @param ref the object which is the subject of the getfield + * @param offset the offset of the field to be read + * @param locationMetadata an int that encodes the source location being read + * @return The value read from the field. + */ + @Inline + @Entrypoint + public static Word wordFieldRead(Object ref, Offset offset, int locationMetadata) { + if (NEEDS_WORD_GC_READ_BARRIER) { + ObjectReference src = ObjectReference.fromObject(ref); + return Selected.Mutator.get().wordRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); + } else if (VM.VerifyAssertions) + VM._assert(false); + return Word.zero(); + } + + /** + * Barrier for loads of objects from fields of arrays (ie aload). + * + * @param ref the array containing the reference. + * @param index the index into the array were the reference resides. + * @return the value read from the array + */ + @Inline + @Entrypoint + public static Word wordArrayRead(WordArray ref, int index) { + if (NEEDS_WORD_GC_READ_BARRIER) { + ObjectReference array = ObjectReference.fromObject(ref); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_WORD); + return Selected.Mutator.get().wordRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT); + } else if (VM.VerifyAssertions) + VM._assert(false); + return Word.zero(); + } + + /** + * Barrier for a bulk copy of words (i.e. in an array copy). + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + */ + @Inline + public static void wordBulkCopy(WordArray src, Offset srcOffset, WordArray dst, Offset dstOffset, int bytes) { + if (VM.VerifyAssertions) VM._assert(WORD_BULK_COPY_SUPPORTED); + + if (!Selected.Mutator.get().wordBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) { + Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes); + } + } + + + /** True if the garbage collector requires write barriers on address putfield, arraystore or modifycheck */ + private static final boolean NEEDS_ADDRESS_GC_WRITE_BARRIER = Selected.Constraints.get().needsAddressWriteBarrier(); + /** True if the VM requires write barriers on address putfield */ + public static final boolean NEEDS_ADDRESS_PUTFIELD_BARRIER = NEEDS_ADDRESS_GC_WRITE_BARRIER; + /** True if the VM requires write barriers on address arraystore */ + public static final boolean NEEDS_ADDRESS_ASTORE_BARRIER = NEEDS_ADDRESS_GC_WRITE_BARRIER; + /** True if the garbage collector requires read barriers on address getfield or arrayload */ + private static final boolean NEEDS_ADDRESS_GC_READ_BARRIER = Selected.Constraints.get().needsAddressReadBarrier(); + /** True if the VM requires read barriers on address getfield */ + public static final boolean NEEDS_ADDRESS_GETFIELD_BARRIER = NEEDS_ADDRESS_GC_READ_BARRIER; + /** True if the VM requires read barriers on address arrayload */ + public static final boolean NEEDS_ADDRESS_ALOAD_BARRIER = NEEDS_ADDRESS_GC_READ_BARRIER; + /** True if the garbage collector supports the bulk copy operation */ + public static final boolean ADDRESS_BULK_COPY_SUPPORTED = !(NEEDS_ADDRESS_ASTORE_BARRIER || NEEDS_ADDRESS_ALOAD_BARRIER) || Selected.Constraints.get().addressBulkCopySupported(); + + /** + * Barrier for writes of addresss into fields of instances (ie putfield). + * + * @param ref the object which is the subject of the putfield + * @param value the new value for the field + * @param offset the offset of the field to be modified + * @param locationMetadata an int that encodes the source location being modified + */ + @Inline + @Entrypoint + public static void addressFieldWrite(Object ref, Address value, Offset offset, int locationMetadata) { + if (NEEDS_ADDRESS_GC_WRITE_BARRIER) { + ObjectReference src = ObjectReference.fromObject(ref); + Selected.Mutator.get().addressWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); + } else if (VM.VerifyAssertions) + VM._assert(false); + } + + /** + * Barrier for writes of objects into arrays (ie astore). + * + * @param ref the array which is the subject of the astore + * @param index the index into the array where the new reference + * resides. The index is the "natural" index into the array, for + * example a[index]. + * @param value the value to be stored. + */ + @Inline + @Entrypoint + public static void addressArrayWrite(AddressArray ref, int index, Address value) { + if (NEEDS_ADDRESS_GC_WRITE_BARRIER) { + ObjectReference array = ObjectReference.fromObject(ref); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); + Selected.Mutator.get().addressWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT); + } else if (VM.VerifyAssertions) + VM._assert(false); + } + + /** + * Barrier for loads of objects from fields of instances (ie getfield). + * + * @param ref the object which is the subject of the getfield + * @param offset the offset of the field to be read + * @param locationMetadata an int that encodes the source location being read + * @return The value read from the field. + */ + @Inline + @Entrypoint + public static Address addressFieldRead(Object ref, Offset offset, int locationMetadata) { + if (NEEDS_ADDRESS_GC_READ_BARRIER) { + ObjectReference src = ObjectReference.fromObject(ref); + return Selected.Mutator.get().addressRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD); + } else if (VM.VerifyAssertions) + VM._assert(false); + return Address.zero(); + } + + /** + * Barrier for loads of objects from fields of arrays (ie aload). + * + * @param ref the array containing the reference. + * @param index the index into the array were the reference resides. + * @return the value read from the array + */ + @Inline + @Entrypoint + public static Address addressArrayRead(AddressArray ref, int index) { + if (NEEDS_ADDRESS_GC_READ_BARRIER) { + ObjectReference array = ObjectReference.fromObject(ref); + Offset offset = Offset.fromIntZeroExtend(index << MemoryManagerConstants.LOG_BYTES_IN_ADDRESS); + return Selected.Mutator.get().addressRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT); + } else if (VM.VerifyAssertions) + VM._assert(false); + return Address.zero(); + } + + /** + * Barrier for a bulk copy of addresss (i.e. in an array copy). + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + */ + @Inline + public static void addressBulkCopy(AddressArray src, Offset srcOffset, AddressArray dst, Offset dstOffset, int bytes) { + if (VM.VerifyAssertions) VM._assert(ADDRESS_BULK_COPY_SUPPORTED); + + if (!Selected.Mutator.get().addressBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) { + Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes); + } + } + + /** True if the garbage collector requires write barriers on reference putfield, arraystore or modifycheck */ private static final boolean NEEDS_OBJECT_GC_WRITE_BARRIER = Selected.Constraints.get().needsObjectReferenceWriteBarrier(); /** True if the VM requires write barriers on reference putfield */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2009-12-02 23:27:49
|
Revision: 15799 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15799&view=rev Author: dframpton-oss Date: 2009-12-02 23:27:42 +0000 (Wed, 02 Dec 2009) Log Message: ----------- Merge to r15796 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/RunBootImage.C rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/RunBootImage.C Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/RunBootImage.C =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/RunBootImage.C 2009-12-02 23:27:01 UTC (rev 15798) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/RunBootImage.C 2009-12-02 23:27:42 UTC (rev 15799) @@ -406,7 +406,7 @@ int main(int argc, const char **argv) { - Me = strrchr(*argv, '/') + 1; + Me = strrchr((char *)*argv, '/') + 1; ++argv, --argc; initialHeapSize = heap_default_initial_size; maximumHeapSize = heap_default_maximum_size; Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/RunBootImage.C =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/RunBootImage.C 2009-12-02 23:27:01 UTC (rev 15798) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/RunBootImage.C 2009-12-02 23:27:42 UTC (rev 15799) @@ -406,7 +406,7 @@ int main(int argc, const char **argv) { - Me = strrchr(*argv, '/') + 1; + Me = strrchr((char *)*argv, '/') + 1; ++argv, --argc; initialHeapSize = heap_default_initial_size; maximumHeapSize = heap_default_maximum_size; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:10:47
|
Revision: 15813 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15813&view=rev Author: dframpton-oss Date: 2010-03-02 04:10:41 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15800 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java 2010-02-18 00:10:17 UTC (rev 15812) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java 2010-03-02 04:10:41 UTC (rev 15813) @@ -416,14 +416,30 @@ /* dataEnd = zero represents the current region. */ Address currentLimit = (dataEnd.isZero() ? cursor : dataEnd); - ObjectReference current = - VM.objectModel.getObjectFromStartAddress(start.plus(DATA_START_OFFSET)); + if (currentLimit.EQ(start.plus(DATA_END_OFFSET).plus(BYTES_IN_ADDRESS))) { + /* Empty region, so we can not call getObjectFromStartAddress() */ + return; + } - while (VM.objectModel.refToAddress(current).LT(currentLimit) && !current.isNull()) { - ObjectReference next = VM.objectModel.getNextObject(current); - scanner.scan(current); // Scan this object. + ObjectReference current = VM.objectModel.getObjectFromStartAddress(start.plus(DATA_START_OFFSET)); + + /* Loop through each object up to the limit */ + do { + /* Read end address first, as scan may be destructive */ + Address currentObjectEnd = VM.objectModel.getObjectEndAddress(current); + scanner.scan(current); + if (currentObjectEnd.GE(currentLimit)) { + /* We have scanned the last object */ + break; + } + /* Find the next object from the start address (dealing with alignment gaps, etc.) */ + ObjectReference next = VM.objectModel.getObjectFromStartAddress(currentObjectEnd); + if (VM.VERIFY_ASSERTIONS) { + /* Must be monotonically increasing */ + VM.assertions._assert(next.toAddress().GT(current.toAddress())); + } current = next; - } + } while (true); } /** Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java 2010-02-18 00:10:17 UTC (rev 15812) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java 2010-03-02 04:10:41 UTC (rev 15813) @@ -416,14 +416,30 @@ /* dataEnd = zero represents the current region. */ Address currentLimit = (dataEnd.isZero() ? cursor : dataEnd); - ObjectReference current = - VM.objectModel.getObjectFromStartAddress(start.plus(DATA_START_OFFSET)); + if (currentLimit.EQ(start.plus(DATA_END_OFFSET).plus(BYTES_IN_ADDRESS))) { + /* Empty region, so we can not call getObjectFromStartAddress() */ + return; + } - while (VM.objectModel.refToAddress(current).LT(currentLimit) && !current.isNull()) { - ObjectReference next = VM.objectModel.getNextObject(current); - scanner.scan(current); // Scan this object. + ObjectReference current = VM.objectModel.getObjectFromStartAddress(start.plus(DATA_START_OFFSET)); + + /* Loop through each object up to the limit */ + do { + /* Read end address first, as scan may be destructive */ + Address currentObjectEnd = VM.objectModel.getObjectEndAddress(current); + scanner.scan(current); + if (currentObjectEnd.GE(currentLimit)) { + /* We have scanned the last object */ + break; + } + /* Find the next object from the start address (dealing with alignment gaps, etc.) */ + ObjectReference next = VM.objectModel.getObjectFromStartAddress(currentObjectEnd); + if (VM.VERIFY_ASSERTIONS) { + /* Must be monotonically increasing */ + VM.assertions._assert(next.toAddress().GT(current.toAddress())); + } current = next; - } + } while (true); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:11:36
|
Revision: 15814 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15814&view=rev Author: dframpton-oss Date: 2010-03-02 04:11:30 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15801 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java 2010-03-02 04:10:41 UTC (rev 15813) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java 2010-03-02 04:11:30 UTC (rev 15814) @@ -71,7 +71,5 @@ return VMCommonLibrarySupport.getenv(envarName); } - static List<?> environ() { - throw new UnimplementedError(); - } + static native List<?> environ(); } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java 2010-03-02 04:10:41 UTC (rev 15813) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java 2010-03-02 04:11:30 UTC (rev 15814) @@ -71,7 +71,5 @@ return VMCommonLibrarySupport.getenv(envarName); } - static List<?> environ() { - throw new UnimplementedError(); - } + static native List<?> environ(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:12:14
|
Revision: 15815 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15815&view=rev Author: dframpton-oss Date: 2010-03-02 04:12:08 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15802 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java 2010-03-02 04:11:30 UTC (rev 15814) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java 2010-03-02 04:12:08 UTC (rev 15815) @@ -17,7 +17,6 @@ import java.util.List; import org.jikesrvm.VM; -import org.jikesrvm.UnimplementedError; import org.jikesrvm.objectmodel.ObjectModel; import org.jikesrvm.runtime.Time; Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java 2010-03-02 04:11:30 UTC (rev 15814) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java 2010-03-02 04:12:08 UTC (rev 15815) @@ -17,7 +17,6 @@ import java.util.List; import org.jikesrvm.VM; -import org.jikesrvm.UnimplementedError; import org.jikesrvm.objectmodel.ObjectModel; import org.jikesrvm.runtime.Time; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:13:05
|
Revision: 15816 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15816&view=rev Author: dframpton-oss Date: 2010-03-02 04:12:58 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15803 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/classpath.xml rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/classpath.xml Added Paths: ----------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/patches/classpath-web.RVM-878.patch rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/patches/classpath-web.RVM-878.patch Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/classpath.xml =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/classpath.xml 2010-03-02 04:12:08 UTC (rev 15815) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/classpath.xml 2010-03-02 04:12:58 UTC (rev 15816) @@ -173,6 +173,8 @@ dir="${classpath.package.dir}/classpath/" strip="0"/> <patch patchfile="${components.patch.dir}/classpath-web.RVM-732.patch" dir="${classpath.package.dir}/classpath/" strip="0"/> + <patch patchfile="${components.patch.dir}/classpath-web.RVM-878.patch" + dir="${classpath.package.dir}/classpath/" strip="0"/> </target> <target name="patch" depends="patch-classpath-web,patch-classpath-cvs"/> Added: rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/patches/classpath-web.RVM-878.patch =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/patches/classpath-web.RVM-878.patch (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/patches/classpath-web.RVM-878.patch 2010-03-02 04:12:58 UTC (rev 15816) @@ -0,0 +1,16 @@ +--- java/awt/Toolkit.java 2009-12-17 22:19:41.000000000 +1100 ++++ java/awt/Toolkit.java 2009-12-17 22:21:28.000000000 +1100 +@@ -567,6 +567,13 @@ + if (toolkit != null) + return toolkit; + ++ // Check for the headless property. ++ if (GraphicsEnvironment.isHeadless()) ++ { ++ toolkit = new HeadlessToolkit(); ++ return toolkit; ++ } ++ + String toolkit_name = SystemProperties.getProperty("awt.toolkit", + default_toolkit_name); + try Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/classpath.xml =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/classpath.xml 2010-03-02 04:12:08 UTC (rev 15815) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/classpath.xml 2010-03-02 04:12:58 UTC (rev 15816) @@ -173,6 +173,8 @@ dir="${classpath.package.dir}/classpath/" strip="0"/> <patch patchfile="${components.patch.dir}/classpath-web.RVM-732.patch" dir="${classpath.package.dir}/classpath/" strip="0"/> + <patch patchfile="${components.patch.dir}/classpath-web.RVM-878.patch" + dir="${classpath.package.dir}/classpath/" strip="0"/> </target> <target name="patch" depends="patch-classpath-web,patch-classpath-cvs"/> Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/patches/classpath-web.RVM-878.patch =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/patches/classpath-web.RVM-878.patch (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/patches/classpath-web.RVM-878.patch 2010-03-02 04:12:58 UTC (rev 15816) @@ -0,0 +1,16 @@ +--- java/awt/Toolkit.java 2009-12-17 22:19:41.000000000 +1100 ++++ java/awt/Toolkit.java 2009-12-17 22:21:28.000000000 +1100 +@@ -567,6 +567,13 @@ + if (toolkit != null) + return toolkit; + ++ // Check for the headless property. ++ if (GraphicsEnvironment.isHeadless()) ++ { ++ toolkit = new HeadlessToolkit(); ++ return toolkit; ++ } ++ + String toolkit_name = SystemProperties.getProperty("awt.toolkit", + default_toolkit_name); + try This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:13:54
|
Revision: 15817 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15817&view=rev Author: dframpton-oss Date: 2010-03-02 04:13:48 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15804 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java 2010-03-02 04:12:58 UTC (rev 15816) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java 2010-03-02 04:13:48 UTC (rev 15817) @@ -15,6 +15,7 @@ import org.mmtk.plan.StopTheWorldConstraints; import org.mmtk.policy.MarkCompactSpace; +import org.mmtk.policy.MarkCompactLocal; import org.vmmagic.pragma.*; @@ -33,6 +34,8 @@ @Override public boolean needsLinearScan() { return true; } @Override + public int maxNonLOSDefaultAllocBytes() { return MarkCompactLocal.MINIMUM_DATA_SIZE; } + @Override public int gcHeaderBits() { return MarkCompactSpace.LOCAL_GC_BITS_REQUIRED; } @Override public int gcHeaderWords() { return MarkCompactSpace.GC_HEADER_WORDS_REQUIRED; } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactLocal.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactLocal.java 2010-03-02 04:12:58 UTC (rev 15816) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactLocal.java 2010-03-02 04:13:48 UTC (rev 15817) @@ -53,59 +53,60 @@ Address start = initialRegion; Address allocStart = initialRegion; Address allocEnd = initialRegion.plus(REGION_LIMIT_OFFSET).loadAddress(); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocEnd.GT(allocStart)); Address allocCursor = allocStart.plus(DATA_START_OFFSET); /* Keep track of which regions are being used */ int oldPages = 0; - int newPages = Conversions.bytesToPages(allocEnd.diff(allocStart).plus(BYTES_IN_ADDRESS)); + int newPages = Conversions.bytesToPages(allocEnd.diff(allocStart)); while (!start.isZero()) { /* Get the end of this region */ Address end = start.plus(REGION_LIMIT_OFFSET).loadAddress(); Address dataEnd = start.plus(DATA_END_OFFSET).loadAddress(); Address nextRegion = start.plus(NEXT_REGION_OFFSET).loadAddress(); - oldPages += Conversions.bytesToPages(end.diff(start).plus(BYTES_IN_ADDRESS)); + oldPages += Conversions.bytesToPages(end.diff(start)); /* dataEnd = zero represents the current region. */ Address currentLimit = (dataEnd.isZero() ? cursor : dataEnd); - ObjectReference current = - VM.objectModel.getObjectFromStartAddress(start.plus(DATA_START_OFFSET)); + Address lastEnd = start.plus(DATA_START_OFFSET); + while (lastEnd.LT(currentLimit)) { + ObjectReference current = VM.objectModel.getObjectFromStartAddress(lastEnd); + lastEnd = VM.objectModel.getObjectEndAddress(current); - while (VM.objectModel.refToAddress(current).LT(currentLimit) && !current.isNull()) { - ObjectReference next = VM.objectModel.getNextObject(current); - ObjectReference copyTo = MarkCompactSpace.getForwardingPointer(current); if (!copyTo.isNull() && Space.isInSpace(MC.MARK_COMPACT, copyTo)) { if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(!MarkCompactSpace.isMarked(current)); // To be copied. - if (copyTo.toAddress().GT(allocEnd) || copyTo.toAddress().LT(allocStart)) { + if (copyTo.toAddress().GE(allocEnd) || copyTo.toAddress().LT(allocStart)) { // changed regions. + VM.memory.zero(allocCursor, allocEnd.diff(allocCursor).toWord().toExtent()); - VM.memory.zero(allocCursor, allocEnd.diff(allocCursor).toWord().toExtent().plus(BYTES_IN_ADDRESS)); - allocStart.store(allocCursor, DATA_END_OFFSET); allocStart = allocStart.plus(NEXT_REGION_OFFSET).loadAddress(); allocEnd = allocStart.plus(REGION_LIMIT_OFFSET).loadAddress(); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocEnd.GT(allocStart)); allocCursor = allocStart.plus(DATA_START_OFFSET); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocCursor.LE(allocEnd)); - newPages += Conversions.bytesToPages(allocEnd.diff(allocStart).plus(BYTES_IN_ADDRESS)); + newPages += Conversions.bytesToPages(allocEnd.diff(allocStart)); if (VM.VERIFY_ASSERTIONS) { VM.assertions._assert(allocCursor.LT(allocEnd) && allocCursor.GE(allocStart)); } } allocCursor = VM.objectModel.copyTo(current, copyTo, allocCursor); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocCursor.LE(allocEnd)); MarkCompactSpace.setForwardingPointer(copyTo, ObjectReference.nullReference()); } - current = next; } if (dataEnd.isZero()) { break; } start = nextRegion; } - Extent zeroBytes = allocEnd.diff(allocCursor).toWord().toExtent().plus(BYTES_IN_ADDRESS); + Extent zeroBytes = allocEnd.diff(allocCursor).toWord().toExtent(); VM.memory.zero(allocCursor, zeroBytes); allocStart.store(Address.zero(), DATA_END_OFFSET); @@ -122,7 +123,8 @@ allocStart.store(Address.zero(), DATA_END_OFFSET); if (VM.VERIFY_ASSERTIONS) { Address low = allocStart.plus(DATA_START_OFFSET); - Extent size = allocStart.loadAddress(REGION_LIMIT_OFFSET).diff(allocStart).toWord().toExtent().minus(2 * BYTES_IN_ADDRESS); + Address high = allocStart.loadAddress(REGION_LIMIT_OFFSET); + Extent size = high.diff(low).toWord().toExtent(); VM.memory.zero(low, size); } allocStart = allocStart.loadAddress(NEXT_REGION_OFFSET); @@ -150,15 +152,14 @@ /* dataEnd = zero represents the current region. */ Address currentLimit = (dataEnd.isZero() ? cursor : dataEnd); - ObjectReference current = - VM.objectModel.getObjectFromStartAddress(start.plus(DATA_START_OFFSET)); + Address lastEnd = start.plus(DATA_START_OFFSET); - while (VM.objectModel.refToAddress(current).LT(currentLimit) && !current.isNull()) { - ObjectReference next = VM.objectModel.getNextObject(current); + while (lastEnd.LT(currentLimit)) { + ObjectReference current = VM.objectModel.getObjectFromStartAddress(lastEnd); + lastEnd = VM.objectModel.getObjectEndAddress(current); if (MarkCompactSpace.toBeCompacted(current)) { - if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(MarkCompactSpace.getForwardingPointer(current).isNull()); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(MarkCompactSpace.getForwardingPointer(current).isNull()); // Fake - allocate it. int size = VM.objectModel.getSizeWhenCopied(current); @@ -168,7 +169,7 @@ boolean sameRegion = allocStart.EQ(start); - if (!sameRegion && allocCursor.plus(size).GT(allocLimit)) { + if (!sameRegion && allocCursor.plus(size).GE(allocLimit)) { allocStart = allocStart.plus(NEXT_REGION_OFFSET).loadAddress(); allocDataEnd = allocStart.plus(DATA_END_OFFSET).loadAddress(); allocLimit = (allocDataEnd.isZero() ? cursor : allocDataEnd); @@ -183,8 +184,8 @@ MarkCompactSpace.setForwardingPointer(current, target); allocCursor = allocCursor.plus(size); } + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocCursor.LE(allocLimit)); } - current = next; } if (dataEnd.isZero()) { break; Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java 2010-03-02 04:12:58 UTC (rev 15816) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java 2010-03-02 04:13:48 UTC (rev 15817) @@ -79,6 +79,8 @@ Address.zero().plus(DATA_END_OFFSET.plus(BYTES_IN_ADDRESS)), MAX_ALIGNMENT, 0).toWord().toOffset(); + public static final int MINIMUM_DATA_SIZE = (1 << LOG_BLOCK_SIZE) - MAX_DATA_START_OFFSET.toInt(); + /**************************************************************************** * * Instance variables Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java 2010-03-02 04:12:58 UTC (rev 15816) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java 2010-03-02 04:13:48 UTC (rev 15817) @@ -15,6 +15,7 @@ import org.mmtk.plan.StopTheWorldConstraints; import org.mmtk.policy.MarkCompactSpace; +import org.mmtk.policy.MarkCompactLocal; import org.vmmagic.pragma.*; @@ -33,6 +34,8 @@ @Override public boolean needsLinearScan() { return true; } @Override + public int maxNonLOSDefaultAllocBytes() { return MarkCompactLocal.MINIMUM_DATA_SIZE; } + @Override public int gcHeaderBits() { return MarkCompactSpace.LOCAL_GC_BITS_REQUIRED; } @Override public int gcHeaderWords() { return MarkCompactSpace.GC_HEADER_WORDS_REQUIRED; } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactLocal.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactLocal.java 2010-03-02 04:12:58 UTC (rev 15816) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactLocal.java 2010-03-02 04:13:48 UTC (rev 15817) @@ -53,59 +53,60 @@ Address start = initialRegion; Address allocStart = initialRegion; Address allocEnd = initialRegion.plus(REGION_LIMIT_OFFSET).loadAddress(); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocEnd.GT(allocStart)); Address allocCursor = allocStart.plus(DATA_START_OFFSET); /* Keep track of which regions are being used */ int oldPages = 0; - int newPages = Conversions.bytesToPages(allocEnd.diff(allocStart).plus(BYTES_IN_ADDRESS)); + int newPages = Conversions.bytesToPages(allocEnd.diff(allocStart)); while (!start.isZero()) { /* Get the end of this region */ Address end = start.plus(REGION_LIMIT_OFFSET).loadAddress(); Address dataEnd = start.plus(DATA_END_OFFSET).loadAddress(); Address nextRegion = start.plus(NEXT_REGION_OFFSET).loadAddress(); - oldPages += Conversions.bytesToPages(end.diff(start).plus(BYTES_IN_ADDRESS)); + oldPages += Conversions.bytesToPages(end.diff(start)); /* dataEnd = zero represents the current region. */ Address currentLimit = (dataEnd.isZero() ? cursor : dataEnd); - ObjectReference current = - VM.objectModel.getObjectFromStartAddress(start.plus(DATA_START_OFFSET)); + Address lastEnd = start.plus(DATA_START_OFFSET); + while (lastEnd.LT(currentLimit)) { + ObjectReference current = VM.objectModel.getObjectFromStartAddress(lastEnd); + lastEnd = VM.objectModel.getObjectEndAddress(current); - while (VM.objectModel.refToAddress(current).LT(currentLimit) && !current.isNull()) { - ObjectReference next = VM.objectModel.getNextObject(current); - ObjectReference copyTo = MarkCompactSpace.getForwardingPointer(current); if (!copyTo.isNull() && Space.isInSpace(MC.MARK_COMPACT, copyTo)) { if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(!MarkCompactSpace.isMarked(current)); // To be copied. - if (copyTo.toAddress().GT(allocEnd) || copyTo.toAddress().LT(allocStart)) { + if (copyTo.toAddress().GE(allocEnd) || copyTo.toAddress().LT(allocStart)) { // changed regions. + VM.memory.zero(allocCursor, allocEnd.diff(allocCursor).toWord().toExtent()); - VM.memory.zero(allocCursor, allocEnd.diff(allocCursor).toWord().toExtent().plus(BYTES_IN_ADDRESS)); - allocStart.store(allocCursor, DATA_END_OFFSET); allocStart = allocStart.plus(NEXT_REGION_OFFSET).loadAddress(); allocEnd = allocStart.plus(REGION_LIMIT_OFFSET).loadAddress(); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocEnd.GT(allocStart)); allocCursor = allocStart.plus(DATA_START_OFFSET); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocCursor.LE(allocEnd)); - newPages += Conversions.bytesToPages(allocEnd.diff(allocStart).plus(BYTES_IN_ADDRESS)); + newPages += Conversions.bytesToPages(allocEnd.diff(allocStart)); if (VM.VERIFY_ASSERTIONS) { VM.assertions._assert(allocCursor.LT(allocEnd) && allocCursor.GE(allocStart)); } } allocCursor = VM.objectModel.copyTo(current, copyTo, allocCursor); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocCursor.LE(allocEnd)); MarkCompactSpace.setForwardingPointer(copyTo, ObjectReference.nullReference()); } - current = next; } if (dataEnd.isZero()) { break; } start = nextRegion; } - Extent zeroBytes = allocEnd.diff(allocCursor).toWord().toExtent().plus(BYTES_IN_ADDRESS); + Extent zeroBytes = allocEnd.diff(allocCursor).toWord().toExtent(); VM.memory.zero(allocCursor, zeroBytes); allocStart.store(Address.zero(), DATA_END_OFFSET); @@ -122,7 +123,8 @@ allocStart.store(Address.zero(), DATA_END_OFFSET); if (VM.VERIFY_ASSERTIONS) { Address low = allocStart.plus(DATA_START_OFFSET); - Extent size = allocStart.loadAddress(REGION_LIMIT_OFFSET).diff(allocStart).toWord().toExtent().minus(2 * BYTES_IN_ADDRESS); + Address high = allocStart.loadAddress(REGION_LIMIT_OFFSET); + Extent size = high.diff(low).toWord().toExtent(); VM.memory.zero(low, size); } allocStart = allocStart.loadAddress(NEXT_REGION_OFFSET); @@ -150,15 +152,14 @@ /* dataEnd = zero represents the current region. */ Address currentLimit = (dataEnd.isZero() ? cursor : dataEnd); - ObjectReference current = - VM.objectModel.getObjectFromStartAddress(start.plus(DATA_START_OFFSET)); + Address lastEnd = start.plus(DATA_START_OFFSET); - while (VM.objectModel.refToAddress(current).LT(currentLimit) && !current.isNull()) { - ObjectReference next = VM.objectModel.getNextObject(current); + while (lastEnd.LT(currentLimit)) { + ObjectReference current = VM.objectModel.getObjectFromStartAddress(lastEnd); + lastEnd = VM.objectModel.getObjectEndAddress(current); if (MarkCompactSpace.toBeCompacted(current)) { - if (VM.VERIFY_ASSERTIONS) - VM.assertions._assert(MarkCompactSpace.getForwardingPointer(current).isNull()); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(MarkCompactSpace.getForwardingPointer(current).isNull()); // Fake - allocate it. int size = VM.objectModel.getSizeWhenCopied(current); @@ -168,7 +169,7 @@ boolean sameRegion = allocStart.EQ(start); - if (!sameRegion && allocCursor.plus(size).GT(allocLimit)) { + if (!sameRegion && allocCursor.plus(size).GE(allocLimit)) { allocStart = allocStart.plus(NEXT_REGION_OFFSET).loadAddress(); allocDataEnd = allocStart.plus(DATA_END_OFFSET).loadAddress(); allocLimit = (allocDataEnd.isZero() ? cursor : allocDataEnd); @@ -183,8 +184,8 @@ MarkCompactSpace.setForwardingPointer(current, target); allocCursor = allocCursor.plus(size); } + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(allocCursor.LE(allocLimit)); } - current = next; } if (dataEnd.isZero()) { break; Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java 2010-03-02 04:12:58 UTC (rev 15816) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java 2010-03-02 04:13:48 UTC (rev 15817) @@ -79,6 +79,8 @@ Address.zero().plus(DATA_END_OFFSET.plus(BYTES_IN_ADDRESS)), MAX_ALIGNMENT, 0).toWord().toOffset(); + public static final int MINIMUM_DATA_SIZE = (1 << LOG_BLOCK_SIZE) - MAX_DATA_START_OFFSET.toInt(); + /**************************************************************************** * * Instance variables This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:37:22
|
Revision: 15818 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15818&view=rev Author: dframpton-oss Date: 2010-03-02 04:37:14 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15805 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/vm/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/common/vmmagic/src/org/vmmagic/unboxed/Address.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/sun/misc/Unsafe.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/SizeConstants.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMField.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMMethod.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/TypeReference.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineMagic.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/ClassLoaderProxy.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/StaticFieldReader.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/bc2ir/BC2IR.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerateMagic.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerationContext.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/ir/AbstractRegisterPool.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/ir/IRTools.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/ir/operand/Operand.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/ir/operand/RegisterOperand.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/liveness/LiveSet.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/ssa/EnterSSA.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/ssa/GCP.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/Entrypoints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/Magic.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/MagicNames.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/RuntimeEntrypoints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/Statics.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/scheduler/Synchronization.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/tools/header_gen/GenerateInterfaceDeclarations.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src-generated/options/BooleanOptions.opt.dat rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageWriter.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/PlanConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/Address.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/sun/misc/Unsafe.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/SizeConstants.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMField.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMMethod.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/TypeReference.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineMagic.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ClassLoaderProxy.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/StaticFieldReader.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/BC2IR.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerateMagic.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerationContext.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/AbstractRegisterPool.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/IRTools.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/Operand.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/RegisterOperand.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/liveness/LiveSet.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/EnterSSA.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/GCP.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Entrypoints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Magic.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/MagicNames.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/RuntimeEntrypoints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Statics.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/Synchronization.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tools/header_gen/GenerateInterfaceDeclarations.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/BooleanOptions.opt.dat rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageWriter.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java 2010-03-02 04:13:48 UTC (rev 15817) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java 2010-03-02 04:37:14 UTC (rev 15818) @@ -24,22 +24,22 @@ /** * Perform the actual write of a boolean write barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the boolean field * @param value The value that the slot will be updated to * @param offset The offset from the ref - * @param unused Unused + * @param location The FieldReference index to assist the store * @param mode The context in which the write is occurring */ @Inline @Override public final void booleanWrite(ObjectReference objref, boolean value, Word offset, Word location, int mode) { - Magic.setByteAtOffset(objref.toObject(), offset.toOffset(), (byte) (value ? 1 : 0)); + Magic.setBooleanAtOffset(objref.toObject(), offset.toOffset(), value, location.toInt()); } /** * Perform the actual read of a boolean read barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the boolean field * @param offset The offset from the ref * @param unused Unused * @param mode The context in which the write is occurring @@ -54,22 +54,22 @@ /** * Perform the actual write of a byte write barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the byte field * @param value The value that the slot will be updated to * @param offset The offset from the ref - * @param unused Unused + * @param location The FieldReference index to assist the store * @param mode The context in which the write is occurring */ @Inline @Override public final void byteWrite(ObjectReference objref, byte value, Word offset, Word location, int mode) { - Magic.setByteAtOffset(objref.toObject(), offset.toOffset(), value); + Magic.setByteAtOffset(objref.toObject(), offset.toOffset(), value, location.toInt()); } /** * Perform the actual read of a byte read barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the byte field * @param offset The offset from the ref * @param unused Unused * @param mode The context in which the write is occurring @@ -84,22 +84,22 @@ /** * Perform the actual write of a char write barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the char field * @param value The value that the slot will be updated to * @param offset The offset from the ref - * @param unused Unused + * @param location The FieldReference index to assist the store * @param mode The context in which the write is occurring */ @Inline @Override public final void charWrite(ObjectReference objref, char value, Word offset, Word location, int mode) { - Magic.setCharAtOffset(objref.toObject(), offset.toOffset(), value); + Magic.setCharAtOffset(objref.toObject(), offset.toOffset(), value, location.toInt()); } /** * Perform the actual read of a char read barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the char field * @param offset The offset from the ref * @param unused Unused * @param mode The context in which the write is occurring @@ -114,22 +114,22 @@ /** * Perform the actual write of a short write barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the short field * @param value The value that the slot will be updated to * @param offset The offset from the ref - * @param unused Unused + * @param location The FieldReference index to assist the store * @param mode The context in which the write is occurring */ @Inline @Override public final void shortWrite(ObjectReference objref, short value, Word offset, Word location, int mode) { - Magic.setShortAtOffset(objref.toObject(), offset.toOffset(), value); + Magic.setShortAtOffset(objref.toObject(), offset.toOffset(), value, location.toInt()); } /** * Perform the actual read of a short read barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the short field * @param offset The offset from the ref * @param unused Unused * @param mode The context in which the write is occurring @@ -144,22 +144,22 @@ /** * Perform the actual write of a int write barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the int field * @param value The value that the slot will be updated to * @param offset The offset from the ref - * @param unused Unused + * @param location The FieldReference index to assist the store * @param mode The context in which the write is occurring */ @Inline @Override public final void intWrite(ObjectReference objref, int value, Word offset, Word location, int mode) { - Magic.setIntAtOffset(objref.toObject(), offset.toOffset(), value); + Magic.setIntAtOffset(objref.toObject(), offset.toOffset(), value, location.toInt()); } /** * Perform the actual read of a int read barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the int field * @param offset The offset from the ref * @param unused Unused * @param mode The context in which the write is occurring @@ -172,24 +172,45 @@ } /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param objref The object that has the int field + * @param expected The old int to be swapped out + * @param newValue the new int + * @param offset The offset from the ref + * @param unused Unused + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + @Override + public boolean intTryCompareAndSwap(ObjectReference objref, int expected, int newValue, Word offset, Word unused, int mode) { + int oldValue; + do { + oldValue = Magic.prepareInt(objref, offset.toOffset()); + if (oldValue != expected) return false; + } while (!Magic.attemptInt(objref, offset.toOffset(), oldValue, newValue)); + return true; + } + + /** * Perform the actual write of a long write barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the long field * @param value The value that the slot will be updated to * @param offset The offset from the ref - * @param unused Unused + * @param location The FieldReference index to assist the store * @param mode The context in which the write is occurring */ @Inline @Override public final void longWrite(ObjectReference objref, long value, Word offset, Word location, int mode) { - Magic.setLongAtOffset(objref.toObject(), offset.toOffset(), value); + Magic.setLongAtOffset(objref.toObject(), offset.toOffset(), value, location.toInt()); } /** * Perform the actual read of a long read barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the long field * @param offset The offset from the ref * @param unused Unused * @param mode The context in which the write is occurring @@ -202,24 +223,45 @@ } /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param objref The object that has the long field + * @param expected The old long to be swapped out + * @param newValue the new long + * @param offset The offset from the ref + * @param unused Unused + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + @Override + public boolean longTryCompareAndSwap(ObjectReference objref, long expected, long newValue, Word offset, Word unused, int mode) { + long oldValue; + do { + oldValue = Magic.prepareLong(objref, offset.toOffset()); + if (oldValue != expected) return false; + } while (!Magic.attemptLong(objref, offset.toOffset(), oldValue, newValue)); + return true; + } + + /** * Perform the actual write of a float write barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the float field * @param value The value that the slot will be updated to * @param offset The offset from the ref - * @param unused Unused + * @param location The FieldReference index to assist the store * @param mode The context in which the write is occurring */ @Inline @Override public final void floatWrite(ObjectReference objref, float value, Word offset, Word location, int mode) { - Magic.setFloatAtOffset(objref.toObject(), offset.toOffset(), value); + Magic.setFloatAtOffset(objref.toObject(), offset.toOffset(), value, location.toInt()); } /** * Perform the actual read of a float read barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the float field * @param offset The offset from the ref * @param unused Unused * @param mode The context in which the write is occurring @@ -234,22 +276,22 @@ /** * Perform the actual write of a double write barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the double field * @param value The value that the slot will be updated to * @param offset The offset from the ref - * @param unused Unused + * @param location The FieldReference index to assist the store * @param mode The context in which the write is occurring */ @Inline @Override public final void doubleWrite(ObjectReference objref, double value, Word offset, Word location, int mode) { - Magic.setDoubleAtOffset(objref.toObject(), offset.toOffset(), value); + Magic.setDoubleAtOffset(objref.toObject(), offset.toOffset(), value, location.toInt()); } /** * Perform the actual read of a double read barrier. * - * @param objref The object that has the reference field + * @param objref The object that has the double field * @param offset The offset from the ref * @param unused Unused * @param mode The context in which the write is occurring @@ -352,9 +394,9 @@ } /** - * Perform the actual write of the write barrier, writing the value as a raw word. + * Perform the actual write of the write barrier, writing the value as a raw Word. * - * @param ref The object that has the reference field + * @param ref The object that has the Word field * @param target The value that the slot will be updated to * @param offset The offset from the ref * @param location The index of the FieldReference @@ -371,7 +413,7 @@ * Atomically write a raw reference field of an object or array and return * the old value of the reference field. * - * @param ref The object that has the reference field + * @param ref The object that has the Word field * @param target The value that the slot will be updated to * @param offset The offset from the ref * @param unused Unused @@ -392,8 +434,8 @@ /** * Attempt an atomic compare and exchange in a write barrier sequence. * - * @param ref The object that has the reference field - * @param old The old reference to be swapped out + * @param ref The object that has the Word field + * @param old The old Word to be swapped out * @param target The value that the slot will be updated to * @param offset The offset from the ref * @param unused Unused @@ -407,14 +449,14 @@ do { Word currentValue = Magic.prepareWord(ref, offset.toOffset()); if (currentValue != old) return false; - } while (!Magic.attemptObject(ref, offset.toOffset(), old, target)); + } while (!Magic.attemptWord(ref, offset.toOffset(), old, target)); return true; } /** - * Perform the actual read of the read barrier, returning the value as a raw word. + * Perform the actual read of the read barrier, returning the value as a raw Word. * - * @param ref The object that has the reference field + * @param ref The object that has the Word field * @param offset The offset from the ref * @param location The index of the FieldReference * @param mode The context in which the write is occurring @@ -428,6 +470,123 @@ } /** + * Perform the actual write of the write barrier, writing the value as a raw Address. + * + * @param ref The object that has the Address field + * @param target The value that the slot will be updated to + * @param offset The offset from the ref + * @param location The index of the FieldReference + * @param mode The context in which the write is occurring + */ + @Inline + @Override + public final void addressWrite(ObjectReference ref, Address target, + Word offset, Word location, int mode) { + Magic.setAddressAtOffset(ref.toObject(), offset.toOffset(), target, location.toInt()); + } + + /** + * Perform the actual read of the read barrier, returning the value as a raw Address. + * + * @param ref The object that has the Address field + * @param offset The offset from the ref + * @param location The index of the FieldReference + * @param mode The context in which the write is occurring + * @return the read value + */ + @Inline + @Override + public final Address addressRead(ObjectReference ref, + Word offset, Word location, int mode) { + return Magic.getAddressAtOffset(ref.toObject(), offset.toOffset(), location.toInt()); + } + + /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param objref The object that has the Address field + * @param expected The old Address to be swapped out + * @param newValue the new Address + * @param offset The offset from the ref + * @param unused Unused + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + @Override + public boolean addressTryCompareAndSwap(ObjectReference objref, Address expected, Address newValue, Word offset, Word unused, int mode) { + Address oldValue; + do { + oldValue = Magic.prepareAddress(objref, offset.toOffset()); + if (oldValue != expected) return false; + } while (!Magic.attemptAddress(objref, offset.toOffset(), oldValue, newValue)); + return true; + } + + /** + * Perform the actual write of the write barrier, writing the value as a raw Offset. + * + * @param ref The object that has the Offset field + * @param target The value that the slot will be updated to + * @param offset The offset from the ref + * @param location The index of the FieldReference + * @param mode The context in which the write is occurring + */ + @Inline + @Override + public final void offsetWrite(ObjectReference ref, Offset target, + Word offset, Word location, int mode) { + Magic.setOffsetAtOffset(ref.toObject(), offset.toOffset(), target, location.toInt()); + } + + /** + * Perform the actual read of the read barrier, returning the value as a raw Offset. + * + * @param ref The object that has the Offset field + * @param offset The offset from the ref + * @param location The index of the FieldReference + * @param mode The context in which the write is occurring + * @return the read value + */ + @Inline + @Override + public final Offset offsetRead(ObjectReference ref, + Word offset, Word location, int mode) { + return Magic.getOffsetAtOffset(ref.toObject(), offset.toOffset(), location.toInt()); + } + + /** + * Perform the actual write of the write barrier, writing the value as a raw Extent. + * + * @param ref The object that has the Extent field + * @param target The value that the slot will be updated to + * @param offset The offset from the ref + * @param location The index of the FieldReference + * @param mode The context in which the write is occurring + */ + @Inline + @Override + public final void extentWrite(ObjectReference ref, Extent target, + Word offset, Word location, int mode) { + Magic.setExtentAtOffset(ref.toObject(), offset.toOffset(), target, location.toInt()); + } + + /** + * Perform the actual read of the read barrier, returning the value as a raw Extent. + * + * @param ref The object that has the Extent field + * @param offset The offset from the ref + * @param location The index of the FieldReference + * @param mode The context in which the write is occurring + * @return the read value + */ + @Inline + @Override + public final Extent extentRead(ObjectReference ref, + Word offset, Word location, int mode) { + return Magic.getExtentAtOffset(ref.toObject(), offset.toOffset(), location.toInt()); + } + + /** * Sets an element of an object array without invoking any write * barrier. This method is called by the Map class to ensure * potentially-allocation-triggering write barriers do not occur in Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java 2010-03-02 04:13:48 UTC (rev 15817) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java 2010-03-02 04:37:14 UTC (rev 15818) @@ -583,6 +583,29 @@ } /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the value will be stored + * @param slot The address into which the value will be + * stored. + * @param old The old int to be swapped out + * @param value The new int + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean intTryCompareAndSwap(ObjectReference src, Address slot, int old, int value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** * Write a long. Take appropriate write barrier actions.<p> * * <b>By default do nothing, override if appropriate.</b> @@ -590,7 +613,7 @@ * @param src The object into which the new reference will be stored * @param slot The address into which the new reference will be * stored. - * @param value The value of the new int + * @param value The value of the new long * @param metaDataA A value that assists the host VM in creating a store * @param metaDataB A value that assists the host VM in creating a store * @param mode The context in which the store occurred @@ -643,6 +666,29 @@ } /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the value will be stored + * @param slot The address into which the value will be + * stored. + * @param old The old long to be swapped out + * @param value The new long + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean longTryCompareAndSwap(ObjectReference src, Address slot, long old, long value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** * Write a float. Take appropriate write barrier actions.<p> * * <b>By default do nothing, override if appropriate.</b> @@ -763,14 +809,14 @@ } /** - * Write a word. Take appropriate write barrier actions.<p> + * Write a Word. Take appropriate write barrier actions.<p> * * <b>By default do nothing, override if appropriate.</b> * * @param src The object into which the new reference will be stored * @param slot The address into which the new reference will be * stored. - * @param value The value of the new word + * @param value The value of the new Word * @param metaDataA A value that assists the host VM in creating a store * @param metaDataB A value that assists the host VM in creating a store * @param mode The context in which the store occurred @@ -782,7 +828,7 @@ } /** - * Read a word. Take appropriate read barrier action, and + * Read a Word. Take appropriate read barrier action, and * return the value that was read.<p> This is a <b>substituting<b> * barrier. The call to this barrier takes the place of a load.<p> * @@ -791,7 +837,7 @@ * @param metaDataA A value that assists the host VM in creating a load * @param metaDataB A value that assists the host VM in creating a load * @param mode The context in which the load occurred - * @return The word that was read. + * @return The Word that was read. */ @Inline public Word wordRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) { @@ -802,7 +848,7 @@ } /** - * A number of words are about to be copied from object + * A number of Words are about to be copied from object * <code>src</code> to object <code>dst</code> (as in an array * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> @@ -823,18 +869,41 @@ } /** - * Write an address. Take appropriate write barrier actions.<p> + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. * * <b>By default do nothing, override if appropriate.</b> * * @param src The object into which the new reference will be stored * @param slot The address into which the new reference will be * stored. - * @param value The value of the new address + * @param old The old Word to be swapped out + * @param value The new Word * @param metaDataA A value that assists the host VM in creating a store * @param metaDataB A value that assists the host VM in creating a store * @param mode The context in which the store occurred + * @return True if the swap was successful. */ + public boolean wordTryCompareAndSwap(ObjectReference src, Address slot, Word old, Word value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** + * Write an Address. Take appropriate write barrier actions.<p> + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the Word will be stored + * @param slot The address into which the Word will be + * stored. + * @param value The value of the new Address + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ public void addressWrite(ObjectReference src, Address slot, Address value, Word metaDataA, Word metaDataB, int mode) { // Either: write barriers are used and this is overridden, or // write barriers are not used and this is never called @@ -842,7 +911,7 @@ } /** - * Read an address. Take appropriate read barrier action, and + * Read an Address. Take appropriate read barrier action, and * return the value that was read.<p> This is a <b>substituting<b> * barrier. The call to this barrier takes the place of a load.<p> * @@ -851,7 +920,7 @@ * @param metaDataA A value that assists the host VM in creating a load * @param metaDataB A value that assists the host VM in creating a load * @param mode The context in which the load occurred - * @return The address that was read. + * @return The Address that was read. */ @Inline public Address addressRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) { @@ -862,7 +931,7 @@ } /** - * A number of addresses are about to be copied from object + * A number of Addresse's are about to be copied from object * <code>src</code> to object <code>dst</code> (as in an array * copy). Thus, <code>dst</code> is the mutated object. Take * appropriate write barrier actions.<p> @@ -883,6 +952,149 @@ } /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the Address will be stored + * @param slot The address into which the Address will be + * stored. + * @param old The old Address to be swapped out + * @param value The new Address + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean addressTryCompareAndSwap(ObjectReference src, Address slot, Address old, Address value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** + * Write an Extent. Take appropriate write barrier actions.<p> + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new Extent + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void extentWrite(ObjectReference src, Address slot, Extent value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + } + + /** + * Read an Extent. Take appropriate read barrier action, and + * return the value that was read.<p> This is a <b>substituting<b> + * barrier. The call to this barrier takes the place of a load.<p> + * + * @param src The object reference holding the field being read. + * @param slot The address of the slot being read. + * @param metaDataA A value that assists the host VM in creating a load + * @param metaDataB A value that assists the host VM in creating a load + * @param mode The context in which the load occurred + * @return The Extent that was read. + */ + @Inline + public Extent extentRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) { + // Either: read barriers are used and this is overridden, or + // read barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return Extent.zero(); + } + + /** + * A number of Extents are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller (always false in this case). + */ + public boolean extentBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + // Either: bulk copy is supported and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** + * Write an Offset. Take appropriate write barrier actions.<p> + * + * <b>By default do nothing, override if appropriate.</b> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new Offset + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void offsetWrite(ObjectReference src, Address slot, Offset value, Word metaDataA, Word metaDataB, int mode) { + // Either: write barriers are used and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + } + + /** + * Read an Offset. Take appropriate read barrier action, and + * return the value that was read.<p> This is a <b>substituting<b> + * barrier. The call to this barrier takes the place of a load.<p> + * + * @param src The object reference holding the field being read. + * @param slot The address of the slot being read. + * @param metaDataA A value that assists the host VM in creating a load + * @param metaDataB A value that assists the host VM in creating a load + * @param mode The context in which the load occurred + * @return The Offset that was read. + */ + @Inline + public Offset offsetRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) { + // Either: read barriers are used and this is overridden, or + // read barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return Offset.zero(); + } + + /** + * A number of Offsets are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller (always false in this case). + */ + public boolean offsetBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + // Either: bulk copy is supported and this is overridden, or + // write barriers are not used and this is never called + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false); + return false; + } + + /** * Write an object reference. Take appropriate write barrier actions.<p> * * <b>By default do nothing, override if appropriate.</b> @@ -1003,10 +1215,6 @@ return false; } - - - - /** * Flush mutator context, in response to a requestMutatorFlush. * Also called by the default implementation of deinitMutator. Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java 2010-03-02 04:13:48 UTC (rev 15817) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/PlanConstraints.java 2010-03-02 04:37:14 UTC (rev 15818) @@ -97,24 +97,42 @@ /** @return True if this Plan can perform bulk double arraycopy barriers. */ public boolean doubleBulkCopySupported() { return false; } - /** @return True if this Plan requires write barriers on words. */ + /** @return True if this Plan requires write barriers on Words. */ public boolean needsWordWriteBarrier() { return false; } - /** @return True if this Plan requires read barriers on words. */ + /** @return True if this Plan requires read barriers on Words. */ public boolean needsWordReadBarrier() { return false; } - /** @return True if this Plan can perform bulk word arraycopy barriers. */ + /** @return True if this Plan can perform bulk Word arraycopy barriers. */ public boolean wordBulkCopySupported() { return false; } - /** @return True if this Plan requires write barriers on addresss. */ + /** @return True if this Plan requires write barriers on Address's. */ public boolean needsAddressWriteBarrier() { return false; } - /** @return True if this Plan requires read barriers on addresss. */ + /** @return True if this Plan requires read barriers on Address's. */ public boolean needsAddressReadBarrier() { return false; } - /** @return True if this Plan can perform bulk address arraycopy barriers. */ + /** @return True if this Plan can perform bulk Address arraycopy barriers. */ public boolean addressBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on Extents. */ + public boolean needsExtentWriteBarrier() { return false; } + + /** @return True if this Plan requires read barriers on Extents. */ + public boolean needsExtentReadBarrier() { return false; } + + /** @return True if this Plan can perform bulk Extent arraycopy barriers. */ + public boolean extentBulkCopySupported() { return false; } + + /** @return True if this Plan requires write barriers on Offsets. */ + public boolean needsOffsetWriteBarrier() { return false; } + + /** @return True if this Plan requires read barriers on Offsets. */ + public boolean needsOffsetReadBarrier() { return false; } + + /** @return True if this Plan can perform bulk Offset arraycopy barriers. */ + public boolean offsetBulkCopySupported() { return false; } + /** @return True if this Plan requires write barriers on object references. */ public boolean needsObjectReferenceWriteBarrier() { return false; } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/vm/Barriers.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/vm/Barriers.java 2010-03-02 04:13:48 UTC (rev 15817) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/vm/Barriers.java 2010-03-02 04:37:14 UTC (rev 15818) @@ -20,7 +20,7 @@ /** * Perform the actual write of a boolean write barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the boolean field * @param value The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -31,7 +31,7 @@ /** * Perform the actual read of a boolean read barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the boolean field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -42,7 +42,7 @@ /** * Perform the actual write of a byte write barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the byte field * @param value The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -53,7 +53,7 @@ /** * Perform the actual read of a byte read barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the byte field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -64,7 +64,7 @@ /** * Perform the actual write of a char write barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the char field * @param value The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -75,7 +75,7 @@ /** * Perform the actual read of a char read barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the char field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -86,7 +86,7 @@ /** * Perform the actual write of a short write barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the short field * @param value The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -97,7 +97,7 @@ /** * Perform the actual read of a short read barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the short field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -108,7 +108,7 @@ /** * Perform the actual write of a int write barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the int field * @param value The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -119,7 +119,7 @@ /** * Perform the actual read of a int read barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the int field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -128,9 +128,23 @@ public abstract int intRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode); /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param objref The object that has the int field + * @param old The old int to be swapped out + * @param value the new int + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + public abstract boolean intTryCompareAndSwap(ObjectReference objref, int old, int value, Word metaDataA, Word metaDataB, int mode); + + + /** * Perform the actual write of a long write barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the long field * @param value The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -141,7 +155,7 @@ /** * Perform the actual read of a long read barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the long field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -150,9 +164,22 @@ public abstract long longRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode); /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param objref The object that has the long field + * @param old The old long to be swapped out + * @param value the new long + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + public abstract boolean longTryCompareAndSwap(ObjectReference objref, long old, long value, Word metaDataA, Word metaDataB, int mode); + + /** * Perform the actual write of a float write barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the float field * @param value The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -163,7 +190,7 @@ /** * Perform the actual read of a float read barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the float field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -174,7 +201,7 @@ /** * Perform the actual write of a double write barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the double field * @param value The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -185,7 +212,7 @@ /** * Perform the actual read of a double read barrier. * - * @param ref The object that has the reference field + * @param ref The object that has the double field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -256,7 +283,7 @@ /** * Perform the actual write of the write barrier, writing the value as a raw Word. * - * @param ref The object that has the reference field + * @param ref The object that has the Word field * @param target The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -265,10 +292,10 @@ public abstract void wordWrite(ObjectReference ref, Word target, Word metaDataA, Word metaDataB, int mode); /** - * Atomically write a reference field of an object or array and return - * the old value of the reference field. + * Atomically write a Word field of an object or array and return + * the old value of the Word field. * - * @param ref The object that has the reference field + * @param ref The object that has the Word field * @param target The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -280,8 +307,8 @@ /** * Attempt an atomic compare and exchange in a write barrier sequence. * - * @param ref The object that has the reference field - * @param old The old reference to be swapped out + * @param ref The object that has the Word field + * @param old The old Word to be swapped out * @param target The value that the slot will be updated to * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot @@ -293,7 +320,7 @@ /** * Perform the actual read of the read barrier, returning the value as a raw Word. * - * @param ref The object that has the reference field + * @param ref The object that has the Word field * @param metaDataA Opaque, VM-specific, meta-data identifying the slot * @param metaDataB Opaque, VM-specific, meta-data identifying the slot * @param mode The context in which the write is occurring @@ -302,6 +329,85 @@ public abstract Word wordRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode); /** + * Perform the actual write of the write barrier, writing the value as a raw Address. + * + * @param ref The object that has the Address field + * @param target The value that the slot will be updated to + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + */ + public abstract void addressWrite(ObjectReference ref, Address target, Word metaDataA, Word metaDataB, int mode); + + /** + * Perform the actual read of the read barrier, returning the value as a raw Address. + * + * @param ref The object that has the Address field + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return the read value + */ + public abstract Address addressRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode); + + /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param ref The object that has the Address field + * @param old The old address to be swapped out + * @param target The value that the slot will be updated to + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + public abstract boolean addressTryCompareAndSwap(ObjectReference ref, Address old, Address target, Word metaDataA, Word metaDataB, int mode); + + /** + * Perform the actual write of the write barrier, writing the value as a raw Offset. + * + * @param ref The object that has the Offset field + * @param target The value that the slot will be updated to + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + */ + public abstract void offsetWrite(ObjectReference ref, Offset target, Word metaDataA, Word metaDataB, int mode); + + /** + * Perform the actual read of the read barrier, returning the value as a raw Offset. + * + * @param ref The object that has the Offset field + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return the read value + */ + public abstract Offset offsetRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode); + + /** + * Perform the actual write of the write barrier, writing the value as a raw Extent. + * + * @param ref The object that has the Extent field + * @param target The value that the slot will be updated to + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + */ + public abstract void extentWrite(ObjectReference ref, Extent target, Word metaDataA, Word metaDataB, int mode); + + /** + * Perform the actual read of the read barrier, returning the value as a raw Extent. + * + * @param ref The object that has the Extent field + * @param metaDataA Opaque, VM-specific, meta-data identifying the slot + * @param metaDataB Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return the read value + */ + public abstract Extent extentRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode); + + /** * Sets an element of an object array without invoking any write * barrier. This method is called by the Map class to ensure * potentially-allocation-triggering write barriers do not occur in Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/common/vmmagic/src/org/vmmagic/unboxed/Address.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/common/vmmagic/src/org/vmmagic/unboxed/Address.java 2010-03-02 04:13:48 UTC (rev 15817) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/common/vmmagic/src/org/vmmagic/unboxed/Address.java 2010-03-02 04:37:14 UTC (rev 15818) @@ -644,6 +644,25 @@ } /** + * Stores the boolean value in the memory location pointed to by the + * current instance. + * + * @param value The boolean value to store. + */ + public void store(boolean value) { + } + + /** + * Stores the boolean value in the memory location pointed to by the + * current instance. + * + * @param value The boolean value to store. + * @param offset the offset to the value. + */ + public void store(boolean value, Offset offset) { + } + + /** * Stores the byte value in the memory location pointed to by the * current instance. * @@ -662,7 +681,6 @@ public void store(byte value, Offset offset) { } - /** * Stores an int value in memory location pointed to by the * current instance. Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/sun/misc/Unsafe.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/sun/misc/Unsafe.java 2010-03-02 04:13:48 UTC (rev 15817) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/sun/misc/Unsafe.java 2010-03-02 04:37:14 UTC (rev 15818) @@ -21,6 +21,8 @@ import org.jikesrvm.scheduler.RVMThread; import org.vmmagic.unboxed.Offset; +import static org.jikesrvm.mm.mminterface.Barriers.*; + public final class Unsafe { private static final Unsafe unsafe = new Unsafe(); @@ -59,22 +61,39 @@ public void putOrderedInt(Object obj,long offset,int value) { Offset off = longToOffset(offset); - Magic.setIntAtOffset(obj,off,value); + if (NEEDS_INT_PUTFIELD_BARRIER) { + intFieldWrite(obj, value, off, 0); + } else { + Magic.setIntAtOffset(obj, off, value); + } } public void putOrderedLong(Object obj,long offset,long value) { Offset off = longToOffset(offset); - Magic.setLongAtOffset(obj,off,value); + if (NEEDS_LONG_PUTFIELD_BARRIER) { + longFieldWrite(obj, value, off, ... [truncated message content] |
From: <dfr...@us...> - 2010-03-02 04:39:29
|
Revision: 15819 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15819&view=rev Author: dframpton-oss Date: 2010-03-02 04:39:22 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15806 Added Paths: ----------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers.properties rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers.properties rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers.properties rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers.properties Added: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,26 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan.semispace.usePrimitiveWriteBarriers; + +import org.mmtk.plan.semispace.SS; + +import org.vmmagic.pragma.*; + +/** + * This class exercises primitive write barriers The write barriers contain no + * payloads but merely perform a write to the heap + */ +@Uninterruptible +public class UsePrimitiveWriteBarriers extends SS { + +} Added: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,25 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan.semispace.usePrimitiveWriteBarriers; + +import org.mmtk.plan.semispace.SSCollector; +import org.vmmagic.pragma.*; + +/** + * This class extends the {@link SSCollector} class as part of the + * {@link UsePrimitiveWriteBarriers} collector. All implementation details + * concerning GC are handled by {@link SSCollector} + */ +@Uninterruptible +public class UsePrimitiveWriteBarriersCollector extends SSCollector { +} Added: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,84 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan.semispace.usePrimitiveWriteBarriers; + +import org.mmtk.plan.semispace.SSConstraints; +import org.vmmagic.pragma.*; + +/** + * UsePrimitiveWriteBarriers common constants. + */ +@Uninterruptible +public class UsePrimitiveWriteBarriersConstraints extends SSConstraints { + + /** @return True if this Plan requires write barriers on booleans. */ + public boolean needsBooleanWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk boolean arraycopy barriers. */ + public boolean booleanBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on bytes. */ + public boolean needsByteWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk byte arraycopy barriers. */ + public boolean byteBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on chars. */ + public boolean needsCharWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk char arraycopy barriers. */ + public boolean charBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on shorts. */ + public boolean needsShortWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk short arraycopy barriers. */ + public boolean shortBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on ints. */ + public boolean needsIntWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk int arraycopy barriers. */ + public boolean intBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on longs. */ + public boolean needsLongWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk long arraycopy barriers. */ + public boolean longBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on floats. */ + public boolean needsFloatWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk float arraycopy barriers. */ + public boolean floatBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on doubles. */ + public boolean needsDoubleWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk double arraycopy barriers. */ + public boolean doubleBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on Words. */ + public boolean needsWordWriteBarrier() { return true; } + + /** @return True if this Plan requires write barriers on Address's. */ + public boolean needsAddressWriteBarrier() { return true; } + + /** @return True if this Plan requires write barriers on Extents. */ + public boolean needsExtentWriteBarrier() { return true; } + + /** @return True if this Plan requires write barriers on Offsets. */ + public boolean needsOffsetWriteBarrier() { return true; } + +} Added: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,424 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan.semispace.usePrimitiveWriteBarriers; + +import org.mmtk.plan.semispace.SSMutator; +import org.mmtk.vm.VM; + +import org.vmmagic.unboxed.*; +import org.vmmagic.pragma.*; + +/** + * This class extends the {@link SSMutator} class as part of the + * {@link UsePrimitiveWriteBarriers} collector. It overrides various methods in + * {@link Mutator} to implement primitive write barriers. + */ +@Uninterruptible +public class UsePrimitiveWriteBarriersMutator extends SSMutator { + + /** + * Write an Address. Take appropriate write barrier actions.<p> + * + * @param src The object into which the Word will be stored + * @param slot The address into which the Word will be + * stored. + * @param value The value of the new Address + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void addressWrite(ObjectReference src, Address slot, Address value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.addressWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * @param src The object into which the Address will be stored + * @param slot The address into which the Address will be + * stored. + * @param old The old Address to be swapped out + * @param value The new Address + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean addressTryCompareAndSwap(ObjectReference src, Address slot, Address old, Address value, Word metaDataA, Word metaDataB, int mode) { + return VM.barriers.addressTryCompareAndSwap(src, old, value, metaDataA, metaDataB, mode); + } + + /** + * Write a boolean. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new boolean + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void booleanWrite(ObjectReference src, Address slot, boolean value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.booleanWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of booleans are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean booleanBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a byte. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new byte + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void byteWrite(ObjectReference src, Address slot, byte value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.byteWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of bytes are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean byteBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a char. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new char + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void charWrite(ObjectReference src, Address slot, char value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.charWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of chars are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean charBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a double. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new double + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void doubleWrite(ObjectReference src, Address slot, double value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.doubleWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of doubles are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean doubleBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write an Extent. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new Extent + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void extentWrite(ObjectReference src, Address slot, Extent value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.extentWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * Write a float. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new float + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void floatWrite(ObjectReference src, Address slot, float value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.floatWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of floats are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean floatBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a int. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new int + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void intWrite(ObjectReference src, Address slot, int value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.intWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of ints are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean intBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * @param src The object into which the value will be stored + * @param slot The address into which the value will be + * stored. + * @param old The old int to be swapped out + * @param value The new int + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean intTryCompareAndSwap(ObjectReference src, Address slot, int old, int value, Word metaDataA, Word metaDataB, int mode) { + return VM.barriers.intTryCompareAndSwap(src, old, value, metaDataA, metaDataB, mode); + } + + /** + * Write a long. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new long + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void longWrite(ObjectReference src, Address slot, long value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.longWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of longs are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean longBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * @param src The object into which the value will be stored + * @param slot The address into which the value will be + * stored. + * @param old The old long to be swapped out + * @param value The new long + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean longTryCompareAndSwap(ObjectReference src, Address slot, long old, long value, Word metaDataA, Word metaDataB, int mode) { + return VM.barriers.longTryCompareAndSwap(src, old, value, metaDataA, metaDataB, mode); + } + + /** + * Write an Offset. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new Offset + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void offsetWrite(ObjectReference src, Address slot, Offset value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.offsetWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * Write a short. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new short + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void shortWrite(ObjectReference src, Address slot, short value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.shortWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of shorts are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean shortBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a Word. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new Word + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void wordWrite(ObjectReference src, Address slot, Word value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.wordWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param old The old Word to be swapped out + * @param value The new Word + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean wordTryCompareAndSwap(ObjectReference src, Address slot, Word old, Word value, Word metaDataA, Word metaDataB, int mode) { + return VM.barriers.wordTryCompareAndSwap(src, old, value, metaDataA, metaDataB, mode); + } +} Added: rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers.properties =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers.properties (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers.properties 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,14 @@ +# +# This file is part of the Jikes RVM project (http://jikesrvm.org). +# +# This file is licensed to You under the Eclipse Public License (EPL); +# You may not use this file except in compliance with the License. You +# may obtain a copy of the License at +# +# http://www.opensource.org/licenses/eclipse-1.0.php +# +# See the COPYRIGHT.txt file distributed with this work for information +# regarding copyright ownership. +# +config.mmtk.plan=org.mmtk.plan.semispace.usePrimitiveWriteBarriers.UsePrimitiveWriteBarriers +config.assertions=extreme Added: rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers.properties =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers.properties (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers.properties 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,18 @@ +# +# This file is part of the Jikes RVM project (http://jikesrvm.org). +# +# This file is licensed to You under the Eclipse Public License (EPL); +# You may not use this file except in compliance with the License. You +# may obtain a copy of the License at +# +# http://www.opensource.org/licenses/eclipse-1.0.php +# +# See the COPYRIGHT.txt file distributed with this work for information +# regarding copyright ownership. +# +config.mmtk.plan=org.mmtk.plan.semispace.usePrimitiveWriteBarriers.UsePrimitiveWriteBarriers +config.assertions=extreme +config.include.aos=true +config.runtime.compiler=opt +config.bootimage.compiler=opt +config.bootimage.compiler.args=-X:bc:O2 Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,26 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan.semispace.usePrimitiveWriteBarriers; + +import org.mmtk.plan.semispace.SS; + +import org.vmmagic.pragma.*; + +/** + * This class exercises primitive write barriers The write barriers contain no + * payloads but merely perform a write to the heap + */ +@Uninterruptible +public class UsePrimitiveWriteBarriers extends SS { + +} Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,25 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan.semispace.usePrimitiveWriteBarriers; + +import org.mmtk.plan.semispace.SSCollector; +import org.vmmagic.pragma.*; + +/** + * This class extends the {@link SSCollector} class as part of the + * {@link UsePrimitiveWriteBarriers} collector. All implementation details + * concerning GC are handled by {@link SSCollector} + */ +@Uninterruptible +public class UsePrimitiveWriteBarriersCollector extends SSCollector { +} Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,84 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan.semispace.usePrimitiveWriteBarriers; + +import org.mmtk.plan.semispace.SSConstraints; +import org.vmmagic.pragma.*; + +/** + * UsePrimitiveWriteBarriers common constants. + */ +@Uninterruptible +public class UsePrimitiveWriteBarriersConstraints extends SSConstraints { + + /** @return True if this Plan requires write barriers on booleans. */ + public boolean needsBooleanWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk boolean arraycopy barriers. */ + public boolean booleanBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on bytes. */ + public boolean needsByteWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk byte arraycopy barriers. */ + public boolean byteBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on chars. */ + public boolean needsCharWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk char arraycopy barriers. */ + public boolean charBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on shorts. */ + public boolean needsShortWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk short arraycopy barriers. */ + public boolean shortBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on ints. */ + public boolean needsIntWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk int arraycopy barriers. */ + public boolean intBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on longs. */ + public boolean needsLongWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk long arraycopy barriers. */ + public boolean longBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on floats. */ + public boolean needsFloatWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk float arraycopy barriers. */ + public boolean floatBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on doubles. */ + public boolean needsDoubleWriteBarrier() { return true; } + + /** @return True if this Plan can perform bulk double arraycopy barriers. */ + public boolean doubleBulkCopySupported() { return true; } + + /** @return True if this Plan requires write barriers on Words. */ + public boolean needsWordWriteBarrier() { return true; } + + /** @return True if this Plan requires write barriers on Address's. */ + public boolean needsAddressWriteBarrier() { return true; } + + /** @return True if this Plan requires write barriers on Extents. */ + public boolean needsExtentWriteBarrier() { return true; } + + /** @return True if this Plan requires write barriers on Offsets. */ + public boolean needsOffsetWriteBarrier() { return true; } + +} Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,424 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan.semispace.usePrimitiveWriteBarriers; + +import org.mmtk.plan.semispace.SSMutator; +import org.mmtk.vm.VM; + +import org.vmmagic.unboxed.*; +import org.vmmagic.pragma.*; + +/** + * This class extends the {@link SSMutator} class as part of the + * {@link UsePrimitiveWriteBarriers} collector. It overrides various methods in + * {@link Mutator} to implement primitive write barriers. + */ +@Uninterruptible +public class UsePrimitiveWriteBarriersMutator extends SSMutator { + + /** + * Write an Address. Take appropriate write barrier actions.<p> + * + * @param src The object into which the Word will be stored + * @param slot The address into which the Word will be + * stored. + * @param value The value of the new Address + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void addressWrite(ObjectReference src, Address slot, Address value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.addressWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * @param src The object into which the Address will be stored + * @param slot The address into which the Address will be + * stored. + * @param old The old Address to be swapped out + * @param value The new Address + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean addressTryCompareAndSwap(ObjectReference src, Address slot, Address old, Address value, Word metaDataA, Word metaDataB, int mode) { + return VM.barriers.addressTryCompareAndSwap(src, old, value, metaDataA, metaDataB, mode); + } + + /** + * Write a boolean. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new boolean + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void booleanWrite(ObjectReference src, Address slot, boolean value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.booleanWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of booleans are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean booleanBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a byte. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new byte + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void byteWrite(ObjectReference src, Address slot, byte value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.byteWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of bytes are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean byteBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a char. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new char + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void charWrite(ObjectReference src, Address slot, char value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.charWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of chars are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean charBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a double. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new double + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void doubleWrite(ObjectReference src, Address slot, double value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.doubleWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of doubles are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean doubleBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write an Extent. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new Extent + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void extentWrite(ObjectReference src, Address slot, Extent value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.extentWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * Write a float. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new float + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void floatWrite(ObjectReference src, Address slot, float value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.floatWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of floats are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean floatBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a int. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new int + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void intWrite(ObjectReference src, Address slot, int value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.intWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of ints are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean intBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * @param src The object into which the value will be stored + * @param slot The address into which the value will be + * stored. + * @param old The old int to be swapped out + * @param value The new int + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean intTryCompareAndSwap(ObjectReference src, Address slot, int old, int value, Word metaDataA, Word metaDataB, int mode) { + return VM.barriers.intTryCompareAndSwap(src, old, value, metaDataA, metaDataB, mode); + } + + /** + * Write a long. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new long + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void longWrite(ObjectReference src, Address slot, long value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.longWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of longs are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean longBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * @param src The object into which the value will be stored + * @param slot The address into which the value will be + * stored. + * @param old The old long to be swapped out + * @param value The new long + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean longTryCompareAndSwap(ObjectReference src, Address slot, long old, long value, Word metaDataA, Word metaDataB, int mode) { + return VM.barriers.longTryCompareAndSwap(src, old, value, metaDataA, metaDataB, mode); + } + + /** + * Write an Offset. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new Offset + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void offsetWrite(ObjectReference src, Address slot, Offset value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.offsetWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * Write a short. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new short + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void shortWrite(ObjectReference src, Address slot, short value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.shortWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * A number of shorts are about to be copied from object + * <code>src</code> to object <code>dst</code> (as in an array + * copy). Thus, <code>dst</code> is the mutated object. Take + * appropriate write barrier actions.<p> + * + * @param src The source array + * @param srcOffset The starting source offset + * @param dst The destination array + * @param dstOffset The starting destination offset + * @param bytes The number of bytes to be copied + * @return True if the update was performed by the barrier, false if + * left to the caller + */ + public boolean shortBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) { + return false; + } + + /** + * Write a Word. Take appropriate write barrier actions.<p> + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param value The value of the new Word + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + */ + public void wordWrite(ObjectReference src, Address slot, Word value, Word metaDataA, Word metaDataB, int mode) { + VM.barriers.wordWrite(src, value, metaDataA, metaDataB, mode); + } + + /** + * Attempt to atomically exchange the value in the given slot + * with the passed replacement value. + * + * @param src The object into which the new reference will be stored + * @param slot The address into which the new reference will be + * stored. + * @param old The old Word to be swapped out + * @param value The new Word + * @param metaDataA A value that assists the host VM in creating a store + * @param metaDataB A value that assists the host VM in creating a store + * @param mode The context in which the store occurred + * @return True if the swap was successful. + */ + public boolean wordTryCompareAndSwap(ObjectReference src, Address slot, Word old, Word value, Word metaDataA, Word metaDataB, int mode) { + return VM.barriers.wordTryCompareAndSwap(src, old, value, metaDataA, metaDataB, mode); + } +} Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers.properties =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers.properties (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers.properties 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,14 @@ +# +# This file is part of the Jikes RVM project (http://jikesrvm.org). +# +# This file is licensed to You under the Eclipse Public License (EPL); +# You may not use this file except in compliance with the License. You +# may obtain a copy of the License at +# +# http://www.opensource.org/licenses/eclipse-1.0.php +# +# See the COPYRIGHT.txt file distributed with this work for information +# regarding copyright ownership. +# +config.mmtk.plan=org.mmtk.plan.semispace.usePrimitiveWriteBarriers.UsePrimitiveWriteBarriers +config.assertions=extreme Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers.properties =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers.properties (rev 0) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers.properties 2010-03-02 04:39:22 UTC (rev 15819) @@ -0,0 +1,18 @@ +# +# This file is part of the Jikes RVM project (http://jikesrvm.org). +# +# This file is licensed to You under the Eclipse Public License (EPL); +# You may not use this file except in compliance with the License. You +# may obtain a copy of the License at +# +# http://www.opensource.org/licenses/eclipse-1.0.php +# +# See the COPYRIGHT.txt file distributed with this work for information +# regarding copyright ownership. +# +config.mmtk.plan=org.mmtk.plan.semispace.usePrimitiveWriteBarriers.UsePrimitiveWriteBarriers +config.assertions=extreme +config.include.aos=true +config.runtime.compiler=opt +config.bootimage.compiler=opt +config.bootimage.compiler.args=-X:bc:O2 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:40:04
|
Revision: 15820 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15820&view=rev Author: dframpton-oss Date: 2010-03-02 04:39:58 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15807 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/test-runs/sanity.properties rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/sanity.properties Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/test-runs/sanity.properties =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/test-runs/sanity.properties 2010-03-02 04:39:22 UTC (rev 15819) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/test-runs/sanity.properties 2010-03-02 04:39:58 UTC (rev 15820) @@ -23,7 +23,7 @@ # Unused test.set.jgf=jgf jgf-threads -test.configs=prototype prototype-opt development development_Opt_0 development_Opt_1 development_Opt_2 production production_performance BaseBaseCopyMS BaseBaseMarkSweep BaseBaseSemiSpace BaseBaseGenCopy FullAdaptiveCopyMS FullAdaptiveMarkSweep FastAdaptiveMarkSweep_performance FastAdaptiveSemiSpace_performance ExtremeAssertionsOptAdaptiveCopyMS production_Opt_0 production_Opt_1 production_Opt_2 BaseBaseGenRC BaseBaseNoGC BaseBaseRefCount FullAdaptiveGenCopy FullAdaptiveGenRC FullAdaptiveNoGC FullAdaptiveRefCount BaseBasePoisoned FullAdaptivePoisoned FullAdaptiveStickyMS FullAdaptiveImmix FullAdaptiveGenImmix +test.configs=prototype prototype-opt development development_Opt_0 development_Opt_1 development_Opt_2 production production_performance BaseBaseCopyMS BaseBaseMarkSweep BaseBaseSemiSpace BaseBaseGenCopy FullAdaptiveCopyMS FullAdaptiveMarkSweep FastAdaptiveMarkSweep_performance FastAdaptiveSemiSpace_performance ExtremeAssertionsOptAdaptiveCopyMS production_Opt_0 production_Opt_1 production_Opt_2 BaseBaseGenRC BaseBaseNoGC BaseBaseRefCount FullAdaptiveGenCopy FullAdaptiveGenRC FullAdaptiveNoGC FullAdaptiveRefCount BaseBasePoisoned FullAdaptivePoisoned ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers FullAdaptiveStickyMS FullAdaptiveImmix FullAdaptiveGenImmix test.config.prototype.tests=${test.set.medium} gctest Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/sanity.properties =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/sanity.properties 2010-03-02 04:39:22 UTC (rev 15819) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/sanity.properties 2010-03-02 04:39:58 UTC (rev 15820) @@ -23,7 +23,7 @@ # Unused test.set.jgf=jgf jgf-threads -test.configs=prototype prototype-opt development development_Opt_0 development_Opt_1 development_Opt_2 production production_performance BaseBaseCopyMS BaseBaseMarkSweep BaseBaseSemiSpace BaseBaseGenCopy FullAdaptiveCopyMS FullAdaptiveMarkSweep FastAdaptiveMarkSweep_performance FastAdaptiveSemiSpace_performance ExtremeAssertionsOptAdaptiveCopyMS production_Opt_0 production_Opt_1 production_Opt_2 BaseBaseGenRC BaseBaseNoGC BaseBaseRefCount FullAdaptiveGenCopy FullAdaptiveGenRC FullAdaptiveNoGC FullAdaptiveRefCount BaseBasePoisoned FullAdaptivePoisoned FullAdaptiveStickyMS FullAdaptiveImmix FullAdaptiveGenImmix +test.configs=prototype prototype-opt development development_Opt_0 development_Opt_1 development_Opt_2 production production_performance BaseBaseCopyMS BaseBaseMarkSweep BaseBaseSemiSpace BaseBaseGenCopy FullAdaptiveCopyMS FullAdaptiveMarkSweep FastAdaptiveMarkSweep_performance FastAdaptiveSemiSpace_performance ExtremeAssertionsOptAdaptiveCopyMS production_Opt_0 production_Opt_1 production_Opt_2 BaseBaseGenRC BaseBaseNoGC BaseBaseRefCount FullAdaptiveGenCopy FullAdaptiveGenRC FullAdaptiveNoGC FullAdaptiveRefCount BaseBasePoisoned FullAdaptivePoisoned ExtremeAssertionsBaseBaseUsePrimitiveWriteBarriers ExtremeAssertionsOptAdaptiveUsePrimitiveWriteBarriers FullAdaptiveStickyMS FullAdaptiveImmix FullAdaptiveGenImmix test.config.prototype.tests=${test.set.medium} gctest This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:40:36
|
Revision: 15821 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15821&view=rev Author: dframpton-oss Date: 2010-03-02 04:40:30 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15808 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java 2010-03-02 04:39:58 UTC (rev 15820) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java 2010-03-02 04:40:30 UTC (rev 15821) @@ -1175,12 +1175,12 @@ // perform the copy while (len-- != 0) { Object value; - if (NEEDS_OBJECT_GETFIELD_BARRIER) { + if (NEEDS_OBJECT_ALOAD_BARRIER) { value = Barriers.objectArrayRead(src, srcOffset.toInt() >> LOG_BYTES_IN_ADDRESS); } else { value = Magic.getObjectAtOffset(src, srcOffset); } - if (NEEDS_OBJECT_PUTFIELD_BARRIER) { + if (NEEDS_OBJECT_ASTORE_BARRIER) { Barriers.objectArrayWrite(dst, dstOffset.toInt() >> LOG_BYTES_IN_ADDRESS, value); } else { Magic.setObjectAtOffset(dst, dstOffset, value); @@ -1205,24 +1205,15 @@ * @param len The number of array elements to be copied */ private static void arraycopyPiecemeal(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) { - // must perform copy in correct order - if ((src != dst) || srcIdx > dstIdx) { - // non-overlapping case: straightforward + if ((src != dst) || srcIdx >= dstIdx) { while (len-- != 0) { dst[dstIdx++] = src[srcIdx++]; } } else { - // the arrays overlap: must use temp array - RVMArray ary = Magic.getObjectType(src).asArray(); - Object[] temp = (Object[]) RuntimeEntrypoints.resolvedNewArray(len, ary); - int cnt = len; - int tempIdx = 0; - while (cnt-- != 0) { - temp[tempIdx++] = src[srcIdx++]; - } - tempIdx = 0; + srcIdx += len; + dstIdx += len; while (len-- != 0) { - dst[dstIdx++] = temp[tempIdx++]; + dst[--dstIdx] = src[--srcIdx]; } } } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java 2010-03-02 04:39:58 UTC (rev 15820) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java 2010-03-02 04:40:30 UTC (rev 15821) @@ -1175,12 +1175,12 @@ // perform the copy while (len-- != 0) { Object value; - if (NEEDS_OBJECT_GETFIELD_BARRIER) { + if (NEEDS_OBJECT_ALOAD_BARRIER) { value = Barriers.objectArrayRead(src, srcOffset.toInt() >> LOG_BYTES_IN_ADDRESS); } else { value = Magic.getObjectAtOffset(src, srcOffset); } - if (NEEDS_OBJECT_PUTFIELD_BARRIER) { + if (NEEDS_OBJECT_ASTORE_BARRIER) { Barriers.objectArrayWrite(dst, dstOffset.toInt() >> LOG_BYTES_IN_ADDRESS, value); } else { Magic.setObjectAtOffset(dst, dstOffset, value); @@ -1205,24 +1205,15 @@ * @param len The number of array elements to be copied */ private static void arraycopyPiecemeal(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) { - // must perform copy in correct order - if ((src != dst) || srcIdx > dstIdx) { - // non-overlapping case: straightforward + if ((src != dst) || srcIdx >= dstIdx) { while (len-- != 0) { dst[dstIdx++] = src[srcIdx++]; } } else { - // the arrays overlap: must use temp array - RVMArray ary = Magic.getObjectType(src).asArray(); - Object[] temp = (Object[]) RuntimeEntrypoints.resolvedNewArray(len, ary); - int cnt = len; - int tempIdx = 0; - while (cnt-- != 0) { - temp[tempIdx++] = src[srcIdx++]; - } - tempIdx = 0; + srcIdx += len; + dstIdx += len; while (len-- != 0) { - dst[dstIdx++] = temp[tempIdx++]; + dst[--dstIdx] = src[--srcIdx]; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:41:17
|
Revision: 15822 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15822&view=rev Author: dframpton-oss Date: 2010-03-02 04:41:10 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15809 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/SimpleMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/SimpleMutator.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java 2010-03-02 04:40:30 UTC (rev 15821) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/MutatorContext.java 2010-03-02 04:41:10 UTC (rev 15822) @@ -118,13 +118,13 @@ protected final LargeObjectLocal los = new LargeObjectLocal(Plan.loSpace); /** Per-mutator allocator into the small code space */ - private final MarkSweepLocal smcode = Plan.USE_CODE_SPACE ? new MarkSweepLocal(Plan.smallCodeSpace) : null; + protected final MarkSweepLocal smcode = Plan.USE_CODE_SPACE ? new MarkSweepLocal(Plan.smallCodeSpace) : null; /** Per-mutator allocator into the large code space */ - private final LargeObjectLocal lgcode = Plan.USE_CODE_SPACE ? new LargeObjectLocal(Plan.largeCodeSpace) : null; + protected final LargeObjectLocal lgcode = Plan.USE_CODE_SPACE ? new LargeObjectLocal(Plan.largeCodeSpace) : null; /** Per-mutator allocator into the non moving space */ - private final MarkSweepLocal nonmove = new MarkSweepLocal(Plan.nonMovingSpace); + protected final MarkSweepLocal nonmove = new MarkSweepLocal(Plan.nonMovingSpace); /**************************************************************************** Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/SimpleMutator.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/SimpleMutator.java 2010-03-02 04:40:30 UTC (rev 15821) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/SimpleMutator.java 2010-03-02 04:41:10 UTC (rev 15822) @@ -56,12 +56,18 @@ if (phaseId == Simple.PREPARE) { los.prepare(true); + lgcode.prepare(true); + smcode.prepare(); + nonmove.prepare(); VM.memory.collectorPrepareVMSpace(); return; } if (phaseId == Simple.RELEASE) { los.release(true); + lgcode.release(true); + smcode.release(); + nonmove.release(); VM.memory.collectorReleaseVMSpace(); return; } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java 2010-03-02 04:40:30 UTC (rev 15821) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java 2010-03-02 04:41:10 UTC (rev 15822) @@ -118,13 +118,13 @@ protected final LargeObjectLocal los = new LargeObjectLocal(Plan.loSpace); /** Per-mutator allocator into the small code space */ - private final MarkSweepLocal smcode = Plan.USE_CODE_SPACE ? new MarkSweepLocal(Plan.smallCodeSpace) : null; + protected final MarkSweepLocal smcode = Plan.USE_CODE_SPACE ? new MarkSweepLocal(Plan.smallCodeSpace) : null; /** Per-mutator allocator into the large code space */ - private final LargeObjectLocal lgcode = Plan.USE_CODE_SPACE ? new LargeObjectLocal(Plan.largeCodeSpace) : null; + protected final LargeObjectLocal lgcode = Plan.USE_CODE_SPACE ? new LargeObjectLocal(Plan.largeCodeSpace) : null; /** Per-mutator allocator into the non moving space */ - private final MarkSweepLocal nonmove = new MarkSweepLocal(Plan.nonMovingSpace); + protected final MarkSweepLocal nonmove = new MarkSweepLocal(Plan.nonMovingSpace); /**************************************************************************** Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/SimpleMutator.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/SimpleMutator.java 2010-03-02 04:40:30 UTC (rev 15821) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/SimpleMutator.java 2010-03-02 04:41:10 UTC (rev 15822) @@ -56,12 +56,18 @@ if (phaseId == Simple.PREPARE) { los.prepare(true); + lgcode.prepare(true); + smcode.prepare(); + nonmove.prepare(); VM.memory.collectorPrepareVMSpace(); return; } if (phaseId == Simple.RELEASE) { los.release(true); + lgcode.release(true); + smcode.release(); + nonmove.release(); VM.memory.collectorReleaseVMSpace(); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:43:35
|
Revision: 15823 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15823&view=rev Author: dframpton-oss Date: 2010-03-02 04:43:29 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15810 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java 2010-03-02 04:41:10 UTC (rev 15822) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java 2010-03-02 04:43:29 UTC (rev 15823) @@ -1024,7 +1024,6 @@ public static boolean mightBeTIB(ObjectReference obj) { return !obj.isNull() && Space.isMappedObject(obj) && - Space.isImmortal(obj) && Space.isMappedObject(ObjectReference.fromObject(ObjectModel.getTIB(obj))); } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java 2010-03-02 04:41:10 UTC (rev 15822) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java 2010-03-02 04:43:29 UTC (rev 15823) @@ -998,7 +998,6 @@ public static boolean mightBeTIB(ObjectReference obj) { return !obj.isNull() && Space.isMappedObject(obj) && - Space.isImmortal(obj) && Space.isMappedObject(ObjectReference.fromObject(ObjectModel.getTIB(obj))); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:45:22
|
Revision: 15824 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15824&view=rev Author: dframpton-oss Date: 2010-03-02 04:45:16 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15811 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java 2010-03-02 04:43:29 UTC (rev 15823) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java 2010-03-02 04:45:16 UTC (rev 15824) @@ -42,7 +42,7 @@ * * Class variables */ - protected static final boolean LAZY_SWEEP = true; + protected static final boolean LAZY_SWEEP = false; private static final boolean COMPACT_SIZE_CLASSES = false; protected static final int MIN_CELLS = 6; protected static final int MAX_CELLS = 99; // (1<<(INUSE_BITS-1))-1; @@ -536,7 +536,13 @@ */ protected final void consumeBlocks() { for (int sizeClass = 0; sizeClass < sizeClassCount(); sizeClass++) { - while (!getAllocationBlock(sizeClass, null).isZero()); + while (!availableBlockHead.get(sizeClass).isZero()) { + Address block = availableBlockHead.get(sizeClass); + availableBlockHead.set(sizeClass, BlockAllocator.getNext(block)); + advanceToBlock(block, sizeClass); + BlockAllocator.setNext(block, consumedBlockHead.get(sizeClass)); + consumedBlockHead.set(sizeClass, block); + } } } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java 2010-03-02 04:43:29 UTC (rev 15823) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java 2010-03-02 04:45:16 UTC (rev 15824) @@ -42,7 +42,7 @@ * * Class variables */ - protected static final boolean LAZY_SWEEP = true; + protected static final boolean LAZY_SWEEP = false; private static final boolean COMPACT_SIZE_CLASSES = false; protected static final int MIN_CELLS = 6; protected static final int MAX_CELLS = 99; // (1<<(INUSE_BITS-1))-1; @@ -536,7 +536,13 @@ */ protected final void consumeBlocks() { for (int sizeClass = 0; sizeClass < sizeClassCount(); sizeClass++) { - while (!getAllocationBlock(sizeClass, null).isZero()); + while (!availableBlockHead.get(sizeClass).isZero()) { + Address block = availableBlockHead.get(sizeClass); + availableBlockHead.set(sizeClass, BlockAllocator.getNext(block)); + advanceToBlock(block, sizeClass); + BlockAllocator.setNext(block, consumedBlockHead.get(sizeClass)); + consumedBlockHead.set(sizeClass, block); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-02 04:46:40
|
Revision: 15825 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15825&view=rev Author: dframpton-oss Date: 2010-03-02 04:46:34 +0000 (Tue, 02 Mar 2010) Log Message: ----------- Merge -r15812 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java 2010-03-02 04:45:16 UTC (rev 15824) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java 2010-03-02 04:46:34 UTC (rev 15825) @@ -42,7 +42,7 @@ * * Class variables */ - protected static final boolean LAZY_SWEEP = false; + protected static final boolean LAZY_SWEEP = true; private static final boolean COMPACT_SIZE_CLASSES = false; protected static final int MIN_CELLS = 6; protected static final int MAX_CELLS = 99; // (1<<(INUSE_BITS-1))-1; Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java 2010-03-02 04:45:16 UTC (rev 15824) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java 2010-03-02 04:46:34 UTC (rev 15825) @@ -42,7 +42,7 @@ * * Class variables */ - protected static final boolean LAZY_SWEEP = false; + protected static final boolean LAZY_SWEEP = true; private static final boolean COMPACT_SIZE_CLASSES = false; protected static final int MIN_CELLS = 6; protected static final int MAX_CELLS = 99; // (1<<(INUSE_BITS-1))-1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-03-18 04:22:05
|
Revision: 15828 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15828&view=rev Author: dframpton-oss Date: 2010-03-18 04:21:56 +0000 (Thu, 18 Mar 2010) Log Message: ----------- Merge r15826 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java 2010-03-08 17:00:11 UTC (rev 15827) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/classloader/RVMArray.java 2010-03-18 04:21:56 UTC (rev 15828) @@ -921,7 +921,7 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx > dstIdx && FLOAT_BULK_COPY_SUPPORTED) { + if ((src != dst || srcIdx > dstIdx) && FLOAT_BULK_COPY_SUPPORTED) { if (NEEDS_FLOAT_ASTORE_BARRIER || NEEDS_FLOAT_ALOAD_BARRIER) { Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_FLOAT); Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_FLOAT); Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java 2010-03-08 17:00:11 UTC (rev 15827) +++ rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java 2010-03-18 04:21:56 UTC (rev 15828) @@ -921,7 +921,7 @@ (srcIdx + len) <= src.length && (dstIdx + len) >= 0 && (dstIdx + len) <= dst.length) { - if (src != dst || srcIdx > dstIdx && FLOAT_BULK_COPY_SUPPORTED) { + if ((src != dst || srcIdx > dstIdx) && FLOAT_BULK_COPY_SUPPORTED) { if (NEEDS_FLOAT_ASTORE_BARRIER || NEEDS_FLOAT_ALOAD_BARRIER) { Offset srcOffset = Offset.fromIntZeroExtend(srcIdx<<LOG_BYTES_IN_FLOAT); Offset dstOffset = Offset.fromIntZeroExtend(dstIdx<<LOG_BYTES_IN_FLOAT); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-06-30 02:26:49
|
Revision: 15869 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15869&view=rev Author: dframpton-oss Date: 2010-06-30 02:26:35 +0000 (Wed, 30 Jun 2010) Log Message: ----------- Normalized svn properties on branch Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src-generated/org/mmtk/harness/lang/parser/Parser.jj rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src-generated/org/mmtk/harness/lang/parser/Parser.jj Property Changed: ---------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/MMTkEvents.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/Mutators.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/exception/OutOfMemory.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Checker.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/CheckerException.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Compiler.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Intrinsics.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/PrettyPrinter.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Trace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/UnsyncStack.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Visitor.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AST.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AbstractAST.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AllocUserType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Constant.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Expect.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/IntrinsicMethod.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/LoadNamedField.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Method.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/MethodProxy.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Return.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/StoreNamedField.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethod.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethodProxy.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethodTable.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/Register.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/Temporary.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/parser/GlobalDefs.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/parser/Source.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/parser/Symbol.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/parser/TypeTable.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocUserOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/BinaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/BinaryOperation.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/Branch.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallIntrinsicOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallNormalOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/EnnaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/ExitOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/ExpectOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/Goto.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/LoadFieldOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/LoadFixedFieldOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/NullaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/PrintOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/PseudoOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/ResolvableOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/ReturnOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/SpawnOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreFieldOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreFixedFieldOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/TernaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/UnaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/UnaryOperation.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/AllocationSite.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/ConstantPool.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/NullValue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/PcodeInterpreter.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/PhantomReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/ReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/SoftReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/WeakReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/AbstractType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/BooleanType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/Field.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/IntType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/ObjectType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/ReferenceType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/StringType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/TypeReference.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/UserType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/UserTypeImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/VoidType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/Bits.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/DumpPcode.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/EnumSetOption.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/GcEvery.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/IntSetOption.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/PolicyStats.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyLength.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyMax.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyMin.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/RandomPolicySeed.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/SanityUsesReadBarrier.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/Scheduler.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/SchedulerPolicy.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/Timeout.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/Trace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/WatchAddress.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/WatchObject.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/WordSetOption.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/YieldInterval.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/FromSpaceInvariant.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/HeapEntry.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/HeapSnapshot.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/HeapVisitor.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/Sanity.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/Traversal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/AbstractPolicy.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/Lock.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/MMTkThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/Policy.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/Schedulable.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/Scheduler.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/ThreadModel.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/YieldAlways.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/YieldEvery.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/YieldNever.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/YieldRandomly.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorContextThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThreadModel.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/MutatorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/Rendezvous.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/CollectorContextThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/CollectorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/MutatorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawLock.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src-generated/org/mmtk/harness/lang/parser/Parser.jj rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord32.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord64.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Architecture.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/MemoryConstants.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/MemoryPage.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/PageTable.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/WordComparator.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/RCDecBuffer.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/RCZero.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTDecMarked.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTDecMarkedAndZero.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTFreeLargeObjectSweeper.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTScanLargeObjectSweeper.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTSweepImmortalScanner.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTSweeper.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/fullheap/RCFindRootSetTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/refcount/generational/GenRCFindRootSetTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/ExplicitLargeObjectSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/LargeObjectSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/ForwardingWord.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/HeaderByte.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/options/DefragStress.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/sanitychecker/SanityRootTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/vm/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/java/lang/Compiler.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/java/lang/VMCommonLibrarySupport.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/java/lang/ref/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/java/lang/reflect/VMCommonLibrarySupport.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/EPL/src/gnu/java/lang/VMCPStringBuilder.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/LGPL/src/gnu/java/nio/VMChannel.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/LGPL/src/java/lang/ref/ReferenceQueue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/GNUClasspath/LGPL/src/java/security/VMAccessController.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/ClassLoader.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/Package.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/Runtime.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/String.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/System.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/Thread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/ThreadGroup.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/Throwable.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/ref/ReferenceQueue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/reflect/AccessibleObject.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/reflect/Array.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/reflect/Constructor.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/reflect/Field.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/lang/reflect/Method.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/java/security/AccessController.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/org/apache/harmony/kernel/vm/VM.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/org/apache/harmony/lang/RuntimePermissionCollection.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/org/apache/harmony/lang/reflect/ReflectPermissionCollection.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/org/apache/harmony/luni/platform/OSMemory.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/ASF/src/org/apache/harmony/luni/util/Util.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/EPL/src/java/lang/JikesRVMHelpers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/EPL/src/java/lang/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/EPL/src/java/lang/reflect/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Harmony/EPL/src/java/nio/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/scheduler/LightMonitor.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_550.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_708.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/basic/src/test/org/jikesrvm/basic/core/annotation/TestAnnotations.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/jni/src/TestNestedGC.c rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/jni/src/TestNestedGC.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/mmtk/harness/sanity/HeapEntryTest.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/mmtk/harness/sanity/HeapSnapshotTest.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/mmtk/harness/scheduler/DeterministicTests.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/mmtk/harness/scheduler/DeterministicTests2.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/mmtk/harness/scheduler/JavaSchedulerTest.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/mmtk/harness/scheduler/SchedulerTestCases.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/mmtk/harness/scheduler/TestMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/mmtk/utility/deque/ObjectReferenceDequeTest.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/vmmagic/unboxed/AddressTest.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/vmmagic/unboxed/AddressTestBasic.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/vmmagic/unboxed/All.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/vmmagic/unboxed/ObjectReferenceTest.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/vmmagic/unboxed/WordTest.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/MMTkEvents.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Monitor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Mutators.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/exception/OutOfMemory.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Checker.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/CheckerException.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Compiler.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Intrinsics.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/PrettyPrinter.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Trace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/UnsyncStack.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Visitor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AST.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AbstractAST.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AllocUserType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Constant.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Expect.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/IntrinsicMethod.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/LoadNamedField.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Method.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/MethodProxy.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Return.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/StoreNamedField.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethod.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethodProxy.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethodTable.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/Register.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/Temporary.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/GlobalDefs.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/Source.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/Symbol.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/TypeTable.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocUserOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/BinaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/BinaryOperation.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/Branch.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallIntrinsicOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallNormalOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/EnnaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ExitOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ExpectOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/Goto.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/LoadFieldOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/LoadFixedFieldOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/NullaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/PrintOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/PseudoOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ResolvableOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ReturnOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/SpawnOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreFieldOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreFixedFieldOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/TernaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/UnaryOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/UnaryOperation.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/AllocationSite.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/ConstantPool.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/NullValue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/PcodeInterpreter.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/PhantomReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/ReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/SoftReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/WeakReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/AbstractType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/BooleanType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/Field.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/IntType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/ObjectType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/ReferenceType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/StringType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/Type.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/TypeReference.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/UserType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/UserTypeImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/VoidType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Bits.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/DumpPcode.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/EnumSetOption.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/GcEvery.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/IntSetOption.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/PolicyStats.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyLength.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyMax.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyMin.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/RandomPolicySeed.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/SanityUsesReadBarrier.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Scheduler.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/SchedulerPolicy.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Timeout.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Trace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/WatchAddress.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/WatchObject.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/WordSetOption.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/YieldInterval.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/FromSpaceInvariant.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/HeapEntry.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/HeapSnapshot.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/HeapVisitor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/Sanity.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/Traversal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/AbstractPolicy.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/Lock.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/MMTkThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/Policy.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/Schedulable.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/Scheduler.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/ThreadModel.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/YieldAlways.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/YieldEvery.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/YieldNever.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/YieldRandomly.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorContextThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThreadModel.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/MutatorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/Rendezvous.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/CollectorContextThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/CollectorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/MutatorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawLock.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src-generated/org/mmtk/harness/lang/parser/Parser.jj rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord32.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord64.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Architecture.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/MemoryConstants.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/MemoryPage.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/PageTable.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/SimulatedMemory.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/WordComparator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ConcurrentPhase.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ControllerCollectorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ParallelCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ParallelCollectorGroup.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/Concurrent.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/ConcurrentCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/ConcurrentConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/ConcurrentMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/marksweep/CMS.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/marksweep/CMSCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/marksweep/CMSConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/marksweep/CMSMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/marksweep/CMSTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCDecBuffer.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCZero.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTDecMarked.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTDecMarkedAndZero.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTFreeLargeObjectSweeper.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTScanLargeObjectSweeper.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTSweepImmortalScanner.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTSweeper.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/fullheap/RCFindRootSetTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/generational/GenRCFindRootSetTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersConstraints.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/usePrimitiveWriteBarriers/UsePrimitiveWriteBarriersMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/ExplicitLargeObjectSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/LargeObjectSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/ForwardingWord.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/HeaderByte.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DefragStress.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/Threads.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/sanitychecker/SanityRootTraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Monitor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/Compiler.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/VMCommonLibrarySupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/ref/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/reflect/VMCommonLibrarySupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/classpath/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/classpath/VMStackWalker.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/classpath/VMSystemProperties.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/java/lang/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/java/lang/VMCPStringBuilder.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/java/lang/VMInstrumentationImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/io/VMObjectStreamClass.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/JikesRVMHelpers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMClassLoader.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMDouble.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMFloat.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMMath.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMRuntime.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMString.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMThrowable.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/JikesRVMHelpers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/VMArray.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/VMConstructor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/VMField.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/VMMethod.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/nio/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/nio/VMDirectByteBuffer.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/util/VMTimeZone.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/LGPL/src/gnu/java/nio/VMChannel.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/LGPL/src/java/lang/ref/ReferenceQueue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/LGPL/src/java/security/VMAccessController.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/ClassLoader.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/Package.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/Runtime.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/String.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/System.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/Thread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/ThreadGroup.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/Throwable.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/ref/ReferenceQueue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/reflect/AccessibleObject.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/reflect/Array.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/reflect/Constructor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/reflect/Field.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/reflect/Method.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/security/AccessController.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/org/apache/harmony/kernel/vm/VM.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/org/apache/harmony/lang/RuntimePermissionCollection.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/org/apache/harmony/lang/reflect/ReflectPermissionCollection.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/org/apache/harmony/luni/platform/OSMemory.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/org/apache/harmony/luni/util/Util.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/lang/JikesRVMHelpers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/lang/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/lang/reflect/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/nio/JikesRVMSupport.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/BootThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/LightMonitor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/Monitor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/NoYieldpointsMonitor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/SystemThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_550.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_703.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_708.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/annotation/TestAnnotations.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestJNIGetFieldID.c rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestJNIGetFieldID.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestNestedGC.c rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestNestedGC.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/sanity/HeapEntryTest.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/sanity/HeapSnapshotTest.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/DeterministicTests.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/DeterministicTests2.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/JavaSchedulerTest.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/SchedulerTestCases.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/TestMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/utility/deque/ObjectReferenceDequeTest.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/AddressTest.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/AddressTestBasic.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/All.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/ObjectReferenceTest.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/WordTest.java Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/MMTkEvents.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Debug.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/Mutators.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/exception/OutOfMemory.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Checker.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/CheckerException.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Compiler.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Intrinsics.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/PrettyPrinter.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Trace.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/UnsyncStack.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Visitor.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AST.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AbstractAST.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AllocUserType.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Constant.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Expect.java ___________________________________________________________________ Added: svn:mime-type + text/plain Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/IntrinsicMethod.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/LoadNamedField.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Method.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/MethodProxy.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Return.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/StoreNamedField.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethod.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethodProxy.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethodTable.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/Register.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/compiler/Temporary.java ___________________________________________________________________ Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/parser/GlobalDefs.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/parser/Source.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/parser/Symbol.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/parser/TypeTable.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocOp.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocUserOp.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/BinaryOp.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/BinaryOperation.java ___________________________________________________________________ Added: svn:mime-type +... [truncated message content] |
From: <dfr...@us...> - 2010-07-15 06:36:49
|
Revision: 15905 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15905&view=rev Author: dframpton-oss Date: 2010-07-15 06:36:38 +0000 (Thu, 15 Jul 2010) Log Message: ----------- Merge to r15904 Modified Paths: -------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/ReferenceProcessor.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Scanning.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Assert.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ReferenceProcessor.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanBootImage.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Statistics.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/Collector.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/Harness.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/Main.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/Mutator.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Checker.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Compiler.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Env.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Intrinsics.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/PrettyPrinter.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Trace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/Visitor.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AST.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AbstractAST.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Alloc.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/Assert.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocUserOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/pcode/ExitOp.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/AllocationSite.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/ObjectValue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/ReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/runtime/StackFrame.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/AbstractType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/Type.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/TypeReference.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/type/UserTypeImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/HarnessOptionSet.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/HeapEntry.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/HeapSnapshot.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/Sanity.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/Traversal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorContextThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/CollectorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src-generated/org/mmtk/harness/lang/parser/Parser.jj rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/test-scripts/Quicksort.script rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/Address.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/ObjectReference.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/MemoryPage.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/SimulatedMemory.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/Plan.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/markcompact/MC.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/markcompact/MCCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/plan/markcompact/MCMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/CopySpace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkSweepSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/Space.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/heap/Map.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/heap/Mmapper.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/options/Options.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/statistics/Counter.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/statistics/Stats.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/vm/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/vm/Statistics.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/NEWS.txt rvmroot/branches/RVM-777-NewMMTkGlue/tag/bin/buildit rvmroot/branches/RVM-777-NewMMTkGlue/tag/bin/buildit.base_config rvmroot/branches/RVM-777-NewMMTkGlue/tag/bin/normalizeSVNProperties.sh rvmroot/branches/RVM-777-NewMMTkGlue/tag/bin/test-mmtk rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/classpath.xml rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/jsr166-tck.xml rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/config.properties.defaults rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/primordials/Classpath-0.97.2.txt rvmroot/branches/RVM-777-NewMMTkGlue/tag/build.xml rvmroot/branches/RVM-777-NewMMTkGlue/tag/libraryInterface/Common/src/sun/misc/Unsafe.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/compilers/opt/ssa/LoadElimination.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/objectmodel/JavaHeader.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/objectmodel/ObjectModel.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/BootRecord.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/Statics.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/rvm/src/org/jikesrvm/runtime/SysCall.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk/src/org/vmmagic/unboxed/AddressTest.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/asm-tasks/src/org/jikesrvm/tools/asm/AnnotationAdder.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/perfctr.C rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/perfctr.h rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/sys.C rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ReferenceProcessor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Scanning.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Assert.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ReferenceProcessor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanBootImage.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Statistics.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Collector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Harness.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Main.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Mutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Checker.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Compiler.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Env.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Intrinsics.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/PrettyPrinter.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Trace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Visitor.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AST.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AbstractAST.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Alloc.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Assert.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocUserOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ExitOp.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/AllocationSite.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/ObjectValue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/ReferenceValue.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/StackFrame.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/AbstractType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/Type.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/TypeReference.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/UserTypeImpl.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/HarnessOptionSet.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/HeapEntry.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/HeapSnapshot.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/Sanity.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/Traversal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorContextThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/CollectorThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src-generated/org/mmtk/harness/lang/parser/Parser.jj rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/Quicksort.script rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/Address.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/ObjectReference.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/MemoryPage.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/SimulatedMemory.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ControllerCollectorContext.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/Phase.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/Plan.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/TraceLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/Concurrent.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/ConcurrentCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/ConcurrentMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/concurrent/marksweep/CMSMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MC.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCMutator.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/CopySpace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactLocal.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkSweepSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/Space.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/Map.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/Mmapper.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/Options.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/Counter.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/Stats.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Debug.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Statistics.java rvmroot/branches/RVM-777-NewMMTkGlue/work/NEWS.txt rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/buildit rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/buildit.base_config rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/normalizeSVNProperties.sh rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/test-mmtk rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/classpath.xml rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/jsr166-tck.xml rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/config.properties.defaults rvmroot/branches/RVM-777-NewMMTkGlue/work/build/primordials/Classpath-0.97.2.txt rvmroot/branches/RVM-777-NewMMTkGlue/work/build.xml rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/sun/misc/Unsafe.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/LoadElimination.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/JavaHeader.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/ObjectModel.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/BootRecord.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Statics.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/SysCall.java rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/RVMThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/AddressTest.java rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/asm-tasks/src/org/jikesrvm/tools/asm/AnnotationAdder.java rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/perfctr.C rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/perfctr.h rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/sys.C Added Paths: ----------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/TimeoutThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/TypeLiteral.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/AllocDuringCollection.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/GcSanity.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/ObjectTable.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/test-scripts/AlignedLists.options rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/test-scripts/AlignedLists.script rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/test-scripts/Concurrent1.script rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/test-scripts/Concurrent2.script rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/test-scripts/OneObject.script rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/test-scripts/TwoObjects.script rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Clock.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/options/PerfEvents.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/patches/classpath-cvs.RVM-889-01.patch rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/patches/classpath-cvs.RVM-889-02.patch rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/patches/classpath-web.RVM-889-01.patch rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/components/patches/classpath-web.RVM-889-02.patch rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/configs/BaseAdaptiveMarkCompact.properties rvmroot/branches/RVM-777-NewMMTkGlue/tag/build/test-runs/mmtk-harness.properties rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk-harness/ rvmroot/branches/RVM-777-NewMMTkGlue/tag/testing/tests/mmtk-harness/build.xml rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/TimeoutThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/TypeLiteral.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/AllocDuringCollection.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/GcSanity.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/ObjectTable.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/AlignedLists.options rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/AlignedLists.script rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/Concurrent1.script rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/Concurrent2.script rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/OneObject.script rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/TwoObjects.script rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Clock.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/PerfEvents.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/patches/classpath-cvs.RVM-889-01.patch rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/patches/classpath-cvs.RVM-889-02.patch rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/patches/classpath-web.RVM-889-01.patch rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/patches/classpath-web.RVM-889-02.patch rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseAdaptiveMarkCompact.properties rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/mmtk-harness.properties rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk-harness/ rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk-harness/build.xml Removed Paths: ------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/AllocUserType.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/options/PerfMetric.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/statistics/PerfCounter.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AllocUserType.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/PerfMetric.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/PerfCounter.java Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java 2010-07-14 13:27:35 UTC (rev 15904) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java 2010-07-15 06:36:38 UTC (rev 15905) @@ -85,6 +85,7 @@ /** @return true if assertions should be verified */ @Override protected boolean getVerifyAssertionsConstant() { - return true; + String value = System.getProperty("org.mmtk.harness.verify.assertions", "true"); + return Boolean.valueOf(value); } } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java 2010-07-14 13:27:35 UTC (rev 15904) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java 2010-07-15 06:36:38 UTC (rev 15905) @@ -12,6 +12,7 @@ */ package org.mmtk.harness.vm; +import org.mmtk.harness.sanity.Sanity; import org.vmmagic.pragma.Uninterruptible; import org.vmmagic.unboxed.*; @@ -31,6 +32,8 @@ */ @Override public void booleanWrite(ObjectReference ref, boolean value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store((byte) (value ? 1 : 0)); } @@ -45,6 +48,8 @@ */ @Override public boolean booleanRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadByte() != 0; } @@ -59,6 +64,8 @@ */ @Override public void byteWrite(ObjectReference ref, byte value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(value); } @@ -73,6 +80,8 @@ */ @Override public byte byteRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadByte(); } @@ -87,6 +96,8 @@ */ @Override public void charWrite(ObjectReference ref, char value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(value); } @@ -101,6 +112,8 @@ */ @Override public char charRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadChar(); } @@ -115,6 +128,8 @@ */ @Override public void shortWrite(ObjectReference ref, short value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(value); } @@ -129,6 +144,8 @@ */ @Override public short shortRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadShort(); } @@ -143,6 +160,8 @@ */ @Override public void intWrite(ObjectReference ref, int value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(value); } @@ -157,10 +176,30 @@ */ @Override public int intRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadInt(); } /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param objref The object that has the int field + * @param old The old int to be swapped out + * @param value the new int + * @param slot The address of the field + * @param unused Unused + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + @Override + public boolean intTryCompareAndSwap(ObjectReference objref, int old, + int value, Word slot, Word unused, int mode) { + assert unused == null; + return slot.toAddress().attempt(old, value); + } + + /** * Perform the actual write of a long write barrier. * * @param ref The object that has the reference field @@ -171,6 +210,8 @@ */ @Override public void longWrite(ObjectReference ref, long value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(value); } @@ -185,10 +226,31 @@ */ @Override public long longRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadLong(); } /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param ref The object that has the long field + * @param old The old long to be swapped out + * @param value the new long + * @param slot Opaque, VM-specific, meta-data identifying the slot + * @param unused Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + @Override + public boolean longTryCompareAndSwap(ObjectReference ref, long old, + long value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); + return slot.toAddress().attempt(old, value); + } + + /** * Perform the actual write of a float write barrier. * * @param ref The object that has the reference field @@ -199,6 +261,8 @@ */ @Override public void floatWrite(ObjectReference ref, float value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(value); } @@ -213,6 +277,8 @@ */ @Override public float floatRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadFloat(); } @@ -227,6 +293,8 @@ */ @Override public void doubleWrite(ObjectReference ref, double value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(value); } @@ -241,6 +309,8 @@ */ @Override public double doubleRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadDouble(); } @@ -255,6 +325,8 @@ */ @Override public void objectReferenceWrite(ObjectReference ref, ObjectReference value, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(value); } @@ -269,6 +341,8 @@ */ @Override public ObjectReference objectReferenceRead(ObjectReference ref,Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadObjectReference(); } @@ -284,6 +358,8 @@ */ @Override public void objectReferenceNonHeapWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) { + assert unusedA == null && unusedB == null; + Sanity.assertValid(target); slot.store(target); } @@ -300,6 +376,8 @@ */ @Override public ObjectReference objectReferenceAtomicWrite(ObjectReference ref, ObjectReference target, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); ObjectReference old; do { old = slot.toAddress().prepareObjectReference(); @@ -320,6 +398,8 @@ */ @Override public boolean objectReferenceTryCompareAndSwap(ObjectReference ref, ObjectReference old, ObjectReference target, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().attempt(old, target); } @@ -335,6 +415,8 @@ */ @Override public void wordWrite(ObjectReference ref, Word target, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); slot.toAddress().store(target); } @@ -352,6 +434,8 @@ @Override public Word wordAtomicWrite(ObjectReference ref, Word target, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); Word old; do { old = slot.toAddress().prepareWord(); @@ -363,7 +447,6 @@ * Attempt an atomic compare and exchange in a write barrier sequence. * * @param ref The object that has the reference field - * @param slot The slot that holds the reference * @param old The old reference to be swapped out * @param target The value that the slot will be updated to * @param slot The address to be written to @@ -374,6 +457,8 @@ @Override public boolean wordTryCompareAndSwap(ObjectReference ref, Word old, Word target, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().attempt(old, target); } @@ -388,10 +473,133 @@ */ @Override public Word wordRead(ObjectReference ref, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); return slot.toAddress().loadWord(); } /** + * Perform the actual write of the write barrier, writing the value as a raw Address. + * + * @param ref The object that has the Address field + * @param target The value that the slot will be updated to + * @param slot Opaque, VM-specific, meta-data identifying the slot + * @param unused Unused + * @param mode The context in which the write is occurring + */ + @Override + public void addressWrite(ObjectReference ref, Address target, Word slot, + Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); + slot.toAddress().store(target); + } + + /** + * Perform the actual read of the read barrier, returning the value as a raw Address. + * + * @param ref The object that has the Address field + * @param slot Opaque, VM-specific, meta-data identifying the slot + * @param unused Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return the read value + */ + @Override + public Address addressRead(ObjectReference ref, Word slot, + Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); + return slot.toAddress().loadAddress(); + } + + /** + * Attempt an atomic compare and exchange in a write barrier sequence. + * + * @param ref The object that has the Address field + * @param old The old address to be swapped out + * @param target The value that the slot will be updated to + * @param slot Opaque, VM-specific, meta-data identifying the slot + * @param unused Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return True if the compare and swap was successful + */ + @Override + public boolean addressTryCompareAndSwap(ObjectReference ref, Address old, + Address target, Word slot, Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); + return slot.toAddress().attempt(old, target); + } + + /** + * Perform the actual write of the write barrier, writing the value as a raw Offset. + * + * @param ref The object that has the Offset field + * @param target The value that the slot will be updated to + * @param slot Opaque, VM-specific, meta-data identifying the slot + * @param unused Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + */ + @Override + public void offsetWrite(ObjectReference ref, Offset target, Word slot, + Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); + slot.toAddress().store(target); + } + + /** + * Perform the actual read of the read barrier, returning the value as a raw Offset. + * + * @param ref The object that has the Offset field + * @param slot Opaque, VM-specific, meta-data identifying the slot + * @param unused Opaque, VM-specific, meta-data identifying the slot + * @param mode The context in which the write is occurring + * @return the read value + */ + @Override + public Offset offsetRead(ObjectReference ref, Word slot, + Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); + return slot.toAddress().loadOffset(); + } + + /** + * Perform the actual write of the write barrier, writing the value as a raw Extent. + * + * @param ref The object that has the Extent field + * @param target The value that the slot will be updated to + * @param slot Opaque, VM-specific, meta-data identifying the slot + * @param unused Unused + * @param mode The context in which the write is occurring + */ + @Override + public void extentWrite(ObjectReference ref, Extent target, Word slot, + Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); + slot.toAddress().store(target); + } + + /** + * Perform the actual read of the read barrier, returning the value as a raw Extent. + * + * @param ref The object that has the Extent field + * @param slot Opaque, VM-specific, meta-data identifying the slot + * @param unused Unused + * @param mode The context in which the write is occurring + * @return the read value + */ + @Override + public Extent extentRead(ObjectReference ref, Word slot, + Word unused, int mode) { + assert unused == null; + Sanity.assertValid(ref); + return slot.toAddress().loadExtent(); + } + + /** * Sets an element of an object array without invoking any write * barrier. This method is called by the Map class to ensure * potentially-allocation-triggering write barriers do not occur in @@ -405,4 +613,5 @@ public void objectArrayStoreNoGCBarrier(Object [] dst, int index, Object value) { dst[index] = value; } + } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java 2010-07-14 13:27:35 UTC (rev 15904) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java 2010-07-15 06:36:38 UTC (rev 15905) @@ -65,7 +65,12 @@ */ @Override public void remsetEntry(Address slot) { + try { Trace.trace(Item.REMSET, "remset: %s->%s", format(slot), format(slot.loadObjectReference())); + } catch (Throwable e) { + System.err.printf("Error encountered processing remset entry %s%n", slot); + throw new RuntimeException(e); + } } /** @@ -86,5 +91,41 @@ Trace.trace(Item.TRACEOBJECT, "traceObject: %s", format(object)); } + /** + * Trace insertions at the head of a queue + * @param value Value inserted + */ + @Override + public void queueHeadInsert(String queueName, Address value) { + Trace.trace(Item.QUEUE, "head insert %s to %s", value, queueName); + } + /** + * Trace removals from the head of a queue + * @param value Value inserted + */ + @Override + public void queueHeadRemove(String queueName, Address value) { + Trace.trace(Item.QUEUE, "head remove %s from %s", value, queueName); + } + + /** + * Trace insertions at the tail of a queue + * @param value Value inserted + */ + @Override + public void queueTailInsert(String queueName, Address value) { + Trace.trace(Item.QUEUE, "tail insert %s to %s", value, queueName); + } + + /** + * Trace removals from the tail of a queue + * @param value Value removed + */ + @Override + public void queueTailRemove(String queueName, Address value) { + Trace.trace(Item.QUEUE, "tail remove %s from %s", value, queueName); + } + + } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java 2010-07-14 13:27:35 UTC (rev 15904) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java 2010-07-15 06:36:38 UTC (rev 15905) @@ -23,10 +23,12 @@ import org.mmtk.harness.Mutator; import org.mmtk.harness.lang.Trace; import org.mmtk.harness.lang.Trace.Item; +import org.mmtk.harness.sanity.Sanity; import org.mmtk.plan.CollectorContext; import org.mmtk.plan.MutatorContext; import org.mmtk.plan.Plan; import org.mmtk.policy.Space; +import org.mmtk.utility.alloc.Allocator; import org.vmmagic.pragma.Uninterruptible; import org.vmmagic.unboxed.*; import org.vmmagic.unboxed.harness.ArchitecturalWord; @@ -35,11 +37,12 @@ /** * MMTk Harness implementation of MMTk object model - * Object id (age in allocations); (Word) - * Allocation site (Word) - * The size of the data section in words. (UInt16) - * The number of reference words. (UInt16) - * Status Word (includes GC) + * GC header (determined by MMTk) + * Object id (age in allocations); (int) + * Allocation site (int) + * The size of the data section in words. (int) + * The number of reference words. (int) + * Status Word (includes GC) (WORD) * References * Data */ @@ -61,9 +64,9 @@ private static final Offset ID_OFFSET = GC_OFFSET.plus(GC_HEADER_BYTES); /** The offset of the allocation site */ private static final Offset SITE_OFFSET = ID_OFFSET.plus(MemoryConstants.BYTES_IN_INT); - /** The offset of the UInt16 storing the number of data fields */ + /** The offset of the UInt32 storing the number of data fields */ private static final Offset DATACOUNT_OFFSET = SITE_OFFSET.plus(MemoryConstants.BYTES_IN_INT); - /** The offset of the UInt16 storing the number of reference fields */ + /** The offset of the UInt32 storing the number of reference fields */ private static final Offset REFCOUNT_OFFSET = DATACOUNT_OFFSET.plus(MemoryConstants.BYTES_IN_INT); /** The offset of the status word */ private static final Offset STATUS_OFFSET = REFCOUNT_OFFSET.plus(MemoryConstants.BYTES_IN_INT); @@ -168,11 +171,17 @@ // Create an object reference. ObjectReference ref = region.toObjectReference(); + + if (SimulatedMemory.isWatched(region,bytes)) { + Trace.printf("%4d alloc %s [%s-%s]%n", Thread.currentThread().getId(), + region.toObjectReference(), region, region.plus(bytes)); + } if (doubleAlign) region.store(DOUBLE_ALIGN, STATUS_OFFSET); setId(ref, allocateObjectId()); setSite(ref, site); setRefCount(ref, refCount); setDataCount(ref, dataCount); + Sanity.getObjectTable().alloc(region, bytes); if (isWatched(ref)) { System.err.printf("WATCH: Object %s created%n",objectIdString(ref)); @@ -180,6 +189,7 @@ // Call MMTk postAlloc context.postAlloc(ref, null, bytes, allocator); + return ref; } @@ -208,6 +218,10 @@ object.toAddress().store(value << 2, ID_OFFSET); } + public static boolean hasValidId(ObjectReference object) { + return getId(object) > 0 && getId(object) < nextObjectId; + } + /** * Set the call site identifier. */ @@ -325,6 +339,7 @@ * @return The hash code */ public static int getHashCode(ObjectReference ref) { + Sanity.assertValid(ref); Address addr = ref.toAddress(); int status = addr.loadInt(STATUS_OFFSET) & HASHED_AND_MOVED; if (status == 0) { @@ -361,8 +376,12 @@ allocator = c.copyCheckAllocator(from, newBytes, align, allocator); Address toRegion = c.allocCopy(from, newBytes, align, getAlignOffsetWhenCopied(from), allocator); ObjectReference to = toRegion.toObjectReference(); - Trace.trace(Item.COLLECT,"Copying object %s from %s to %s", objectIdString(from), - addressAndSpaceString(from),addressAndSpaceString(to)); + if (isWatched(from) || Trace.isEnabled(Item.COLLECT)) { + Trace.printf(Item.COLLECT,"Copying object %s from %s to %s%n", objectIdString(from), + getString(from), getString(to)); + } + Sanity.assertValid(from); + Sanity.getObjectTable().copy(from, to); Address fromRegion = from.toAddress(); for(int i=0; i < oldBytes; i += MemoryConstants.BYTES_IN_INT) { @@ -379,7 +398,7 @@ if (isWatched(from)) { System.err.printf("WATCH: Object %d copied from %s to %s%n",getId(from), addressAndSpaceString(from),addressAndSpaceString(to)); - dumpObject(to); + dumpObjectHeader("after copy: ", to); } return to; @@ -399,33 +418,51 @@ */ @Override public Address copyTo(ObjectReference from, ObjectReference to, Address toRegion) { - Trace.trace(Item.COLLECT,"Copying object %s from %s/%s to %s/%s", objectIdString(from), + boolean traceThisObject = Trace.isEnabled(Item.COLLECT) || isWatched(from); + if (traceThisObject) { + Trace.printf(Item.COLLECT,"Copying object %s explicitly from %s/%s to %s/%s, region %s%n", objectIdString(from), from,Space.getSpaceForObject(from).getName(), - to,Space.getSpaceForObject(to).getName()); - if (Trace.isEnabled(Item.COLLECT)) { - dumpObjectHeader(from); + to,Space.getSpaceForObject(to).getName(), + toRegion); + dumpObjectHeader("Before copy: ", from); } + Sanity.assertValid(from); + Sanity.getObjectTable().copy(from, to); + + boolean doCopy = !from.equals(to); int bytes = getSize(from); - Address fromRegion = from.toAddress(); - for(int i=0; i < bytes; i += MemoryConstants.BYTES_IN_WORD) { - toRegion.plus(i).store(fromRegion.plus(i).loadInt()); - } - int status = toRegion.loadInt(STATUS_OFFSET); - if ((status & HASHED_AND_MOVED) == HASHED) { - toRegion.store(status | HASHED_AND_MOVED, STATUS_OFFSET); - toRegion.store(getHashCode(from), Offset.fromIntZeroExtend(bytes)); - bytes += MemoryConstants.BYTES_IN_WORD; - } + if (doCopy) { + Address srcRegion = from.toAddress(); + Address dstRegion = to.toAddress(); + for(int i=0; i < bytes; i += MemoryConstants.BYTES_IN_INT) { + int before = srcRegion.plus(i).loadInt(); + dstRegion.plus(i).store(before); + int after = dstRegion.plus(i).loadInt(); + if (traceThisObject) { + System.err.printf("copy %s/%08x -> %s/%08x%n", + srcRegion.plus(i),before,dstRegion.plus(i),after); + } + } - if (Trace.isEnabled(Item.COLLECT)) { - dumpObjectHeader(to); + int status = dstRegion.loadInt(STATUS_OFFSET); + if ((status & HASHED_AND_MOVED) == HASHED) { + dstRegion.store(status | HASHED_AND_MOVED, STATUS_OFFSET); + dstRegion.store(getHashCode(from), Offset.fromIntZeroExtend(bytes)); + bytes += MemoryConstants.BYTES_IN_WORD; + } + Allocator.fillAlignmentGap(toRegion, dstRegion); + } else { + if (traceThisObject) { + Trace.printf(Item.COLLECT,"%s: no copy required%n", getString(from)); + } } - if (isWatched(from)) { - System.err.printf("WATCH: Object %d copied from %s to %s%n",objectIdString(from), - addressAndSpaceString(from),addressAndSpaceString(to)); + Address objectEndAddress = getObjectEndAddress(to); + if (traceThisObject) { + dumpObjectHeader("After copy: ", to); } - return toRegion.plus(bytes); + Sanity.assertValid(to); + return objectEndAddress; } /** @@ -515,6 +552,13 @@ } /** + * Return the start address from an object reference + */ + public static Address getStartAddressFromObject(ObjectReference object) { + return object.toAddress(); + } + + /** * Gets a pointer to the address just past the end of the object. * * @param object The object. @@ -585,7 +629,8 @@ @Override public boolean attemptAvailableBits(ObjectReference object, Word oldVal, Word newVal) { if (Trace.isEnabled(Item.AVBYTE) || isWatched(object)) { - Trace.printf(Item.AVBYTE,"%s.status:%s->%s%n", getString(object),oldVal,newVal); + Word actual = object.toAddress().loadWord(STATUS_OFFSET); + Trace.printf(Item.AVBYTE,"%s.status:%s=%s ? ->%s%n", getString(object),actual,oldVal,newVal); } return object.toAddress().attempt(oldVal, newVal, STATUS_OFFSET); } @@ -599,6 +644,10 @@ */ @Override public Word prepareAvailableBits(ObjectReference object) { + if (Trace.isEnabled(Item.AVBYTE) || isWatched(object)) { + Word old = object.toAddress().loadWord(STATUS_OFFSET); + Trace.printf(Item.AVBYTE,"%s.gcword=%s (prepare)%n", getString(object),old); + } return object.toAddress().prepareWord(STATUS_OFFSET); } @@ -625,6 +674,10 @@ */ @Override public byte readAvailableByte(ObjectReference object) { + if (Trace.isEnabled(Item.AVBYTE) || isWatched(object)) { + byte old = object.toAddress().loadByte(STATUS_OFFSET); + Trace.printf(Item.AVBYTE,"%s.gcbyte=%d%n", getString(object),old); + } return object.toAddress().loadByte(STATUS_OFFSET); } @@ -637,8 +690,8 @@ @Override public void writeAvailableBitsWord(ObjectReference object, Word val) { if (Trace.isEnabled(Item.AVBYTE) || isWatched(object)) { - byte old = object.toAddress().loadByte(STATUS_OFFSET); - Trace.printf(Item.AVBYTE,"%s.gcbyte:%d->%d%n", getString(object),old,val.and(Word.fromIntZeroExtend(0xFF)).toInt()); + Word old = object.toAddress().loadWord(STATUS_OFFSET); + Trace.printf(Item.AVBYTE,"%s.gcword:%s->%s%n", getString(object),old,val); } object.toAddress().store(val, STATUS_OFFSET); } @@ -651,6 +704,10 @@ */ @Override public Word readAvailableBitsWord(ObjectReference object) { + if (Trace.isEnabled(Item.AVBYTE) || isWatched(object)) { + Word old = object.toAddress().loadWord(STATUS_OFFSET); + Trace.printf(Item.AVBYTE,"%s.gcword=%s%n", getString(object),old); + } return object.toAddress().loadWord(STATUS_OFFSET); } @@ -739,12 +796,13 @@ /** * Print an object's header + * @param prefix TODO * @param object The object reference */ - public static void dumpObjectHeader(ObjectReference object) { + public static void dumpObjectHeader(String prefix, ObjectReference object) { int gcWord = object.toAddress().loadInt(GC_OFFSET); int statusWord = object.toAddress().loadInt(STATUS_OFFSET); - System.err.printf("Object %s[%d@%s]<%x,%x>%n",object,getId(object),Mutator.getSiteName(object),gcWord,statusWord); + System.err.printf("%sObject %s[%d@%s]<%x,%x>%n",prefix,object,getId(object),Mutator.getSiteName(object),gcWord,statusWord); } /** @@ -811,6 +869,6 @@ * @return "address/space" */ public static String addressAndSpaceString(Address addr) { - return addressAndSpaceString(addr.toObjectReference()); + return String.format("%s/%s",addr, Space.getSpaceForAddress(addr).getName()); } } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/ReferenceProcessor.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/ReferenceProcessor.java 2010-07-14 13:27:35 UTC (rev 15904) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/ReferenceProcessor.java 2010-07-15 06:36:38 UTC (rev 15905) @@ -92,6 +92,7 @@ * Clear the contents of the table. This is called when reference types are * disabled to make it easier for VMs to change this setting at runtime. */ + @Override public void clear() { Trace.trace(Item.REFERENCES, "Clearing %s references", semantics); currentRefs.clear(); @@ -108,6 +109,7 @@ * @param trace the thread local trace element. * @param nursery true if it is safe to only scan new references. */ + @Override public synchronized void scan(TraceLocal trace, boolean nursery) { Trace.trace(Item.REFERENCES, "Scanning %s references: current = %d, new = %d, %s", semantics,currentRefs.size(), newRefs.size(), nursery ? "nursery" : "full-heap"); @@ -126,7 +128,7 @@ for (ReferenceValue value : set) { ObjectReference referent = value.getObjectValue(); if (trace.isReferentLive(referent)) { - value.traceObject(trace); + value.processReference(trace); } else { value.clear(); } @@ -134,17 +136,24 @@ } /** - * Iterate over all references and forward. + * Iterate over all references and forward. Only relevant to collectors like + * MarkCompact. * @param trace The MMTk trace to forward to * @param nursery The nursery collection hint */ + @Override public void forward(TraceLocal trace, boolean nursery) { - Assert.notImplemented(); + Trace.trace(Item.REFERENCES, "Forwarding %s references: %s", + semantics,nursery ? "nursery" : "full-heap"); + for (ReferenceValue value : oldRefs) { + value.forwardReference(trace); + } } /** * @return the number of references objects on the queue */ + @Override public int countWaitingReferences() { return currentRefs.size() + newRefs.size(); } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Scanning.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Scanning.java 2010-07-14 13:27:35 UTC (rev 15904) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/harness/org/mmtk/harness/vm/Scanning.java 2010-07-15 06:36:38 UTC (rev 15905) @@ -12,12 +12,20 @@ */ package org.mmtk.harness.vm; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import java.util.concurrent.BlockingQueue; +import org.mmtk.harness.Harness; import org.mmtk.harness.Mutator; import org.mmtk.harness.Mutators; import org.mmtk.harness.lang.Trace; import org.mmtk.harness.lang.Trace.Item; +import org.mmtk.harness.lang.runtime.AllocationSite; +import org.mmtk.harness.lang.runtime.ObjectValue; +import org.mmtk.harness.lang.runtime.StackFrame; import org.mmtk.plan.TraceLocal; import org.mmtk.plan.TransitiveClosure; @@ -30,7 +38,42 @@ */ @Uninterruptible public class Scanning extends org.mmtk.vm.Scanning { + public static final int THREAD_ITERATOR_TABLE_ENTRIES = 2048; + /** + * Table of thread iterator objects (to simulate JikesRVM thread iterator objects) + */ + private static volatile ObjectValue threadIteratorTable = null; + + /** + * Initialize the thread iterator table + * @param m Calling mutator + */ + public static void initThreadIteratorTable(Mutator m) { + if (Harness.allocDuringCollection.getValue() && threadIteratorTable == null) { + threadIteratorTable = new ObjectValue(m.allocThreadIteratorTable()); + } + } + + /** + * @param m Mutator + * @param obj The iterator object + */ + public static void setThreadIteratorObject(Mutator m, ObjectReference obj) { + m.storeReferenceField(threadIteratorTable.getObjectValue(), m.getContext().getId() % THREAD_ITERATOR_TABLE_ENTRIES, obj); + } + + /** + * Internal harness method to get all non-stack roots + * @return The set of roots + */ + public static Set<ObjectValue> getRoots() { + if (threadIteratorTable == null) + return Collections.emptySet(); + return new HashSet<ObjectValue>(Arrays.asList(threadIteratorTable)); + } + + /** * Delegated scanning of a object, processing each pointer field * encountered. * @param trace The trace @@ -39,10 +82,12 @@ */ @Override public void scanObject(TransitiveClosure trace, ObjectReference object) { + Trace.trace(Item.SCAN, "Scanning object %s", ObjectModel.addressAndSpaceString(object)); int refs = ObjectModel.getRefs(object); Address first = object.toAddress().plus(ObjectModel.REFS_OFFSET); for (int i=0; i < refs; i++) { + Trace.trace(Item.SCAN, " Edge %s", first.plus(i << LOG_BYTES_IN_ADDRESS).loadObjectReference()); trace.processEdge(object, first.plus(i << LOG_BYTES_IN_ADDRESS)); } } @@ -85,6 +130,7 @@ public synchronized void resetThreadCounter() { assert mutatorsToScan.size() == 0; mutatorsToScan = null; + ObjectValue.startRootDiscoveryPhase(); } /** @@ -121,7 +167,19 @@ */ @Override public void computeStaticRoots(TraceLocal trace) { - /* None */ + if (threadIteratorTable != null) { + if (Trace.isEnabled(Item.ROOTS)) { + Trace.trace(Item.ROOTS, "Tracing root %s", ObjectModel.getString(threadIteratorTable.getObjectValue())); + } + threadIteratorTable.traceObject(trace); + if (StackFrame.ASSERT_WILL_NOT_MOVE) { + assert trace.willNotMoveInCurrentCollection(threadIteratorTable.getObjectValue()) : + threadIteratorTable.getObjectValue()+" has been traced but willNotMoveInCurrentCollection is still false"; + } + if (Trace.isEnabled(Item.ROOTS)) { + Trace.trace(Item.ROOTS, "new value of %s", ObjectModel.getString(threadIteratorTable.getObjectValue())); + } + } } /** @@ -141,7 +199,7 @@ */ @Override public void computeGlobalRoots(TraceLocal trace) { - /* None */ + // none } /** @@ -173,8 +231,15 @@ Mutator m = mutatorsToScan.poll(); if (m == null) break; + if (Harness.allocDuringCollection.getValue()) { + Trace.trace(Item.COLLECT,"Allocating thread iterator object"); + setThreadIteratorObject(m, m.alloc(0, 0, false, AllocationSite.INTERNAL_SITE_ID)); + } Trace.trace(Item.COLLECT,"Computing roots for mutator"); m.computeThreadRoots(trace); + if (Harness.allocDuringCollection.getValue()) { + setThreadIteratorObject(m, ObjectReference.nullReference()); + } } } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Assert.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Assert.java 2010-07-14 13:27:35 UTC (rev 15904) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Assert.java 2010-07-15 06:36:38 UTC (rev 15905) @@ -42,6 +42,8 @@ * @param message the string to log */ public final void fail(String message) { + Space.printUsagePages(); + Space.printUsageMB(); VM.sysFail(message); } Modified: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java =================================================================== --- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java 2010-07-14 13:27:35 UTC (rev 15904) +++ rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java 2010-07-15 06:36:38 UTC (rev 15905) @@ -64,7 +64,7 @@ allocator = plan.copyCheckAllocator(from, bytes, align, allocator); Address region = MemoryManager.allocateSpace(plan, bytes, align, offset, allocator, from); - Object toObj = org.jikesrvm.objectmodel.ObjectModel.moveObject(region, from.toObject(), bytes, false, type); + Object toObj = org.jikesrvm.objectmodel.ObjectModel.moveObject(region, from.toObject(), bytes, type); ObjectReference to = ObjectReference.fromObject(toObj); plan.postCopy(to, ObjectReference.fromObject(tib), bytes, allocator); return to; @@ -80,7 +80,7 @@ allocator = plan.copyCheckAllocator(from, bytes, align, allocator); Address region = MemoryManager.allocateSpace(plan, bytes, align, offset, allocator, from); - Object toObj = org.jikesrvm.objectmodel.ObjectModel.moveObject(region, from.toObject(), bytes, false, type); + Object toObj = org.jikesrvm.objectmodel.ObjectModel.moveObject(region, from.toObject(), bytes, type); ObjectReference to = ObjectReference.fromObject(toObj); plan.postCopy(to, ObjectReference.fromObject(tib), bytes, allocator); if (type == RVMType.CodeArrayType) { @@ -132,12 +132,12 @@ if (type.isClassType()) { RVMClass classType = type.asClass(); bytes = org.jikesrvm.objectmodel.ObjectMo... [truncated message content] |
From: <dfr...@us...> - 2010-08-18 00:39:58
|
Revision: 15973 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15973&view=rev Author: dframpton-oss Date: 2010-08-18 00:39:51 +0000 (Wed, 18 Aug 2010) Log Message: ----------- Fix some properties Property Changed: ---------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/TimeoutThread.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/TypeLiteral.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/AllocDuringCollection.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/GcSanity.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/ObjectTable.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Clock.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/options/PerfEvents.java rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/TimeoutThread.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/TypeLiteral.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/AllocDuringCollection.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/GcSanity.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/ObjectTable.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Clock.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactCollector.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/PerfEvents.java rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/TimeoutThread.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/lang/ast/TypeLiteral.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/options/AllocDuringCollection.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/GcSanity.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/src/org/mmtk/harness/sanity/ObjectTable.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Clock.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/policy/MarkCompactCollector.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/options/PerfEvents.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/tag/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/TimeoutThread.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/TypeLiteral.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/AllocDuringCollection.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/GcSanity.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/ObjectTable.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Clock.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactCollector.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/PerfEvents.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Property changes on: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/PerfEvent.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfr...@us...> - 2010-08-18 01:06:15
|
Revision: 15975 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15975&view=rev Author: dframpton-oss Date: 2010-08-18 01:06:09 +0000 (Wed, 18 Aug 2010) Log Message: ----------- Remove empty files that should have been deleted on merge Removed Paths: ------------- rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/perfctr.C rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/perfctr.h rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/perfctr.C rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/perfctr.h Deleted: rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/perfctr.C =================================================================== Deleted: rvmroot/branches/RVM-777-NewMMTkGlue/tag/tools/bootImageRunner/perfctr.h =================================================================== Deleted: rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/perfctr.C =================================================================== Deleted: rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/perfctr.h =================================================================== This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |