<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-21114</id>
	<title>Nabble - Jikes RVM - Commits</title>
	<updated>2009-11-25T16:51:05Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Jikes-RVM---Commits-f21114.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Jikes-RVM---Commits-f21114.html" />
	<subtitle type="html">&lt;a href=&quot;http://jikesrvm.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikes RVM (Research Virtual Machine)&lt;/a&gt;&amp;nbsp;commit messages.
&lt;br&gt;This list is automatically posted to whenever someone commits to the Jikes RVM CVS repository.
&lt;br&gt;Subscribe to it if you want to get immediate notice of such commits.
&lt;br&gt;Actual discussion of the commits should take place on the jikesrvm-core list instead, and replies to messages on this list automatically go to jikesrvm-core. 
&lt;br&gt;It does not make sense for a human to subscribe to this list unless you're also on jikesrvm-core.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26522890</id>
	<title>SF.net SVN: jikesrvm:[15795] rvmroot/trunk</title>
	<published>2009-11-25T16:51:05Z</published>
	<updated>2009-11-25T16:51:05Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15795
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15795&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15795&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-11-26 00:51:05 +0000 (Thu, 26 Nov 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Another step toward RVM845. &amp;nbsp;Added Word and Address APIs to the barrier interface.
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java	2009-11-26 00:51:05 UTC (rev 15795)
&lt;br&gt;@@ -763,6 +763,126 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a word. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new word
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void wordWrite(ObjectReference src, Address slot, Word value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a word. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The word that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public Word wordRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Word.zero();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of words are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean wordBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write an address. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new address
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void addressWrite(ObjectReference src, Address slot, Address value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read an address. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The address that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public Address addressRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Address.zero();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of addresses are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean addressBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Write an object reference. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java	2009-11-26 00:51:05 UTC (rev 15795)
&lt;br&gt;@@ -22,13 +22,13 @@
&lt;br&gt;&amp;nbsp; * issues with ordering of static initialization.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;@Uninterruptible public abstract class PlanConstraints {
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on java.lang.reference types. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on java.lang.reference types. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsJavaLangReferenceReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on booleans. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsBooleanWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on booleans. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on booleans. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsBooleanReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan can perform bulk boolean arraycopy barriers. */
&lt;br&gt;@@ -37,7 +37,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on bytes. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsByteWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on bytes. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on bytes. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsByteReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan can perform bulk byte arraycopy barriers. */
&lt;br&gt;@@ -46,7 +46,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on chars. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsCharWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on chars. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on chars. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsCharReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan can perform bulk char arraycopy barriers. */
&lt;br&gt;@@ -55,7 +55,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on shorts. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsShortWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on shorts. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on shorts. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsShortReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan can perform bulk short arraycopy barriers. */
&lt;br&gt;@@ -64,7 +64,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on ints. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsIntWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on ints. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on ints. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsIntReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan can perform bulk int arraycopy barriers. */
&lt;br&gt;@@ -73,7 +73,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on longs. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsLongWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on longs. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on longs. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsLongReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan can perform bulk long arraycopy barriers. */
&lt;br&gt;@@ -82,7 +82,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on floats. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsFloatWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on floats. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on floats. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsFloatReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan can perform bulk float arraycopy barriers. */
&lt;br&gt;@@ -91,16 +91,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on doubles. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsDoubleWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on doubles. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on doubles. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsDoubleReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan can perform bulk double arraycopy barriers. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean doubleBulkCopySupported() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on words. */
&lt;br&gt;+ &amp;nbsp;public boolean needsWordWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on words. */
&lt;br&gt;+ &amp;nbsp;public boolean needsWordReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk word arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean wordBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on addresss. */
&lt;br&gt;+ &amp;nbsp;public boolean needsAddressWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on addresss. */
&lt;br&gt;+ &amp;nbsp;public boolean needsAddressReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk address arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean addressBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on object references. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on object references. */
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires read barriers on object references. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsObjectReferenceReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires non-heap write barriers on object references. */
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java	2009-11-26 00:51:05 UTC (rev 15795)
&lt;br&gt;@@ -18,9 +18,12 @@
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Entrypoint;
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Inline;
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Uninterruptible;
&lt;br&gt;+import org.vmmagic.unboxed.Address;
&lt;br&gt;+import org.vmmagic.unboxed.AddressArray;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.ObjectReference;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.Offset;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.Word;
&lt;br&gt;+import org.vmmagic.unboxed.WordArray;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public class Barriers implements org.mmtk.utility.Constants {
&lt;br&gt;@@ -912,10 +915,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for a bulk copy of doubles (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param src The source array
&lt;br&gt;- &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param dst The destination array
&lt;br&gt;- &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;- &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static void doubleBulkCopy(double[] src, Offset srcOffset, double[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;@@ -927,6 +930,226 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on word putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_WORD_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsWordWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on word putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_WORD_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_WORD_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on word arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_WORD_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_WORD_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on word getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_WORD_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsWordReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on word getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_WORD_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_WORD_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on word arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_WORD_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_WORD_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector supports the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean WORD_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_WORD_ASTORE_BARRIER || NEEDS_WORD_ALOAD_BARRIER) || Selected.Constraints.get().wordBulkCopySupported();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of words into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void wordFieldWrite(Object ref, Word value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_WORD_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().wordWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void wordArrayWrite(WordArray ref, int index, Word value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_WORD_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_WORD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().wordWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static Word wordFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_WORD_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().wordRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Word.zero();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static Word wordArrayRead(WordArray ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_WORD_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_WORD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().wordRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Word.zero();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of words (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static void wordBulkCopy(WordArray src, Offset srcOffset, WordArray dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(WORD_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().wordBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on address putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_ADDRESS_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsAddressWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on address putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_ADDRESS_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_ADDRESS_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on address arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_ADDRESS_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_ADDRESS_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on address getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_ADDRESS_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsAddressReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on address getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_ADDRESS_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_ADDRESS_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on address arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_ADDRESS_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_ADDRESS_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector supports the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean ADDRESS_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_ADDRESS_ASTORE_BARRIER || NEEDS_ADDRESS_ALOAD_BARRIER) || Selected.Constraints.get().addressBulkCopySupported();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of addresss into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void addressFieldWrite(Object ref, Address value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_ADDRESS_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().addressWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void addressArrayWrite(AddressArray ref, int index, Address value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_ADDRESS_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().addressWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static Address addressFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_ADDRESS_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().addressRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Address.zero();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static Address addressArrayRead(AddressArray ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_ADDRESS_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().addressRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Address.zero();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of addresss (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static void addressBulkCopy(AddressArray src, Offset srcOffset, AddressArray dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(ADDRESS_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().addressBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the garbage collector requires write barriers on reference putfield, arraystore or modifycheck */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static final boolean NEEDS_OBJECT_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsObjectReferenceWriteBarrier();
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires write barriers on reference putfield */
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26522890&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15795--rvmroot-trunk-tp26522890p26522890.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26507505</id>
	<title>SF.net SVN: jikesrvm:[15794] rvmroot/trunk</title>
	<published>2009-11-24T20:44:53Z</published>
	<updated>2009-11-24T20:44:53Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15794
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15794&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15794&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-11-25 04:44:53 +0000 (Wed, 25 Nov 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Refactor bulk copying for RVM845 and RVM861
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/utility/Constants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Memory.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -326,20 +326,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean booleanBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;@@ -390,20 +386,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean byteBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;@@ -454,20 +446,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean charBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;@@ -518,25 +506,22 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean shortBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Write a int. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;@@ -582,20 +567,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean intBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;@@ -646,20 +627,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean longBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;@@ -710,20 +687,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean floatBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;@@ -774,20 +747,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean doubleBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;@@ -838,20 +807,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;&amp;nbsp; &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: bulk copy is supported and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -31,48 +31,72 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on booleans. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsBooleanReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk boolean arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean booleanBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on bytes. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsByteWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on bytes. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsByteReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk byte arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean byteBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on chars. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsCharWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on chars. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsCharReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk char arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean charBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on shorts. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsShortWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on shorts. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsShortReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk short arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean shortBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on ints. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsIntWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on ints. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsIntReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk int arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean intBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on longs. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsLongWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on longs. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsLongReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk long arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean longBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on floats. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsFloatWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on floats. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsFloatReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk float arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean floatBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on doubles. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsDoubleWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on doubles. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsDoubleReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk double arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean doubleBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on object references. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -85,6 +109,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires non-heap read barriers on object references. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsObjectReferenceNonHeapReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk object arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceBulkCopySupported() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires linear scanning. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsLinearScan() { return org.mmtk.utility.Constants.SUPPORT_CARD_SCANNING;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -52,6 +52,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsObjectReferenceNonHeapWriteBarrier() { return Gen.USE_NON_HEAP_OBJECT_REFERENCE_WRITE_BARRIER; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan can perform bulk object arraycopy barriers. */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceBulkCopySupported() { return true; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The specialized scan methods required */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public int numSpecializedScans() { return 2; }
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -259,26 +259,21 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * In this case, we remember the mutated source address range and
&lt;br&gt;&amp;nbsp; &amp;nbsp; * will scan that address range at GC time.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference dst, Offset dstOffset,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// We can ignore when src is in old space, right?
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (!Gen.inNursery(dst))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;arrayRemset.insert(dst.toAddress().plus(dstOffset),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst.toAddress().plus(dstOffset.plus(bytes)));
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Gen.inNursery(dst)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Address start = dst.toAddress().plus(dstOffset);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;arrayRemset.insert(start, start.plus(bytes));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -18,7 +18,6 @@
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.*;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.Address;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.ObjectReference;
&lt;br&gt;-import org.vmmagic.unboxed.Offset;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.Word;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;@@ -78,32 +77,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * A number of references are about to be copied from object
&lt;br&gt;- &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;- &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;- &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;- &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;- &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// TODO: Currently, read barriers implies that this is never used, perhaps
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// &amp;nbsp; &amp;nbsp; &amp;nbsp; we might want to use it sometime anyway?
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Read a reference. Take appropriate read barrier action, and
&lt;br&gt;&amp;nbsp; &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/Constants.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/utility/Constants.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/utility/Constants.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -72,6 +72,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * TODO MMTk should really become independent of these Java types
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;byte LOG_BYTES_IN_CHAR= 1;
&lt;br&gt;+ &amp;nbsp;int BYTES_IN_CHAR = 1 &amp;lt;&amp;lt; LOG_BYTES_IN_CHAR;
&lt;br&gt;+ &amp;nbsp;byte LOG_BITS_IN_CHAR = LOG_BITS_IN_BYTE + LOG_BYTES_IN_CHAR;
&lt;br&gt;+ &amp;nbsp;int BITS_IN_CHAR = 1 &amp;lt;&amp;lt; LOG_BITS_IN_CHAR;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;byte LOG_BYTES_IN_SHORT = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp;int BYTES_IN_SHORT = 1 &amp;lt;&amp;lt; LOG_BYTES_IN_SHORT;
&lt;br&gt;&amp;nbsp; &amp;nbsp;byte LOG_BITS_IN_SHORT = LOG_BITS_IN_BYTE + LOG_BYTES_IN_SHORT;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMArray.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMArray.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMArray.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -616,20 +616,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(srcIdx + len) &amp;lt;= src.length &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;gt;= 0 &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt;= (dstIdx + BYTES_IN_ADDRESS)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy8Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((src != dst || srcIdx &amp;gt;= (dstIdx + BYTES_IN_ADDRESS)) &amp;&amp; BYTE_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_BOOLEAN_ASTORE_BARRIER || NEEDS_BOOLEAN_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.byteBulkCopy(src, srcOffset, dst, dstOffset, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy8Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyOverlap(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Outlined unlikely case of potentially overlapping subarrays
&lt;br&gt;- &amp;nbsp;// Motivation is to reduce code space costs of inlined array copy.
&lt;br&gt;- &amp;nbsp;@NoInline
&lt;br&gt;- &amp;nbsp;private static void arraycopyOverlap(byte[] src, int srcIdx, byte[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of bytes. &amp;nbsp;Used
&lt;br&gt;+ &amp;nbsp; * when bulk copy is not possible.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@NoInline // unlikely case, so reduce code space costs
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(byte[] src, int srcIdx, byte[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (srcIdx &amp;lt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcIdx += len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstIdx += len;
&lt;br&gt;@@ -663,20 +677,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(srcIdx + len) &amp;lt;= src.length &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;gt;= 0 &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt;= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_BOOLEAN)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy8Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((src != dst || srcIdx &amp;gt;= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_BOOLEAN)) &amp;&amp; BOOLEAN_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_BOOLEAN_ASTORE_BARRIER || NEEDS_BOOLEAN_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx&amp;lt;&amp;lt;LOG_BYTES_IN_BOOLEAN);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx&amp;lt;&amp;lt;LOG_BYTES_IN_BOOLEAN);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.booleanBulkCopy(src, srcOffset, dst, dstOffset, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy8Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyOverlap(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Outlined unlikely case of potentially overlapping subarrays
&lt;br&gt;- &amp;nbsp;// Motivation is to reduce code space costs of inlined array copy.
&lt;br&gt;- &amp;nbsp;@NoInline
&lt;br&gt;- &amp;nbsp;private static void arraycopyOverlap(boolean[] src, int srcIdx, boolean[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of booleans. &amp;nbsp;Used
&lt;br&gt;+ &amp;nbsp; * when bulk copy is not possible.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@NoInline // unlikely case, so reduce code space costs
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(boolean[] src, int srcIdx, boolean[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (srcIdx &amp;lt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcIdx += len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstIdx += len;
&lt;br&gt;@@ -710,20 +738,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(srcIdx + len) &amp;lt;= src.length &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;gt;= 0 &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt;= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_SHORT)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy16Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((src != dst || srcIdx &amp;gt;= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_SHORT)) &amp;&amp; SHORT_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_SHORT_ASTORE_BARRIER || NEEDS_SHORT_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx&amp;lt;&amp;lt;LOG_BYTES_IN_SHORT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx&amp;lt;&amp;lt;LOG_BYTES_IN_SHORT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.shortBulkCopy(src, srcOffset, dst, dstOffset, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy16Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyOverlap(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Outlined unlikely case of potentially overlapping subarrays
&lt;br&gt;- &amp;nbsp;// Motivation is to reduce code space costs of inlined array copy.
&lt;br&gt;- &amp;nbsp;@NoInline
&lt;br&gt;- &amp;nbsp;private static void arraycopyOverlap(short[] src, int srcIdx, short[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of shorts. &amp;nbsp;Used
&lt;br&gt;+ &amp;nbsp; * when bulk copy is not possible.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@NoInline // unlikely case, so reduce code space costs
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(short[] src, int srcIdx, short[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (srcIdx &amp;lt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcIdx += len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstIdx += len;
&lt;br&gt;@@ -757,20 +799,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(srcIdx + len) &amp;lt;= src.length &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;gt;= 0 &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt;= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_CHAR)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy16Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((src != dst || srcIdx &amp;gt;= (dstIdx + BYTES_IN_ADDRESS / BYTES_IN_CHAR)) &amp;&amp; CHAR_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_CHAR_ASTORE_BARRIER || NEEDS_CHAR_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx&amp;lt;&amp;lt;LOG_BYTES_IN_CHAR);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx&amp;lt;&amp;lt;LOG_BYTES_IN_CHAR);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.charBulkCopy(src, srcOffset, dst, dstOffset, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy16Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyOverlap(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Outlined unlikely case of potentially overlapping subarrays
&lt;br&gt;- &amp;nbsp;// Motivation is to reduce code space costs of inlined array copy.
&lt;br&gt;- &amp;nbsp;@NoInline
&lt;br&gt;- &amp;nbsp;private static void arraycopyOverlap(char[] src, int srcIdx, char[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of chars. &amp;nbsp;Used
&lt;br&gt;+ &amp;nbsp; * when bulk copy is not possible.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@NoInline // unlikely case, so reduce code space costs
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(char[] src, int srcIdx, char[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (srcIdx &amp;lt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcIdx += len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstIdx += len;
&lt;br&gt;@@ -804,20 +860,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(srcIdx + len) &amp;lt;= src.length &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;gt;= 0 &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt;= dstIdx) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy32Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((src != dst || srcIdx &amp;gt;= dstIdx) &amp;&amp; INT_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_INT_ASTORE_BARRIER || NEEDS_INT_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx&amp;lt;&amp;lt;LOG_BYTES_IN_INT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx&amp;lt;&amp;lt;LOG_BYTES_IN_INT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.intBulkCopy(src, srcOffset, dst, dstOffset, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy32Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyOverlap(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Outlined unlikely case of potentially overlapping subarrays
&lt;br&gt;- &amp;nbsp;// Motivation is to reduce code space costs of inlined array copy.
&lt;br&gt;- &amp;nbsp;@NoInline
&lt;br&gt;- &amp;nbsp;private static void arraycopyOverlap(int[] src, int srcIdx, int[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of ints. &amp;nbsp;Used
&lt;br&gt;+ &amp;nbsp; * when bulk copy is not possible.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@NoInline // unlikely case, so reduce code space costs
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(int[] src, int srcIdx, int[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (srcIdx &amp;lt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcIdx += len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstIdx += len;
&lt;br&gt;@@ -851,20 +921,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(srcIdx + len) &amp;lt;= src.length &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;gt;= 0 &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt; dstIdx) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy32Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt; dstIdx &amp;&amp; FLOAT_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_FLOAT_ASTORE_BARRIER || NEEDS_FLOAT_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx&amp;lt;&amp;lt;LOG_BYTES_IN_FLOAT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx&amp;lt;&amp;lt;LOG_BYTES_IN_FLOAT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.floatBulkCopy(src, srcOffset, dst, dstOffset, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy32Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyOverlap(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Outlined unlikely case of potentially overlapping subarrays
&lt;br&gt;- &amp;nbsp;// Motivation is to reduce code space costs of inlined array copy.
&lt;br&gt;- &amp;nbsp;@NoInline
&lt;br&gt;- &amp;nbsp;private static void arraycopyOverlap(float[] src, int srcIdx, float[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of floats. &amp;nbsp;Used
&lt;br&gt;+ &amp;nbsp; * when bulk copy is not possible.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@NoInline // unlikely case, so reduce code space costs
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(float[] src, int srcIdx, float[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (srcIdx &amp;lt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcIdx += len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstIdx += len;
&lt;br&gt;@@ -898,20 +982,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(srcIdx + len) &amp;lt;= src.length &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;gt;= 0 &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt; dstIdx) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy64Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((src != dst || srcIdx &amp;gt; dstIdx) &amp;&amp; LONG_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_LONG_ASTORE_BARRIER || NEEDS_LONG_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx&amp;lt;&amp;lt;LOG_BYTES_IN_LONG);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx&amp;lt;&amp;lt;LOG_BYTES_IN_LONG);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.longBulkCopy(src, srcOffset, dst, dstOffset, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy64Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyOverlap(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Outlined unlikely case of potentially overlapping subarrays
&lt;br&gt;- &amp;nbsp;// Motivation is to reduce code space costs of inlined array copy.
&lt;br&gt;- &amp;nbsp;@NoInline
&lt;br&gt;- &amp;nbsp;private static void arraycopyOverlap(long[] src, int srcIdx, long[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of longs. &amp;nbsp;Used
&lt;br&gt;+ &amp;nbsp; * when bulk copy is not possible.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@NoInline // unlikely case, so reduce code space costs
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(long[] src, int srcIdx, long[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (srcIdx &amp;lt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcIdx += len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstIdx += len;
&lt;br&gt;@@ -945,20 +1043,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(srcIdx + len) &amp;lt;= src.length &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;gt;= 0 &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src != dst || srcIdx &amp;gt; dstIdx) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy64Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((src != dst || srcIdx &amp;gt; dstIdx) &amp;&amp; DOUBLE_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_DOUBLE_ASTORE_BARRIER || NEEDS_DOUBLE_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx&amp;lt;&amp;lt;LOG_BYTES_IN_DOUBLE);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx&amp;lt;&amp;lt;LOG_BYTES_IN_DOUBLE);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.doubleBulkCopy(src, srcOffset, dst, dstOffset, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy64Bit(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyOverlap(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Outlined unlikely case of potentially overlapping subarrays
&lt;br&gt;- &amp;nbsp;// Motivation is to reduce code space costs of inlined array copy.
&lt;br&gt;- &amp;nbsp;@NoInline
&lt;br&gt;- &amp;nbsp;private static void arraycopyOverlap(double[] src, int srcIdx, double[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of doubles. &amp;nbsp;Used
&lt;br&gt;+ &amp;nbsp; * when bulk copy is not possible.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@NoInline // unlikely case, so reduce code space costs
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(double[] src, int srcIdx, double[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (srcIdx &amp;lt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcIdx += len;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstIdx += len;
&lt;br&gt;@@ -994,10 +1106,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(dstIdx + len) &amp;lt;= dst.length) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMType lhs = Magic.getObjectType(dst).asArray().getElementType();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMType rhs = Magic.getObjectType(src).asArray().getElementType();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((lhs == rhs) || (lhs == RVMType.JavaLangObjectType) || RuntimeEntrypoints.isAssignableWith(lhs, rhs)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fastArrayCopy(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyNoCheckcast(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;slowArrayCopy(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemeal(src, srcIdx, dst, dstIdx, len);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;failWithIndexOutOfBoundsException();
&lt;br&gt;@@ -1015,50 +1128,65 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param src The source array
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param dst The destination array
&lt;br&gt;- &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting source index
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;private static void fastArrayCopy(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) {
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;boolean loToHi = (srcIdx &amp;gt; dstIdx); &amp;nbsp;// direction of copy
&lt;br&gt;+ &amp;nbsp;private static void arraycopyNoCheckcast(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset = Offset.fromIntZeroExtend(srcIdx &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int bytes = len &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (!NEEDS_OBJECT_ALOAD_BARRIER &amp;&amp; ((src != dst) || loToHi)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!NEEDS_OBJECT_ASTORE_BARRIER ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;!Barriers.objectBulkCopy(src, srcOffset, dst, dstOffset, bytes)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.objectAsAddress(src).plus(srcOffset),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (((src != dst) || (srcIdx &amp;gt; dstIdx)) &amp;&amp; OBJECT_BULK_COPY_SUPPORTED) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_ASTORE_BARRIER || NEEDS_OBJECT_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectBulkCopy(src, srcOffset, dst, dstOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;// set up things according to the direction of the copy
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;int increment;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (loToHi) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;increment = BYTES_IN_ADDRESS;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;arraycopyPiecemealNoCheckcast(src, dst, len, srcOffset, dstOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform element-by-element arraycopy for array of objects without
&lt;br&gt;+ &amp;nbsp; * performing checkcast. &amp;nbsp;Used when bulk copy is not possible, but
&lt;br&gt;+ &amp;nbsp; * checkcast is still not necessary. &amp;nbsp;If barriers are required they
&lt;br&gt;+ &amp;nbsp; * must be explicitly invoked.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemealNoCheckcast(Object[] src, Object[] dst, int len,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset srcOffset, Offset dstOffset, int bytes) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// set up things according to the direction of the copy
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int increment;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (srcOffset.sGT(dstOffset)) { // direction of copy
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;increment = BYTES_IN_ADDRESS;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;srcOffset = srcOffset.plus(bytes - BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;dstOffset = dstOffset.plus(bytes - BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;increment = -BYTES_IN_ADDRESS;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// perform the copy
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while (len-- != 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Object value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = Barriers.objectArrayRead(src, srcOffset.toInt() &amp;gt;&amp;gt; LOG_BYTES_IN_ADDRESS);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcOffset = srcOffset.plus(bytes - BYTES_IN_ADDRESS);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstOffset = dstOffset.plus(bytes - BYTES_IN_ADDRESS);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;increment = -BYTES_IN_ADDRESS;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = Magic.getObjectAtOffset(src, srcOffset);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;// perform the copy
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;while (len-- != 0) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object value;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = Barriers.objectArrayRead(src, srcOffset.toInt() &amp;gt;&amp;gt; LOG_BYTES_IN_ADDRESS);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = Magic.getObjectAtOffset(src, srcOffset);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectArrayWrite(dst, dstOffset.toInt() &amp;gt;&amp;gt; LOG_BYTES_IN_ADDRESS, value);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(dst, dstOffset, value);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcOffset = srcOffset.plus(increment);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dstOffset = dstOffset.plus(increment);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectArrayWrite(dst, dstOffset.toInt() &amp;gt;&amp;gt; LOG_BYTES_IN_ADDRESS, value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(dst, dstOffset, value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;srcOffset = srcOffset.plus(increment);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;dstOffset = dstOffset.plus(increment);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1076,7 +1204,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param dstIdx The starting destination index
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;private static void slowArrayCopy(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) {
&lt;br&gt;+ &amp;nbsp;private static void arraycopyPiecemeal(Object[] src, int srcIdx, Object[] dst, int dstIdx, int len) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// must perform copy in correct order
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if ((src != dst) || srcIdx &amp;gt; dstIdx) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// non-overlapping case: straightforward
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -13,7 +13,8 @@
&lt;br&gt;&amp;nbsp;package org.jikesrvm.mm.mminterface;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.jikesrvm.runtime.Magic;
&lt;br&gt;-import org.mmtk.vm.VM;
&lt;br&gt;+import org.jikesrvm.runtime.Memory;
&lt;br&gt;+import org.jikesrvm.VM;
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Entrypoint;
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Inline;
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Uninterruptible;
&lt;br&gt;@@ -38,8 +39,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_JAVA_LANG_REFERENCE_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference result = Selected.Mutator.get().javaLangReferenceReadBarrier(ObjectReference.fromObject(obj));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result.toObject();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -57,6 +58,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BOOLEAN_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_BOOLEAN_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on boolean arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BOOLEAN_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_BOOLEAN_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector does not support the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean BOOLEAN_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_BOOLEAN_ASTORE_BARRIER || NEEDS_BOOLEAN_ALOAD_BARRIER) || Selected.Constraints.get().booleanBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of booleans into fields of instances (ie putfield).
&lt;br&gt;@@ -72,8 +75,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_BOOLEAN_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().booleanWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -87,13 +90,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void booleanArrayWrite(Object ref, int index, boolean value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void booleanArrayWrite(boolean[] ref, int index, boolean value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_BOOLEAN_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_BOOLEAN);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().booleanWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -107,11 +110,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static boolean booleanFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_BOOLEAN_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().booleanRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -124,38 +127,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static boolean booleanArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static boolean booleanArrayRead(boolean[] ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_BOOLEAN_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_BOOLEAN);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().booleanRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for a bulk copy of booleans (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean booleanBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().booleanBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void booleanBulkCopy(boolean[] src, Offset srcOffset, boolean[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(BOOLEAN_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().booleanBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy8Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the garbage collector requires write barriers on byte putfield, arraystore or modifycheck */
&lt;br&gt;@@ -170,6 +167,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BYTE_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_BYTE_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on byte arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BYTE_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_BYTE_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector does not support the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean BYTE_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_BYTE_ASTORE_BARRIER || NEEDS_BYTE_ALOAD_BARRIER) || Selected.Constraints.get().byteBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of bytes into fields of instances (ie putfield).
&lt;br&gt;@@ -185,8 +184,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_BYTE_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().byteWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -200,13 +199,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void byteArrayWrite(Object ref, int index, byte value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void byteArrayWrite(byte[] ref, int index, byte value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_BYTE_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().byteWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -220,11 +219,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static byte byteFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_BYTE_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().byteRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -237,38 +236,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static byte byteArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static byte byteArrayRead(byte[] ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_BYTE_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().byteRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of bytes (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean byteBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().byteBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void byteBulkCopy(byte[] src, Offset srcOffset, byte[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(BYTE_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().byteBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy8Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -284,6 +277,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_CHAR_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_CHAR_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on char arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_CHAR_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_CHAR_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector does not support the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean CHAR_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_CHAR_ASTORE_BARRIER || NEEDS_CHAR_ALOAD_BARRIER) || Selected.Constraints.get().charBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of chars into fields of instances (ie putfield).
&lt;br&gt;@@ -299,8 +294,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_CHAR_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().charWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -314,13 +309,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void charArrayWrite(Object ref, int index, char value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void charArrayWrite(char[] ref, int index, char value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_CHAR_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().charWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -334,11 +329,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static char charFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_CHAR_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().charRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -351,38 +346,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static char charArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static char charArrayRead(char[] ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_CHAR_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_CHAR);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().charRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of chars (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean charBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().charBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void charBulkCopy(char[] src, Offset srcOffset, char[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(CHAR_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().charBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy16Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -398,6 +387,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_SHORT_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_SHORT_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on short arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_SHORT_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_SHORT_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector does not support the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean SHORT_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_SHORT_ASTORE_BARRIER || NEEDS_SHORT_ALOAD_BARRIER) || Selected.Constraints.get().shortBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of shorts into fields of instances (ie putfield).
&lt;br&gt;@@ -413,8 +404,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_SHORT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().shortWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -428,13 +419,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void shortArrayWrite(Object ref, int index, short value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void shortArrayWrite(short[] ref, int index, short value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_SHORT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_SHORT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().shortWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -448,11 +439,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static short shortFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_SHORT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().shortRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -465,41 +456,36 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static short shortArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static short shortArrayRead(short[] ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_SHORT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_SHORT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().shortRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of shorts (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean shortBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().shortBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void shortBulkCopy(short[] src, Offset srcOffset, short[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(SHORT_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().shortBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy16Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the garbage collector requires write barriers on int putfield, arraystore or modifycheck */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static final boolean NEEDS_INT_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsIntWriteBarrier();
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires write barriers on int putfield */
&lt;br&gt;@@ -512,6 +498,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_INT_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_INT_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on int arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_INT_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_INT_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector does not support the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean INT_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_INT_ASTORE_BARRIER || NEEDS_INT_ALOAD_BARRIER) || Selected.Constraints.get().intBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of ints into fields of instances (ie putfield).
&lt;br&gt;@@ -527,8 +515,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_INT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().intWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -542,13 +530,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void intArrayWrite(Object ref, int index, int value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void intArrayWrite(int[] ref, int index, int value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_INT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_INT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().intWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -562,11 +550,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static int intFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_INT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().intRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -579,41 +567,36 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static int intArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static int intArrayRead(int[] ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_INT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_INT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().intRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of ints (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean intBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().intBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void intBulkCopy(int[] src, Offset srcOffset, int[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(INT_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().intBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy32Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the garbage collector requires write barriers on long putfield, arraystore or modifycheck */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static final boolean NEEDS_LONG_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsLongWriteBarrier();
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires write barriers on long putfield */
&lt;br&gt;@@ -626,6 +609,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_LONG_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_LONG_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on long arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_LONG_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_LONG_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector supports the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean LONG_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_LONG_ASTORE_BARRIER || NEEDS_LONG_ALOAD_BARRIER) || Selected.Constraints.get().longBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of longs into fields of instances (ie putfield).
&lt;br&gt;@@ -641,8 +626,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_LONG_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().longWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -656,13 +641,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void longArrayWrite(Object ref, int index, long value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void longArrayWrite(long[] ref, int index, long value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_LONG_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_LONG);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().longWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -676,11 +661,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static long longFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_LONG_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().longRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -693,38 +678,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static long longArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static long longArrayRead(long[] ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_LONG_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_LONG);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().longRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of longs (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean longBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().longBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void longBulkCopy(long[] src, Offset srcOffset, long[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(LONG_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().longBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy64Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -740,6 +719,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_FLOAT_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_FLOAT_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on float arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_FLOAT_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_FLOAT_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector supports the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean FLOAT_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_FLOAT_ASTORE_BARRIER || NEEDS_FLOAT_ALOAD_BARRIER) || Selected.Constraints.get().floatBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of floats into fields of instances (ie putfield).
&lt;br&gt;@@ -755,8 +736,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_FLOAT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().floatWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -770,13 +751,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void floatArrayWrite(Object ref, int index, float value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void floatArrayWrite(float[] ref, int index, float value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_FLOAT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_FLOAT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().floatWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -790,11 +771,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static float floatFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_FLOAT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().floatRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -807,38 +788,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static float floatArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static float floatArrayRead(float[] ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_FLOAT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_FLOAT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().floatRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of floats (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstIdx The starting source index
&lt;br&gt;+ &amp;nbsp; * @param len The number of array elements to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean floatBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().floatBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void floatBulkCopy(float[] src, Offset srcOffset, float[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(FLOAT_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().floatBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy32Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -854,6 +829,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_DOUBLE_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_DOUBLE_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on double arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_DOUBLE_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_DOUBLE_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector supports the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean DOUBLE_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_DOUBLE_ASTORE_BARRIER || NEEDS_DOUBLE_ALOAD_BARRIER) || Selected.Constraints.get().doubleBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of doubles into fields of instances (ie putfield).
&lt;br&gt;@@ -869,8 +846,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_DOUBLE_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().doubleWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -884,13 +861,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void doubleArrayWrite(Object ref, int index, double value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void doubleArrayWrite(double[] ref, int index, double value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_DOUBLE_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_DOUBLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().doubleWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -904,11 +881,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static double doubleFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_DOUBLE_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().doubleRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -921,38 +898,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static double doubleArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static double doubleArrayRead(double[] ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_DOUBLE_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_DOUBLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().doubleRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of doubles (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean doubleBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().doubleBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void doubleBulkCopy(double[] src, Offset srcOffset, double[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(DOUBLE_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().doubleBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.arraycopy64Bit(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -968,6 +939,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_OBJECT_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_OBJECT_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on reference arrayload */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_OBJECT_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_OBJECT_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector supports the bulk copy operation */
&lt;br&gt;+ &amp;nbsp;public static final boolean OBJECT_BULK_COPY_SUPPORTED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = !(NEEDS_OBJECT_ASTORE_BARRIER || NEEDS_OBJECT_ALOAD_BARRIER) || Selected.Constraints.get().objectReferenceBulkCopySupported();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for writes of objects into fields of instances (ie putfield).
&lt;br&gt;@@ -983,8 +956,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().objectReferenceWrite(src, src.toAddress().plus(offset), ObjectReference.fromObject(value), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -998,13 +971,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void objectArrayWrite(Object ref, int index, Object value) {
&lt;br&gt;+ &amp;nbsp;public static void objectArrayWrite(Object[] ref, int index, Object value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().objectReferenceWrite(array, array.toAddress().plus(offset), ObjectReference.fromObject(value), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -1021,8 +994,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().objectReferenceRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD).toObject();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1035,38 +1008,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static Object objectArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp;public static Object objectArrayRead(Object[] ref, int index) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().objectReferenceRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT).toObject();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;- &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;- &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;- &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;- &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;- &amp;nbsp; * negative).
&lt;br&gt;- &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;- &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;- &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; * @param src The source array
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The starting source offset
&lt;br&gt;+ &amp;nbsp; * @param dst The destination array
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The starting destination offset
&lt;br&gt;+ &amp;nbsp; * @param bytes The number of bytes to be copied
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean objectBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().objectReferenceBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;public static void objectBulkCopy(Object[] src, Offset srcOffset, Object[] dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(OBJECT_BULK_COPY_SUPPORTED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!Selected.Mutator.get().objectReferenceBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(dst), dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset), Magic.objectAsAddress(src).plus(srcOffset), bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1095,8 +1062,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference.fromObject(value),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.fromIntZeroExtend(locationMetadata));
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -1115,8 +1082,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src.toAddress().plus(offset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.fromIntZeroExtend(locationMetadata)).toObject();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1140,8 +1107,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.zero(), // do not have location metadata
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INSTANCE_FIELD);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VerifyAssertions)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -266,83 +266,83 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod booleanFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;booleanFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;ZLorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod booleanArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;booleanArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;IZ)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;booleanArrayWrite&amp;quot;, &amp;quot;([ZIZ)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod booleanFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;booleanFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Z&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod booleanArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;booleanArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)Z&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;booleanArrayRead&amp;quot;, &amp;quot;([ZI)Z&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod byteFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;byteFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;BLorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod byteArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;byteArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;IB)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;byteArrayWrite&amp;quot;, &amp;quot;([BIB)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod byteFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;byteFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)B&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod byteArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;byteArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)B&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;byteArrayRead&amp;quot;, &amp;quot;([BI)B&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod charFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;charFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;CLorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod charArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;charArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;IC)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;charArrayWrite&amp;quot;, &amp;quot;([CIC)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod charFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;charFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)C&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod charArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;charArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)C&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;charArrayRead&amp;quot;, &amp;quot;([CI)C&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod shortFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;shortFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;SLorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod shortArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;shortArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;IS)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;shortArrayWrite&amp;quot;, &amp;quot;([SIS)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod shortFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;shortFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)S&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod shortArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;shortArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)S&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;shortArrayRead&amp;quot;, &amp;quot;([SI)S&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod intFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;intFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;ILorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod intArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;intArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;II)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;intArrayWrite&amp;quot;, &amp;quot;([III)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod intFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;intFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)I&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod intArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;intArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)I&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;intArrayRead&amp;quot;, &amp;quot;([II)I&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod longFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;longFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;JLorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod longArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;longArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;IJ)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;longArrayWrite&amp;quot;, &amp;quot;([JIJ)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod longFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;longFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)J&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod longArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;longArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)J&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;longArrayRead&amp;quot;, &amp;quot;([JI)J&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod floatFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;floatFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;FLorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod floatArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;floatArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;IF)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;floatArrayWrite&amp;quot;, &amp;quot;([FIF)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod floatFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;floatFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)F&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod floatArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;floatArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)F&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;floatArrayRead&amp;quot;, &amp;quot;([FI)F&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod doubleFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;doubleFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;DLorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod doubleArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;doubleArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;ID)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;doubleArrayWrite&amp;quot;, &amp;quot;([DID)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod doubleFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;doubleFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)D&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod doubleArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;doubleArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)D&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;doubleArrayRead&amp;quot;, &amp;quot;([DI)D&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod objectFieldWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod objectArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;ILjava/lang/Object;)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectArrayWrite&amp;quot;, &amp;quot;([Ljava/lang/Object;ILjava/lang/Object;)V&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod objectFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod objectArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectArrayRead&amp;quot;, &amp;quot;([Ljava/lang/Object;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod objectStaticWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectStaticWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Memory.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Memory.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Memory.java	2009-11-25 04:44:53 UTC (rev 15794)
&lt;br&gt;@@ -94,14 +94,29 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param len &amp;nbsp; &amp;nbsp; number of array elements to copy
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static void arraycopy8Bit(Object src, int srcPos, Object dst, int dstPos, int len) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (USE_NATIVE &amp;&amp; len &amp;gt; NATIVE_THRESHOLD) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;memcopy(Magic.objectAsAddress(dst).plus(dstPos), Magic.objectAsAddress(src).plus(srcPos), len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Address srcPtr = Magic.objectAsAddress(src).plus(srcPos);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Address dstPtr = Magic.objectAsAddress(dst).plus(dstPos);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;arraycopy8Bit(srcPtr, dstPtr, len);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Low level copy of &amp;lt;code&amp;gt;copyBytes&amp;lt;/code&amp;gt; bytes from &amp;lt;code&amp;gt;src[srcPos]&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;dst[dstPos]&amp;lt;/code&amp;gt;.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * Assumption &amp;lt;code&amp;gt;src != dst || (srcPos &amp;gt;= dstPos)&amp;lt;/code&amp;gt; and element size is 4 bytes.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param srcPtr The source start address
&lt;br&gt;+ &amp;nbsp; * @param dstPtr The destination start address
&lt;br&gt;+ &amp;nbsp; * @param copyBytes The number of bytes to be copied
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public static void arraycopy8Bit(Address srcPtr, Address dstPtr , int copyBytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (USE_NATIVE &amp;&amp; copyBytes &amp;gt; NATIVE_THRESHOLD) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;memcopy(dstPtr, srcPtr, copyBytes);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&lt;br&gt;@@ Diff output truncated at 100000 characters. @@
&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26507505&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15794--rvmroot-trunk-tp26507505p26507505.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26317304</id>
	<title>SF.net SVN: jikesrvm:[15793] rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/ FreeListPageResource.java</title>
	<published>2009-11-12T03:47:04Z</published>
	<updated>2009-11-12T03:47:04Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15793
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15793&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15793&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-11-12 11:47:04 +0000 (Thu, 12 Nov 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Fix boundary condition bug which probably lead to a 4MB memory leak in each Immix space. &amp;nbsp;Sigh.
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java	2009-11-05 06:01:07 UTC (rev 15792)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java	2009-11-12 11:47:04 UTC (rev 15793)
&lt;br&gt;@@ -159,7 +159,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pagesCurrentlyOnFreeList -= pages;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (pageOffset &amp;gt; highWaterMark) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((pageOffset ^ highWaterMark) &amp;gt; EmbeddedMetaData.PAGES_IN_REGION) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (highWaterMark == 0 || (pageOffset ^ highWaterMark) &amp;gt; EmbeddedMetaData.PAGES_IN_REGION) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int regions = 1 + ((pageOffset - highWaterMark) &amp;gt;&amp;gt; EmbeddedMetaData.LOG_PAGES_IN_REGION);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int metapages = regions * metaDataPagesPerRegion;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reserved += metapages;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26317304&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15793--rvmroot-trunk-MMTk-src-org-mmtk-utility-heap--FreeListPageResource.java-tp26317304p26317304.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26209678</id>
	<title>SF.net SVN: jikesrvm:[15792] rvmroot/branches/RVM-777-NewMMTkGlue/work</title>
	<published>2009-11-04T22:01:07Z</published>
	<updated>2009-11-04T22:01:07Z</updated>
	<author>
		<name>dframpton-oss</name>
	</author>
	<content type="html">Revision: 15792
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15792&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15792&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; dframpton-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-11-05 06:01:07 +0000 (Thu, 05 Nov 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;cleaning up the merge
&lt;br&gt;&lt;br&gt;Added Paths:
&lt;br&gt;-----------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/net/
&lt;br&gt;&lt;br&gt;Removed Paths:
&lt;br&gt;-------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/CPL/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/CPL/
&lt;br&gt;&lt;br&gt;Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(rev 0)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java	2009-11-05 06:01:07 UTC (rev 15792)
&lt;br&gt;@@ -0,0 +1,72 @@
&lt;br&gt;+/*
&lt;br&gt;+ * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;+ * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;+ * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;+ *
&lt;br&gt;+ * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;+ * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;+ */
&lt;br&gt;+package org.mmtk.plan;
&lt;br&gt;+
&lt;br&gt;+import org.mmtk.utility.deque.WriteBuffer;
&lt;br&gt;+import org.vmmagic.pragma.*;
&lt;br&gt;+import org.vmmagic.unboxed.*;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * This class is used to push values in one direction during a trace. It
&lt;br&gt;+ * was designed for use in mutators that use write barriers to push
&lt;br&gt;+ * work to collector threads during concurrent tracing.
&lt;br&gt;+ *
&lt;br&gt;+ * @see org.mmtk.plan.TraceLocal
&lt;br&gt;+ */
&lt;br&gt;+@Uninterruptible
&lt;br&gt;+public final class TraceWriteBuffer extends TransitiveClosure {
&lt;br&gt;+ &amp;nbsp;/****************************************************************************
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * Instance variables
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;private final WriteBuffer buffer;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/****************************************************************************
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * Initialization
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Constructor
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param trace The global trace class to use.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public TraceWriteBuffer(Trace trace) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;buffer = new WriteBuffer(trace.valuePool);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Flush the buffer to the trace.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void flush() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;buffer.flushLocal();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * @return True if the buffer is flushed.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean isFlushed() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return buffer.isFlushed();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Enqueue an object during a trace.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param object The object to enqueue
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public void processNode(ObjectReference object) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;buffer.insert(object.toAddress());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26209678&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15792--rvmroot-branches-RVM-777-NewMMTkGlue-work-tp26209678p26209678.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26209488</id>
	<title>SF.net SVN: jikesrvm:[15791] rvmroot/branches/RVM-777-NewMMTkGlue/tag/</title>
	<published>2009-11-04T21:24:36Z</published>
	<updated>2009-11-04T21:24:36Z</updated>
	<author>
		<name>dframpton-oss</name>
	</author>
	<content type="html">Revision: 15791
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15791&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15791&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; dframpton-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-11-05 05:24:36 +0000 (Thu, 05 Nov 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;new tag
&lt;br&gt;&lt;br&gt;Added Paths:
&lt;br&gt;-----------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/tag/
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26209488&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15791--rvmroot-branches-RVM-777-NewMMTkGlue-tag--tp26209488p26209488.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26209483</id>
	<title>SF.net SVN: jikesrvm:[15790] rvmroot/branches/RVM-777-NewMMTkGlue/tag/</title>
	<published>2009-11-04T21:23:28Z</published>
	<updated>2009-11-04T21:23:28Z</updated>
	<author>
		<name>dframpton-oss</name>
	</author>
	<content type="html">Revision: 15790
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15790&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15790&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; dframpton-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-11-05 05:23:27 +0000 (Thu, 05 Nov 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;remove old tag
&lt;br&gt;&lt;br&gt;Removed Paths:
&lt;br&gt;-------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/tag/
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26209483&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15790--rvmroot-branches-RVM-777-NewMMTkGlue-tag--tp26209483p26209483.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26209295</id>
	<title>SF.net SVN: jikesrvm:[15789] rvmroot/branches/RVM-777-NewMMTkGlue/work</title>
	<published>2009-11-04T20:56:16Z</published>
	<updated>2009-11-04T20:56:16Z</updated>
	<author>
		<name>dframpton-oss</name>
	</author>
	<content type="html">Revision: 15789
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15789&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15789&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; dframpton-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-11-05 04:56:08 +0000 (Thu, 05 Nov 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Merge to 15788
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/COPYRIGHT.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ActivePlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/BuildTimeConfig.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Collection.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Factory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/FinalizableProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/MMTkEvents.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Memory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ReferenceProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Scanning.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Statistics.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Strings.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/SynchronizedCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ActivePlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Assert.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/BuildTimeConfig.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Factory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/FinalizableProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Lock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/MMTk_Events.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Memory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Monitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ReferenceProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanBootImage.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanStatics.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ScanThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Scanning.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Statistics.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Strings.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/SynchronizedCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/TraceInterface.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/gcspy/ByteStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/gcspy/IntStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/gcspy/ServerInterpreter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/gcspy/ServerSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/gcspy/ShortStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/gcspy/Util.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Collector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Harness.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Main.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Mutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Checker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Compiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Declaration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Env.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Intrinsics.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/PrettyPrinter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Trace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/UnsyncStack.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/Visitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AST.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AbstractAST.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Alloc.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Assert.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Assignment.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/BinaryExpression.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Call.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Constant.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Empty.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Expect.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Expression.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/IfStatement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/IntrinsicMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/LoadField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Method.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/MethodProxy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/NormalMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Operator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/PrintStatement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Return.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Sequence.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Spawn.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Statement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/StoreField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/UnaryExpression.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Variable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/WhileStatement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethodProxy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/CompiledMethodTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/Register.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/compiler/Temporary.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/MethodTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/Source.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/Symbol.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/SymbolTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/BinaryOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/BinaryOperation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/Branch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallIntrinsicOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallNormalOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/CallOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/EnnaryOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ExitOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ExpectOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/Goto.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/LoadFieldOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/NullaryOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/PrintOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/PseudoOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ResolvableOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/ReturnOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/SpawnOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreFieldOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/TernaryOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/UnaryOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/UnaryOperation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/AllocationSite.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/BoolValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/ConstantPool.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/IntValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/ObjectValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/PcodeInterpreter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/StackFrame.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/StringValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/Value.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Bits.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Collectors.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/DumpPcode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/GcEvery.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/HarnessOptionSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/InitHeap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/MaxHeap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Plan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/PolicyStats.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyLength.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyMax.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/RandomPolicyMin.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/RandomPolicySeed.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Scheduler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/SchedulerPolicy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Trace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/YieldInterval.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/AbstractPolicy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/Lock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/Policy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/Schedulable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/Scheduler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/ThreadModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/YieldAlways.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/YieldEvery.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/YieldNever.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/YieldRandomly.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaLock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThreadModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/Rendezvous.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawLock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src-generated/org/mmtk/harness/lang/parser/Parser.jj
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/Alignment.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/CyclicGarbage.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/HashCode.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/LargeObject.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/OutOfMemory.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/Quicksort.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/Spawn.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/SpreadAlloc.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/alloc.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/assert.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/assign.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/call.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/const.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/expr.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/fields.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/getfield.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/if-then-else.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/if-then-else2.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/intrinsic.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/list.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/recursive1.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/recursive2.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/while.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/Address.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/AddressArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/Extent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/ExtentArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/ObjectReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/ObjectReferenceArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/Offset.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/OffsetArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/Word.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/WordArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/CollectorContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ComplexPhase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ControllerCollectorContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/GCspyPlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ParallelCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/ParallelCollectorGroup.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/Phase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/Plan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/Simple.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/SimpleCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/SimpleConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/SimpleMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/SimplePhase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/StopTheWorld.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/StopTheWorldCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/StopTheWorldConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/StopTheWorldMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/Trace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/TraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/TransitiveClosure.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/copyms/CopyMS.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/copyms/CopyMSCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/copyms/CopyMSConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/copyms/CopyMSMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/copyms/CopyMSTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/Gen.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/GenCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/GenConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/GenMatureTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/GenMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/GenNurseryTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/copying/GenCopy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/copying/GenCopyCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/copying/GenCopyConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/copying/GenCopyMatureTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/copying/GenCopyMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/immix/GenImmix.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/immix/GenImmixCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/immix/GenImmixConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/immix/GenImmixMatureDefragTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/immix/GenImmixMatureTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/immix/GenImmixMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/marksweep/GenMS.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/marksweep/GenMSCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/marksweep/GenMSConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/marksweep/GenMSMatureTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/generational/marksweep/GenMSMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/immix/Immix.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/immix/ImmixCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/immix/ImmixConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/immix/ImmixDefragTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/immix/ImmixMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/immix/ImmixTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCForwardTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCMarkTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/markcompact/MCMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/marksweep/MS.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/marksweep/MSCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/marksweep/MSConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/marksweep/MSMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/marksweep/MSTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/nogc/NoGC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/nogc/NoGCCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/nogc/NoGCConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/nogc/NoGCMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/nogc/NoGCTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/poisoned/Poisoned.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/poisoned/PoisonedCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/poisoned/PoisonedConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCBase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCBaseCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCBaseConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCBaseMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCDecBuffer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCHeader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/RCZero.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTDecMarked.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTDecMarkedAndZero.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTFreeLargeObjectSweeper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTScanLargeObjectSweeper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTSweepImmortalScanner.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTSweeper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/backuptrace/BTTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/fullheap/RC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/fullheap/RCCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/fullheap/RCConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/fullheap/RCFindRootSetTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/fullheap/RCModifiedProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/fullheap/RCMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/generational/GenRC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/generational/GenRCCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/generational/GenRCConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/generational/GenRCFindRootSetTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/generational/GenRCModifiedProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/refcount/generational/GenRCMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/SS.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/SSCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/SSConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/SSMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/SSTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gcspy/SSGCspy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gcspy/SSGCspyCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gcspy/SSGCspyConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gcspy/SSGCspyMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gcspy/SSGCspyTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTrace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmix.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixNurseryTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyms/StickyMS.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyms/StickyMSCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyms/StickyMSConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyms/StickyMSMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/plan/stickyms/StickyMSNurseryTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/BaseLargeObjectSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/CopyLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/CopySpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/ExplicitFreeListLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/ExplicitFreeListSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/ExplicitLargeObjectSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/ImmortalLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/ImmortalSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/LargeObjectLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/LargeObjectSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkCompactSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkSweepLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/MarkSweepSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/RawPageSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/Space.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/Block.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/Chunk.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/ChunkList.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/CollectorLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/Defrag.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/ImmixConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/ImmixSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/Line.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/MutatorLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/policy/immix/ObjectHeader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/CallSite.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/Constants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/Conversions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/CycleDetector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/DoublyLinkedList.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/GenericFreeList.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/Log.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/Memory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/SimpleHashtable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/Synchronize.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/TraceGenerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/TracingConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/Treadmill.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/Allocator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BlockAllocator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/BumpPointer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/DumpLinearScan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/EmbeddedMetaData.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/ImmixAllocator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/LargeObjectAllocator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/LinearScan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/SegregatedFreeList.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/alloc/SegregatedFreeListLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/AddressDeque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/AddressPairDeque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/AddressTripleDeque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/Deque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/LocalDeque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/LocalQueue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/LocalSSB.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/ObjectReferenceBuffer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/ObjectReferenceDeque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/SharedDeque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/SortSharedDeque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/SortTODAddressStack.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/SortTODObjectReferenceStack.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/SortTODSharedDeque.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/TraceBuffer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/deque/WriteBuffer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/Color.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/GCspy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/LinearScan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/StreamConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/Subspace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/drivers/AbstractDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/drivers/GenImmortalSpaceDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/drivers/GenLOSDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/drivers/ImmortalSpaceDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/drivers/LinearSpaceDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/gcspy/drivers/TreadmillDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/HeapGrowthManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/Map.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/Mmapper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/MonotonePageResource.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/PageResource.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/SpaceDescriptor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/heap/VMRequest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/BoundedNursery.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/ConcurrentTrigger.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/CycleFilterThreshold.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/CycleMetaDataLimit.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/CycleTriggerThreshold.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DebugAddress.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DefragFreeHeadroom.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DefragFreeHeadroomFraction.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DefragHeadroom.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DefragHeadroomFraction.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DefragLineReuseRatio.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DefragSimpleSpillThreshold.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DummyEnum.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/EagerCompleteSweep.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/EagerMmapSpaces.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/EchoOptions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/FixedNursery.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/FragmentationStats.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/FullHeapSystemGC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/GCTimeCap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/GCspyPort.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/GCspyTileSize.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/GCspyWait.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/GenCycleDetection.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/HarnessAll.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/IgnoreSystemGC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/LineReuseRatio.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/MarkSweepMarkBits.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/MetaDataLimit.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/NoFinalizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/NoReferenceTypes.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/NurserySize.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/Options.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/PerfMetric.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/PrintPhaseStats.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/ProtectOnRelease.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/SanityCheck.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/StressFactor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/Threads.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/TraceRate.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/VariableSizeHeap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/Verbose.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/VerboseFragmentationStats.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/VerboseTiming.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/XmlStats.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/sanitychecker/SanityChecker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/sanitychecker/SanityCheckerLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/sanitychecker/SanityDataTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/sanitychecker/SanityLinearScan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/sanitychecker/SanityRootTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/sanitychecker/SanityTraceLocal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/BooleanCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/Counter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/EventCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/LongCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/PerfCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/SizeCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/Stats.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/Timer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/statistics/Xml.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/ActivePlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Assert.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/BuildTimeConfig.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Collection.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Config.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Factory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/FinalizableProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Lock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/MMTk_Events.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Memory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Monitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/ObjectModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/ReferenceProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Scanning.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Statistics.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Strings.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/SynchronizedCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/TraceInterface.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/VM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/gcspy/ByteStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/gcspy/IntStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/gcspy/ServerInterpreter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/gcspy/ServerSpace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/gcspy/ShortStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/gcspy/Stream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/gcspy/Util.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/NEWS.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/buildit
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/buildit.base_config
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/extractcompilerstats
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/extractmmtkstats
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/findDeviantFiles.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/headerExceptionsFilter.awk
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/license-check.rb
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/normalizeSVNProperties.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/test-mmtk
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/timedrun
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/base.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/checkstyle/License-Header.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/checkstyle/rvm-checks.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/checkstyle/text-output.xsl
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/asm.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/base.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/caffeinemark.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/checkstyle.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/classpath.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/dacapo.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/ecj.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/gcspy.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/harmony.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/jai.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/javacc.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/jdocs.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/jsr166-tck.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/junit.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/pmd.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/specjvm.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/components/x10.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseAdaptiveCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseAdaptiveGenImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseAdaptiveGenMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseAdaptiveMarkSweep.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseAdaptivePoisoned.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseAdaptiveSemiSpace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseAdaptiveSemiSpaceGCSpy.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseGCTrace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseGenCopy.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseGenImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseGenMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseGenRC.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseMarkCompact.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseMarkSweep.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseNoGC.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBasePoisoned.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseRefCount.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseSemiSpace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseSemiSpaceGCSpy.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseSemiSpaceGCSpyStub.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseStickyImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/BaseBaseStickyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsBaseBaseCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsBaseBaseGenMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsBaseBaseSemiSpace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsFullAdaptiveCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsFullBaseAdaptiveCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/ExtremeAssertionsOptAdaptiveCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveGCTrace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveGenCopy.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveGenImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveGenMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveGenRC.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveMarkCompact.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveMarkSweep.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveNoGC.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptivePoisoned.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveRefCount.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveSemiSpace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveStickyImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastAdaptiveStickyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastBaseAdaptiveCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastBaseAdaptiveGenMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FastBaseBaseSemiSpace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveGCTrace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveGenCopy.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveGenImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveGenMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveGenRC.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveMarkCompact.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveMarkSweep.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveNoGC.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptivePoisoned.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveRefCount.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveSemiSpace.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveSemiSpaceGCSpy.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveStickyImmix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullAdaptiveStickyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/FullBaseAdaptiveCopyMS.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/config.properties.defaults
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/config.properties.example
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/development.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/gcstress.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/production.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/production_Base.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/production_Opt_0.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/production_Opt_1.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/production_Opt_2.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/prototype-opt.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/configs/prototype.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/eclipse/classpath.harmony.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/eclipse/classpath.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/eclipse/mmtk-harness-classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/eclipse/project.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ia32-cygwin.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ia32-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ia32-osx.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ia32-solaris.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ppc32-aix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ppc32-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ppc32-osx.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ppc64-aix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/ppc64-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/x86_64-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/hosts/x86_64_m64-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/mmtk/default.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/mmtk/sideMarkBit.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/pmd/rulesets/rvm.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/primordials/Classpath-0.97.2.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/primordials/Harmony.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/primordials/RVM.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/primordials/RVM_AOS.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/primordials/RVM_IA32.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/primordials/RVM_OPT.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/primordials/RVM_PPC.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/results2report.xsl
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/ia32-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/ia32-osx.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/ia32-solaris.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/ppc32-aix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/ppc32-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/ppc32-osx.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/ppc64-aix.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/ppc64-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/target.properties.example
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/x86_64-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/targets/x86_64_m64-linux.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/tasks.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/SPECjvm2008.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/compiler-dna.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/core.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/gcmap-sanity.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/jsr166.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/perf.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/performance.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/pre-commit.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/quarantine.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/sanity-tier2.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/sanity.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/stress.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/tiny.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/test-runs/x10.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/testing/report2html.xsl
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build/tests.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/AddressOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/BooleanOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/EnumOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/FloatOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/IntOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/MicrosecondsOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/Option.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/OptionSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/PagesOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/src/org/vmutil/options/StringOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/Intrinsic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/Pragma.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/Unboxed.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/BaselineNoRegisters.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/BaselineSaveLSRegisters.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/DynamicBridge.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/Entrypoint.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/Inline.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/Interruptible.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/LogicallyUninterruptible.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NativeBridge.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NoBoundsCheck.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NoCheckStore.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NoEscapes.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NoInline.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NoNullCheck.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NoOptCompile.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NonMoving.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/NonMovingAllocation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/Preemptible.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/Pure.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/RawStorage.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/RuntimeFinal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/RuntimePure.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/SaveVolatile.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/SpecializedMethodInvoke.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/SysCallNative.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/Uninterruptible.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/UninterruptibleNoWarn.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/Unpreemptible.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/UnpreemptibleNoWarn.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/pragma/Untraced.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/Address.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/AddressArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/Extent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/ExtentArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/ObjectReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/ObjectReferenceArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/Offset.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/OffsetArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/Word.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/src/org/vmmagic/unboxed/WordArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/docs/unity/stylesheets/print.css
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/docs/unity/stylesheets/screen.css
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/docs/unity/unity-html-print.tmpl
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/docs/unity/unity-html-screen.tmpl
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/external/tuningforklib/src/com/ibm/tuningfork/tracegen/types/EventType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/include/jni.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/Class.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/Compiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/Object.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/VMCommonLibrarySupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/ref/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/ref/PhantomReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/ref/Reference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/ref/SoftReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/ref/WeakReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/lang/reflect/VMCommonLibrarySupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/sun/misc/Unsafe.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/Runtime.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/java/lang/ref/ReferenceQueue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/ASF/src/org/apache/harmony/luni/platform/OSMemory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/README.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/Dummy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/OptDummy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/Callbacks.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/CommandLineArgs.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/Constants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/MachineSpecific.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/PrintContainer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/PrintLN.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/Properties.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/Services.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/SizeConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/UnimplementedError.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/VM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/AosEntrypoints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/OSRListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/OSROrganizerThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/OnStackReplacementEvent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/OnStackReplacementPlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/OnStackReplacementTrigger.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/AINewHotEdgeEvent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/AdaptiveInlining.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/AnalyticModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/Controller.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/ControllerInputEvent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/ControllerMemory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/ControllerPlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/ControllerThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/HotMethodEvent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/HotMethodRecompilationEvent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/MultiLevelAdaptiveModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/RecompilationChoice.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/RecompilationStrategy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/controller/RecompileOptChoice.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/database/AOSDatabase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/database/callgraph/CallSite.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/database/callgraph/PartialCallGraph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/database/callgraph/WeightedCallTargets.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/database/methodsamples/MethodCountData.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/database/methodsamples/MethodCountSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/Decayable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/Reportable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/RuntimeMeasurements.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/instrumentation/CounterArrayManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/instrumentation/CounterNameFunction.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/instrumentation/Instrumentation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/instrumentation/ManagedCounterData.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/instrumentation/MethodInvocationCounterData.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/instrumentation/MethodNameFunction.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/instrumentation/StringEventCounterData.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/instrumentation/YieldpointCounterData.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/listeners/CallDensityListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/listeners/ContextListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/listeners/EdgeListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/listeners/Listener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/listeners/MethodListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/listeners/NullListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/listeners/YieldCounterListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/organizers/AccumulatingMethodSampleOrganizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/organizers/DecayOrganizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/organizers/DynamicCallGraphOrganizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/organizers/MethodSampleOrganizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/measurements/organizers/Organizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/CompilationThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/CompilerDNA.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/InvocationCounts.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/PreCompile.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/instrumentation/AOSInstrumentationPlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/instrumentation/CounterBasedSampling.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/instrumentation/InsertInstructionCounters.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/instrumentation/InsertMethodInvocationCounter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/instrumentation/InsertYieldpointCounters.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/instrumentation/InstrumentationSamplingFramework.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/recompilation/instrumentation/LowerInstrumentation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/AOSGenerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/AOSLogging.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/AOSOptions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/BlockingPriorityQueue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/CompilerAdvice.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/CompilerAdviceAttribute.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/CompilerAdviceInfoReader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/DynamicCallFileInfoReader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/UnResolvedCallSite.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/adaptive/util/UnResolvedWeightedCallTargets.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/apt/annotations/GenerateImplementation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/apt/annotations/SysCallTemplate.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/AbstractMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/AnnotatedElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/ApplicationClassLoader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/Atom.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/BootImageMemberLookupError.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/BootstrapClassLoader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/BytecodeConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/BytecodeStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/ClassFileReader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/ClassLoaderConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/ClassLoadingListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/DynamicTypeCheck.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/ExceptionHandlerMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/FieldReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/FieldVector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/InterfaceInvocation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/InterfaceMethodSignature.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/LocalVariableTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/MemberReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/MethodReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/MethodVector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/NativeMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/NormalMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/Primitive.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMAnnotation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMClass.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMClassLoader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMMember.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/RVMType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/SpecializedMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/SpecializedMethodManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/TableBasedDynamicLinker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/TypeDescriptorParsing.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/TypeReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/TypeReferenceVector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/UTF8Convert.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/classloader/UnboxedType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BBConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BaselineBootImageCompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BaselineCompiledMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BaselineCompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BaselineExceptionTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BasicBlock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BasicBlockFactory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BranchProfile.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BranchProfiles.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BuildBB.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/BuildReferenceMaps.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ConditionalBranchProfile.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/EdgeCounts.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/JSRInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/JSRSubroutineInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/PendingRETInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ReferenceMaps.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/SwitchBranchProfile.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/TemplateCompilerFramework.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/UnusualMaps.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineExceptionDeliverer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineGCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineMagic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineExceptionDeliverer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineGCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/BootImageCompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/CompiledMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/CompiledMethods.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/ExceptionTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/HardwareTrapCompiledMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/HardwareTrapGCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/RecompilationManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/RuntimeCompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/assembler/AbstractAssembler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/assembler/ForwardReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/assembler/ia32/AssemblerConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/assembler/ia32/Lister.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/assembler/ppc/Assembler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/assembler/ppc/AssemblerConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/common/assembler/ppc/AssemblerShortBranch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/AdjustBranchProbabilities.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ClassLoaderProxy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/DefUse.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ExpressionFolding.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/FieldAnalysis.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/FieldDatabase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/InstrumentedEventCounterManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/LocalCSE.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/LocalCastOptimization.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/LocalConstantProp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/LocalCopyProp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/MagicNotImplementedException.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/MutateSplits.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/NullCheckCombining.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/OperationNotImplementedException.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/OptimizingCompilerException.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/Simple.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/Simplifier.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/StaticFieldReader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/BC2IR.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/ConvertBCtoHIR.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerateMagic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerationContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/IRGenOptions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/OsrPointConstructor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/ia32/GenerateMachineSpecificMagic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/bc2ir/ppc/GenerateMachineSpecificMagic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/AnnotatedLSTGraph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/AnnotatedLSTNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/BranchOptimizationDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/BranchOptimizations.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/BranchSimplifier.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/BuildLST.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/CFGTransformations.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/Diamond.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominanceFrontier.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominatorCell.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominatorInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominatorOperator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominatorSystem.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominatorTree.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominatorTreeNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominatorTreePhase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/Dominators.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/DominatorsPhase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/EstimateBlockFrequencies.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/LSTGraph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/LSTNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/LTDominatorInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/LTDominators.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/LoopAnalysis.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/LoopUnrolling.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/MIRBranchOptimizations.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/PostDominatorsPhase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/ReorderingPhase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/StaticSplitting.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/TailRecursionElimination.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/controlflow/YieldPoints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/depgraph/DepGraph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/depgraph/DepGraphConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/depgraph/DepGraphEdge.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/depgraph/DepGraphNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/depgraph/DepGraphStats.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/dfsolver/DF_AbstractCell.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/dfsolver/DF_Equation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/dfsolver/DF_Graph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/dfsolver/DF_LatticeCell.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/dfsolver/DF_Operator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/dfsolver/DF_Solution.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/dfsolver/DF_System.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/CompilationPlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/CompilerPhase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/IRPrinter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/InstrumentationPlan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/OptConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/OptimizationPlanAtomicElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/OptimizationPlanCompositeElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/OptimizationPlanElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/OptimizationPlanner.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/OptimizingBootImageCompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/OptimizingCompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/ia32/MIROptimizationPlanner.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/driver/ppc/MIROptimizationPlanner.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/AggregateReplacer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/EscapeTransformations.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/FI_EscapeSummary.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/MethodSummary.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/ObjectReplacer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/ShortArrayReplacer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/SimpleEscape.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/SummaryDatabase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/escape/UnsyncReplacer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ConvertHIRtoLIR.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ConvertToLowLevelIR.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/hir2lir/DynamicTypeCheckExpansion.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/CallSiteTree.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/CallSiteTreeNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/ClassLoadingDependencyManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/CompilationState.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/DefaultInlineOracle.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/InlineDecision.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/InlineOracle.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/InlineSequence.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/InlineTools.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/Inliner.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/InterfaceHierarchy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/inlining/InvalidationDatabase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/instrsched/DefaultPriority.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/instrsched/PrePassScheduler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/instrsched/Priority.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/instrsched/ResourceMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/instrsched/ResourceReservation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/instrsched/Scheduler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/instrsched/SchedulingInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/AbstractRegisterPool.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/BasicBlock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/BasicBlockEnumeration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ControlFlowGraph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/EmptyBasicBlockEnumeration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ExceptionHandlerBasicBlock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ExceptionHandlerBasicBlockBag.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/GCIRMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/GCIRMapElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/GenericPhysicalRegisterSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/GenericPhysicalRegisterTools.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/GenericRegisterPool.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/HIRInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/IR.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/IREnumeration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/IRSummary.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/IRTools.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/Instruction.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/InstructionEnumeration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/LIRInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/MIRInfo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/MachineSpecificIR.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/OperandEnumeration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/RegSpillListElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/Register.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/RegisterOperandEnumeration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/WeightedBranchTargets.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ia32/MachineSpecificIRIA.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ia32/PhysicalDefUse.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ia32/PhysicalRegisterSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ia32/PhysicalRegisterTools.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ia32/RegisterPool.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/AddressConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/BasicBlockOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/BranchOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/BranchProfileOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/ClassConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/CodeConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/ConditionOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/ConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/DoubleConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/FloatConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/HeapOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/InlinedOsrTypeInfoOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/IntConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/LocationOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/LongConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/MemoryOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/MethodOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/NullConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/ObjectConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/Operand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/OsrTypeInfoOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/RegisterOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/StackLocationOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/StringConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/TIBConstantOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/TrapCodeOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/TrueGuardOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/TypeOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/UnreachableOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/ia32/BURSManagedFPROperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/ia32/IA32ConditionOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/ppc/PowerPCConditionOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/operand/ppc/PowerPCTrapOperand.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ppc/MachineSpecificIRPowerPC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ppc/PhysicalDefUse.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ppc/PhysicalRegisterSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ppc/PhysicalRegisterTools.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ir/ppc/RegisterPool.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/BURS.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/BURS_Common_Helpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/BURS_IntConstantTreeNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/BURS_MemOp_Helpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ConvertLIRtoMIR.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/MinimalBURS.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/NormalBURS.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/SplitBasicBlock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ia32/BURS_Helpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ia32/ComplexLIR2MIRExpansion.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ia32/ConvertALUOperators.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ia32/NormalizeConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ppc/BURS_Helpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ppc/ComplexLIR2MIRExpansion.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ppc/ConvertALUOperators.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/lir2mir/ppc/NormalizeConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/liveness/LiveAnalysis.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/liveness/LiveInterval.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/liveness/LiveIntervalEnumeration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/liveness/LiveSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/liveness/LiveSetElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/liveness/LiveSetEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/mir2mc/AssemblerDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/mir2mc/ConvertMIRtoMC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/mir2mc/FinalMIRExpansionDriver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/mir2mc/ia32/AssemblerBase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/mir2mc/ia32/FinalMIRExpansion.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/mir2mc/ppc/AssemblerOpt.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/mir2mc/ppc/FinalMIRExpansion.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/BlockCountSpillCost.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/BrainDeadSpillCost.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/Coalesce.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/CoalesceGraph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/CoalesceMoves.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ExpandCallingConvention.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/GenericRegisterPreferences.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/GenericRegisterRestrictions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/GenericStackManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/LinearScan.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/LiveIntervalElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/PrologueEpilogueCreator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/RegisterAllocator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/RegisterAllocatorState.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ScratchMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/SimpleSpillCost.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/SpillCostEstimator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ia32/CallingConvention.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ia32/ExpandFPRStackConvention.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ia32/MIRSplitRanges.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ia32/PhysicalRegisterConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ia32/RegisterPreferences.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ia32/RegisterRestrictions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ia32/StackManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ppc/CallingConvention.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ppc/MIRSplitRanges.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ppc/PhysicalRegisterConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ppc/RegisterPreferences.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ppc/RegisterRestrictions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/regalloc/ppc/StackManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/OptCompiledMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/OptEncodedCallSiteTree.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/OptExceptionTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/OptGCMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/OptGenericGCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/OptLinker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/OptMachineCodeMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/OptSaveVolatile.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/ia32/OptExceptionDeliverer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/ia32/OptGCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/ia32/OptGCMapIteratorConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/ppc/OptExceptionDeliverer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/ppc/OptGCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/runtimesupport/ppc/OptGCMapIteratorConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/specialization/InvokeeThreadLocalContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/specialization/SpecializationContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/specialization/SpecializationDatabase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/specialization/SpecializedMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/specialization/SpecializedMethodPool.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/EnterSSA.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/GCP.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/GVCongruenceClass.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/GlobalCSE.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/GlobalValueNumber.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/GlobalValueNumberState.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/HeapVariable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/IndexPropagation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/IndexPropagationSystem.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/LICM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/LeaveSSA.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/LiveRangeSplitting.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/LoadElimination.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/LoopVersioning.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/PiNodes.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/RedundantBranchElimination.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/SSA.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/SSADictionary.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/SSAOptions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/SSATuneUp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/UniformlyGeneratedGVN.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/ValueGraph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/ValueGraphEdge.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/ValueGraphParamLabel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/ValueGraphVertex.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/ssa/ValueNumberPair.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/BitSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/BitSetMapping.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/Bits.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/CompoundEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/DFSenumerateByFinish.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/DepthFirstEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/EmptyEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/EmptyIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/FilterEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/FilterIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/FilteredDFSenumerateByFinish.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/Graph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/GraphEdge.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/GraphEdgeFilter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/GraphElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/GraphNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/GraphNodeEnumeration.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/GraphNodeEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/GraphUtilities.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/Queue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/ReverseDFSenumerateByFinish.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/ReverseEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/ReverseFilteredDFSenumerateByFinish.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/SortedGraphIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/SortedGraphNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/SpaceEffGraph.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/SpaceEffGraphEdge.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/SpaceEffGraphEdgeList.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/SpaceEffGraphNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/SpaceEffGraphNodeList.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/SpaceEffGraphNodeListHeader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/Stack.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/TopSort.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/TopSortInterface.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/Tree.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/TreeBottomUpEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/TreeNode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/TreeNodeChildrenEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/compilers/opt/util/TreeTopDownEnumerator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/ArchConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/BaselineConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/Code.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/CodeArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/DynamicLinkerHelper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/InterfaceMethodConflictResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/LazyCompilationTrampoline.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/MachineCode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/MachineReflection.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/MachineSpecificIA.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/MultianewarrayHelper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/OutOfLineMachineCode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/RegisterConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/Registers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/StackframeLayoutConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/ThreadLocalState.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ia32/TrapConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/FunctionTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/JNICompiledMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/JNIEnvironment.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/JNIFunctions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/JNIGenericHelpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/JNIGlobalRefTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/LinkageTripletTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/ia32/JNICompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/ia32/JNIExceptionDeliverer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/ia32/JNIGCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/ia32/JNIHelpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/ppc/JNICompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/ppc/JNIGCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/ppc/JNIHelpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/jni/ppc/JNIStackframeLayoutConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/CollectorThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/DebugUtil.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/GCMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/GCMapIteratorGroup.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/MemoryManagerConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Monitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/SpecializedScanMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/ThreadContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/BootImageInterface.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/FieldLayout.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/FieldLayoutContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/FieldLayoutPacked.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/FieldLayoutUnpacked.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/IMT.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/ITable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/ITableArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/JavaHeader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/JavaHeaderConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/MiscHeader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/MiscHeaderConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/ObjectModel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/RuntimeTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/TIB.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/TIBLayoutConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/objectmodel/ThinLockConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/options/OptionSet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/AdjustBCIndexes.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/BytecodeTraverser.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/EncodedOSRMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ExecutionState.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ExecutionStateExtractor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/LocalRegPair.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/MethodVariables.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/OSRConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/OSRMapIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/OSRProfiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ObjectHolder.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/SpecialCompiler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/TypeStack.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/VariableElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/VariableMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/VariableMapElement.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/AConstNull.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/CheckCast.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/DoubleStore.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/FloatStore.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/Goto.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/IntStore.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/InvokeCompiledMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/InvokeStatic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/LoadDoubleConst.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/LoadFloatConst.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/LoadIntConst.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/LoadLongConst.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/LoadRetAddrConst.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/LoadWordConst.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/LongStore.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/Nop.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/ParamInitEnd.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/Pop.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/PseudoBytecode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/bytecodes/RefStore.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ia32/BaselineExecutionStateExtractor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ia32/CodeInstaller.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ia32/OptExecutionStateExtractor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ia32/PostThreadSwitch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ia32/TempRegisters.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ppc/BaselineExecutionStateExtractor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ppc/CodeInstaller.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ppc/OptExecutionStateExtractor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ppc/PostThreadSwitch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/osr/ppc/TempRegisters.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/ArchConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/BaselineConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/Code.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/CodeArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/Disassembler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/DynamicLinkerHelper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/InterfaceMethodConflictResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/LazyCompilationTrampoline.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/MachineCode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/MachineReflection.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/MachineSpecificPowerPC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/MultianewarrayHelper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/OpcodeTab.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/OpcodeXX.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/OutOfLineMachineCode.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/RegisterConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/Registers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/StackframeLayoutConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/ThreadLocalState.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/ppc/TrapConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/ArchEntrypoints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/BootRecord.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/DynamicLibrary.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/DynamicLink.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/DynamicLinker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/EntrypointHelper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Entrypoints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/ExceptionDeliverer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/ExitStatus.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/FileSystem.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Magic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/MagicNames.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/MathConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Memory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/ObjectAddressRemapper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Reflection.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/ReflectionBase.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/RuntimeEntrypoints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/StackBrowser.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/StackTrace.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Statics.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/SysCall.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/Time.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/runtime/TimeoutException.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/BootThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/FinalizerThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/Latch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/Lock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/MainThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/Monitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/NoYieldpointsMonitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/RVMThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/SoftLatch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/SpinLock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/Synchronization.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/SystemThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/ThinLock.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/ThreadQueue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/TimerThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tools/header_gen/GenArch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tools/header_gen/GenArch_ia32.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tools/header_gen/GenArch_ppc.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tools/header_gen/GenerateInterfaceDeclarations.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tools/header_gen/SortableField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tools/oth/OptTestHarness.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tuningfork/ChunkQueue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tuningfork/EventChunkQueue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tuningfork/Feedlet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tuningfork/SpaceDescriptorChunk.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/tuningfork/TraceEngine.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/AbstractHashMapRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/AbstractHashSetRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/AddressInputStream.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/BitVector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/EmptyIterator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/HashMapRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/HashSetRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/IdentityHashMapRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/ImmutableEntryHashMapRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/ImmutableEntryHashSetRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/ImmutableEntryIdentityHashMapRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/LinkedListIteratorRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/LinkedListRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/Pair.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/PriorityQueueRVM.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/util/StringUtilities.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler/Assembler.in
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler/genAssembler.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/ArchitectureSpecific.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/BaselineCompilerImpl.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/CodeArray.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/GenerateAssembler.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/InstructionFormatTables.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/JikesRVMSupport.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/Lister.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/MachineCode.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/Magic.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/OperatorFormatTable.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/OperatorFormatTables.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/OutOfLineMachineCode.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/RVMField.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/ia32-assembler-opt/VM.fake
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/BURS_TreeNode.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ia32/IA32.rules
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ia32/IA32_SSE2.rules
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ia32/IA32_x87.rules
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ir.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/jburg/burg.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ppc/PPC_Alu32.rules
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ppc/PPC_Alu64.rules
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ppc/PPC_Common.rules
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ppc/PPC_Mem32.rules
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-burs/ppc/PPC_Mem64.rules
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/CommonOperands.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/InstructionFormatList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/InstructionFormats.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/Operator.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/OperatorList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/OperatorNames.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/Operators.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/ia32/InstructionFormatList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/ia32/OperatorList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/ppc/InstructionFormatList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/ppc/OperatorList_Alu32.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/ppc/OperatorList_Alu64.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/ppc/OperatorList_Common.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/ppc/OperatorList_Mem32.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/ppc/OperatorList_Mem64.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-ir/splitInstructionFormats.perl
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-scheduler/OperatorClass.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-scheduler/ia32/OperatorClassList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-scheduler/ia32/ResourceList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-scheduler/ppc/OperatorClassList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/opt-scheduler/ppc/ResourceList.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/AOSOptions.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/BaselineOptions.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/BooleanOptions.aos.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/BooleanOptions.baseline.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/BooleanOptions.opt.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/BooleanOptions.vm.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/MasterOptions.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/OptOptions.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/Options.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/SharedBooleanOptions.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/SharedValueOptions.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/ValueOptions.aos.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/ValueOptions.baseline.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/ValueOptions.opt.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/options/ValueOptions.vm.dat
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/vm-configuration/ArchitectureSpecific.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/vm-configuration/ArchitectureSpecificOpt.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/vm-configuration/Configuration.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/vm-configuration/HeapLayoutConstants.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src-generated/vm-configuration/Selected.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/test.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/CaffeineMark/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/CaffeineMark/src/RunCaffeine.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjbb2000/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjbb2005/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjvm2008/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjvm98/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjvm98/parseSPECmark
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjvm98/parse_spec
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjvm98/parse_spec_min
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjvm98/run.bash
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/SPECjvm98/specmark.reference
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/R1644449.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/R1644460.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/R1644460_B.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/R1657236.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/R1722506.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_550.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_708.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/annotation/TestAnnotationInheritance.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/annotation/TestAnnotations.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestArithmetic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestArrayAccess.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestClassHierarchy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestClassInitializer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestClone.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestCompare.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestFieldAccess.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestFinally.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestFloatingRem.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestInstanceOf.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestInvoke.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestMiranda.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestResolveOnCheckcast.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestResolveOnInstanceof.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestResolveOnInvokeInterface.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestReturn.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestSwitch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/TestThrownException.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/bytecode/data/SubClassInDifferentPackage.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/classloading/TestClassLoading.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/classloading/TestLoadingWithoutName.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/classloading/TestUTF8.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/instrument/AgentX.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/instrument/TestAgent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/reflect/TestFieldReflection.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/reflect/tArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/reflect/tClass.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/reflect/tInstance.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/reflect/tNewInstance.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/serialization/SerializationData.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/serialization/TestSerialization.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/Flag.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/Mailbox.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/Task.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestBackEdgeGC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestDispatch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestInterruptAndSpin.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestInterruptedSleep.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestInterruptedSleep2.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestInterruptedWait.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestNotification.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestParallelHardwareTrap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestShutdownHook.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestShutdownHookAfterExit.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestStop.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestSuspend.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestTimeSlicing.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestTimedWait.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/TestVolatiles.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/core/threads/XThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/java/lang/TestMath.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/java/nio/TestFileChannel.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/stats/JikesImageSizes.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/util/IdentityClassFileTransformer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/classpath-testsuite/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/dacapo/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/dacapo-head/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctest/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctest/src/Exhaust.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctest/src/FixedLive.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctest/src/InlineAllocation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctest/src/LargeAlloc.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctest/src/Node2I2A.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctest/src/ReferenceStress.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctest/src/ReferenceTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctracingtest/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/gctracingtest/src/TracingTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/ipsixql/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jBYTEmark/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/javalex/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jgf/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jgf/src/JGF_SerialBenchmark.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jgf-threads/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jgf-threads/src/JGF_MultithreadedBenchmark.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/Allocation.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/Allocation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/ArgumentPassing.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/ArgumentPassing.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/ArrayFunctions.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/ArrayFunctions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/AttachJVM.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/BlockingThreadsWorker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/BlockingWorker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/ClassQuery.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/ClassQuery.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/ClassQuerySuper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/CriticalCopy.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/CriticalCopy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/FieldAccess.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/FieldAccess.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/GetEnv.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/GetEnv.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/GetEnv.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/JNI12.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/JNI12.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/JNI_OnLoad.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/JNI_OnLoad.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/Mangled_Name_s_.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/Mangled_Name_s_.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/MethodInvocation.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/MethodInvocation.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/MethodInvocationSub.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/MonitorTest.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/MonitorTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/NativeException.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/NativeException.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/NativeThreadsWorker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/NullIdentity.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/NullIdentity.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/SelectTest.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/SelectTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/StackResize.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/StackResize.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/StringFunctions.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/StringFunctions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/StringRegion.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/StringRegion.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestDeadVPQueue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestDeadVPQueueWorker.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestDeadVPQueueWorker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestGC.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestGC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestJNIDirectBuffers.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestJNIDirectBuffers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestProcessDestroy.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestRuntimeExec.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/Worker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/myMain.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/t3GT3.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/t3GT3.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/t3GT3Worker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/t3GTWorker2.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/tBlockingThreads.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/tBlockingThreads.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/tNative.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/tNative.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/tNativeThreads.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/tNativeThreads.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/testlib.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jsr166-tck/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/utility/deque/ObjectReferenceDequeTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/AddressTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/AddressTestBasic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/All.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/ObjectReferenceTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/vmmagic/unboxed/WordTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/CheckStore.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/DeBruijn.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/EscapeTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/ExceptionTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/ExceptionTest2.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/ExceptionTest3.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/ExceptionTest4.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/ExceptionTest5.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/ExceptionTest6.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/ExceptionTest7.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/ExceptionTest8.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/FinallyTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/InvokeReflect.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/PingPong.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestArithmetic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestArrayAccess.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestBarrier.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestCall.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestClassInitializer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestCompare.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestConversions.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestEncodedCallSiteTree.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestExceptionThrow.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestFieldAccess.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestFinally.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestInstanceOf.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestInterfaceCall.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestLookupSwitch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestMath.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestReturn.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestSpecialCall.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestStackAccess.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestSwitch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestThrow.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestThrow2.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TestUnresolved.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/TypeCheck.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/bug.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/dtc.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/fibo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/gctest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/hanoi.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/hanoioo.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/hello.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/inlineDeep.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/inlineExcept.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/inlineTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/inlineTest2.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/inlineTest3.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/inlineTest5.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/inlineTest6.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/inlineTest7.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/interf.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/largeMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/logic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/matmul.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/milestone.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/sieve.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/stPutGet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/stack.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/table.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/tak_db.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/tak_fp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/tak_int.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/tak_long.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/testCounts.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/testSwitchHIR.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/testpm.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/threadTest1.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/unresolved.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/virtUnPutGet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/virtUnresolved.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/virtual.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/opttests/src/whet.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-dacapo/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-dacapo/dacapo.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-jbb2000/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-jbb2000/jbb2000.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-jbb2005/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-jbb2005/jbb2005.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-jvm98/bin/extractfinalresult
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-jvm98/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/perf-jvm98/jvm98.properties
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/soot/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/soot/src/Hello.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/x10/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/xerces/build.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/ErrorRecordingAntTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/ErrorRecordingXMLValidateTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/ForEachTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/HostnameTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/IfTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/LineFilterTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/SelectRegexTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/TimerTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/ToAsciiTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/ant/TruncateTask.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/apt/SysCallProcessor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/apt/SysCallProcessorFactory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/template/GenerateFromTemplate.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/template/QuotedStringTokenizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/ant-tasks/src/org/jikesrvm/tools/template/UnterminatedStringException.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/asm-tasks/src/org/jikesrvm/tools/asm/AnnotationAdder.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/RunBootImage.C
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/bootImageRunner.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/cAttributePortability.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/cmdLine.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/harmony.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/disasm.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/disasm.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/ihnpdsm.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/ihnpdsm.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/initBootRecord.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/libvm.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/linux_ucontext.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/osx_ucontext.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ia32/solaris_ucontext.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/jvm.C
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/org_jikesrvm_runtime_DynamicLibrary.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/org_jikesrvm_scheduler_greenthreads_VMProcess.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/parse_map.perl
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/perfctr.C
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/perfctr.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ppc/AixLinkageLayout.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ppc/bootThread.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ppc/initBootRecord.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/ppc/libvm.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/rvm.classpath
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/rvm.harmony
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageRunner/sys.C
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImage.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageMap.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageObjectAddressRemapper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageWorker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageWriterConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BootImageWriterMessages.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/src/org/jikesrvm/tools/bootImageWriter/BuildJNIFunctionTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/Address.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/AddressArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/ArchitecturalWord.template
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/Extent.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/ExtentArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/ObjectReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/ObjectReferenceArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/Offset.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/OffsetArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/Word.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/bootImageWriter/vmmagic/src/org/vmmagic/unboxed/WordArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_buffered_output.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_color_db.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_command_stream.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_gc_driver.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_gc_stream.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_interpreter.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_main_server.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_main_server.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/tools/gcspy-stub/src/gcspy_utils.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/userguide/index.html
&lt;br&gt;&lt;br&gt;Added Paths:
&lt;br&gt;-----------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/LICENSE.html
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/LICENSE.html
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Debug.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/Mutators.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/exception/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/exception/OutOfMemory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/CheckerException.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/AllocUserType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/LoadNamedField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/StoreNamedField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/GlobalDefs.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/parser/TypeTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/AllocUserOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/LoadFixedFieldOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/pcode/StoreFixedFieldOp.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/NullValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/PhantomReferenceValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/ReferenceValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/SoftReferenceValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/runtime/WeakReferenceValue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/AbstractType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/BooleanType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/Field.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/IntType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/ObjectType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/ReferenceType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/StringType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/Type.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/TypeReference.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/UserType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/UserTypeImpl.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/type/VoidType.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/EnumSetOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/IntSetOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/SanityUsesReadBarrier.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/Timeout.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/WatchAddress.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/WatchObject.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/options/WordSetOption.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/FromSpaceInvariant.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/HeapEntry.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/HeapSnapshot.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/HeapVisitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/Sanity.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/sanity/Traversal.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/MMTkThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorContextThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/CollectorThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/MutatorThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/CollectorContextThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/CollectorThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/MutatorThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/FixedLive.options
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/FixedLive.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/Lists.options
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/Lists.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/ReferenceTypes.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/SpreadAlloc16.options
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/SpreadAlloc16.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/barriers.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/phantomref.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/softref.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/type1.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/test-scripts/lang/weakref.script
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord32.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/ArchitecturalWord64.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/Architecture.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/MemoryConstants.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/MemoryPage.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/PageTable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/SimulatedMemory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/harness/WordComparator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/ForwardingWord.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/HeaderByte.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/utility/options/DefragStress.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/src/org/mmtk/vm/Debug.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/bin/test-mmtk-selected
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/LICENSE.html
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/LICENSE.html
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/LICENSE.html
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/LICENSE.html
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/classpath/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/classpath/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/classpath/VMStackWalker.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/classpath/VMSystemProperties.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/java/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/java/lang/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/java/lang/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/java/lang/VMCPStringBuilder.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/gnu/java/lang/VMInstrumentationImpl.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/io/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/io/VMObjectStreamClass.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/JikesRVMHelpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMClassLoader.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMDouble.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMFloat.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMMath.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMRuntime.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMString.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMSystem.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/VMThrowable.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/JikesRVMHelpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/VMArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/VMConstructor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/VMField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/lang/reflect/VMMethod.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/nio/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/nio/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/nio/VMDirectByteBuffer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/util/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/EPL/src/java/util/VMTimeZone.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/LGPL/src/java/lang/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/LGPL/src/java/lang/ref/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/GNUClasspath/LGPL/src/java/lang/ref/ReferenceQueue.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/lang/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/lang/JikesRVMHelpers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/lang/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/lang/reflect/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/lang/reflect/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/nio/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Harmony/EPL/src/java/nio/JikesRVMSupport.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/rvm/src/org/jikesrvm/scheduler/LightMonitor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_703.expected
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/basic/src/test/org/jikesrvm/basic/bugs/RVM_703.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestJNIGetFieldID.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestJNIGetFieldID.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestNestedGC.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/jni/src/TestNestedGC.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/sanity/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/sanity/HeapEntryTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/sanity/HeapSnapshotTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/DeterministicTests.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/DeterministicTests2.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/JavaSchedulerTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/SchedulerTestCases.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/testing/tests/mmtk/src/org/mmtk/harness/scheduler/TestMutator.java
&lt;br&gt;&lt;br&gt;Removed Paths:
&lt;br&gt;-------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/LICENSE.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/LICENSE.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/MMTkThread.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/src/org/mmtk/harness/lang/ast/Type.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/ArchitecturalWord.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/ArchitecturalWord32.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/ArchitecturalWord64.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/Architecture.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/harness/vmmagic/org/vmmagic/unboxed/SimulatedMemory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/options/LICENSE.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/common/vmmagic/LICENSE.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/LICENSE.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/branches/RVM-777-NewMMTkGlue/work/libraryInterface/Common/src/java/net/JikesRVMSupport.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/COPYRIGHT.txt
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/COPYRIGHT.txt	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/COPYRIGHT.txt	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,7 +1,7 @@
&lt;br&gt;&amp;nbsp;The initial contribution to Jikes RVM (Oct 2001) was copyright by the IBM
&lt;br&gt;&amp;nbsp;Corporation. &amp;nbsp;Since 2001, a number of individuals and other entities have
&lt;br&gt;-contributed code to the project &amp;nbsp;under the terms of the CPL in which they
&lt;br&gt;-retain copyright ownership. &amp;nbsp;We know that at least the following
&lt;br&gt;+contributed code to the project &amp;nbsp;under the terms of the CPL/EPL in which they
&lt;br&gt;+retain copyright ownership. We know that at least the following
&lt;br&gt;&amp;nbsp;individuals/entities have copyright in one or more project files. More
&lt;br&gt;&amp;nbsp;precise details on the copyright status of a particular file can only be
&lt;br&gt;&amp;nbsp;accurately determined by examining the history of the file in question.
&lt;br&gt;&lt;br&gt;Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/LICENSE.html
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/LICENSE.html	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(rev 0)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/LICENSE.html	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -0,0 +1,285 @@
&lt;br&gt;+&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot; ?&amp;gt;
&lt;br&gt;+&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;&lt;a href=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;html xmlns=&amp;quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;head&amp;gt;
&lt;br&gt;+&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=ISO-8859-1&amp;quot; /&amp;gt;
&lt;br&gt;+&amp;lt;title&amp;gt;License Information&amp;lt;/title&amp;gt;
&lt;br&gt;+&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp;body {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;size: 8.5in 11.0in;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin: 0.25in 0.5in 0.25in 0.5in;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;tab-interval: 0.5in;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;p { &amp;nbsp;	
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-left: auto;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-top: &amp;nbsp;0.5em;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-bottom: 0.5em;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;p.list {
&lt;br&gt;+ &amp;nbsp;	margin-left: 0.5in;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-top: &amp;nbsp;0.05em;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-bottom: 0.05em;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;&amp;lt;/style&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/head&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;body lang=&amp;quot;EN-US&amp;quot;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;h2&amp;gt;General Information&amp;lt;/h2&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Jikes RVM is free, open source software, distributed and freely
&lt;br&gt;+redistributable under the Eclipse Public License (EPL). &amp;nbsp;The EPL has
&lt;br&gt;+been certified by the Open Source Initiative as an open source
&lt;br&gt;+license. &amp;nbsp;The EPL meets the Debian Free Software Guidelines.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Note: some code in the libraryInterface tree is distributed under
&lt;br&gt;+other open source licenses. &amp;nbsp;See the various LICENSE files in that
&lt;br&gt;+tree for details.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Note: some code in the external tree is distributed under
&lt;br&gt;+other open source licenses. &amp;nbsp;See the various LICENSE files in that
&lt;br&gt;+tree for details.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Note: &amp;nbsp;rvm/src-generated/opt-burs/jburg contains a tool, jburg,
&lt;br&gt;+which was derived from iburg and is not distributed under the EPL.
&lt;br&gt;+See rvm/src-generated/opt-burs/jburg/LICENSE for details.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;The legal text of the Eclipse Public License is appended below for
&lt;br&gt;+reference&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;hline&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;h2&amp;gt;Eclipse Public License - v 1.0&amp;lt;/h2&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
&lt;br&gt;+PUBLIC LICENSE (&amp;quot;AGREEMENT&amp;quot;). ANY USE, REPRODUCTION OR
&lt;br&gt;+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
&lt;br&gt;+AGREEMENT.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;1. DEFINITIONS&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Contribution&amp;quot; means:&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;a) in the case of the initial Contributor, the initial
&lt;br&gt;+code and documentation distributed under this Agreement, and&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;b) in the case of each subsequent Contributor:&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;i) changes to the Program, and&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;ii) additions to the Program;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;where such changes and/or additions to the Program
&lt;br&gt;+originate from and are distributed by that particular Contributor. A
&lt;br&gt;+Contribution 'originates' from a Contributor if it was added to the
&lt;br&gt;+Program by such Contributor itself or anyone acting on such
&lt;br&gt;+Contributor's behalf. Contributions do not include additions to the
&lt;br&gt;+Program which: (i) are separate modules of software distributed in
&lt;br&gt;+conjunction with the Program under their own license agreement, and (ii)
&lt;br&gt;+are not derivative works of the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Contributor&amp;quot; means any person or entity that distributes
&lt;br&gt;+the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Licensed Patents&amp;quot; mean patent claims licensable by a
&lt;br&gt;+Contributor which are necessarily infringed by the use or sale of its
&lt;br&gt;+Contribution alone or when combined with the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Program&amp;quot; means the Contributions distributed in accordance
&lt;br&gt;+with this Agreement.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Recipient&amp;quot; means anyone who receives the Program under
&lt;br&gt;+this Agreement, including all Contributors.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;2. GRANT OF RIGHTS&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;a) Subject to the terms of this Agreement, each
&lt;br&gt;+Contributor hereby grants Recipient a non-exclusive, worldwide,
&lt;br&gt;+royalty-free copyright license to reproduce, prepare derivative works
&lt;br&gt;+of, publicly display, publicly perform, distribute and sublicense the
&lt;br&gt;+Contribution of such Contributor, if any, and such derivative works, in
&lt;br&gt;+source code and object code form.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;b) Subject to the terms of this Agreement, each
&lt;br&gt;+Contributor hereby grants Recipient a non-exclusive, worldwide,
&lt;br&gt;+royalty-free patent license under Licensed Patents to make, use, sell,
&lt;br&gt;+offer to sell, import and otherwise transfer the Contribution of such
&lt;br&gt;+Contributor, if any, in source code and object code form. This patent
&lt;br&gt;+license shall apply to the combination of the Contribution and the
&lt;br&gt;+Program if, at the time the Contribution is added by the Contributor,
&lt;br&gt;+such addition of the Contribution causes such combination to be covered
&lt;br&gt;+by the Licensed Patents. The patent license shall not apply to any other
&lt;br&gt;+combinations which include the Contribution. No hardware per se is
&lt;br&gt;+licensed hereunder.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;c) Recipient understands that although each Contributor
&lt;br&gt;+grants the licenses to its Contributions set forth herein, no assurances
&lt;br&gt;+are provided by any Contributor that the Program does not infringe the
&lt;br&gt;+patent or other intellectual property rights of any other entity. Each
&lt;br&gt;+Contributor disclaims any liability to Recipient for claims brought by
&lt;br&gt;+any other entity based on infringement of intellectual property rights
&lt;br&gt;+or otherwise. As a condition to exercising the rights and licenses
&lt;br&gt;+granted hereunder, each Recipient hereby assumes sole responsibility to
&lt;br&gt;+secure any other intellectual property rights needed, if any. For
&lt;br&gt;+example, if a third party patent license is required to allow Recipient
&lt;br&gt;+to distribute the Program, it is Recipient's responsibility to acquire
&lt;br&gt;+that license before distributing the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;d) Each Contributor represents that to its knowledge it
&lt;br&gt;+has sufficient copyright rights in its Contribution, if any, to grant
&lt;br&gt;+the copyright license set forth in this Agreement.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;3. REQUIREMENTS&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;A Contributor may choose to distribute the Program in object code
&lt;br&gt;+form under its own license agreement, provided that:&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;a) it complies with the terms and conditions of this
&lt;br&gt;+Agreement; and&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;b) its license agreement:&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;i) effectively disclaims on behalf of all Contributors
&lt;br&gt;+all warranties and conditions, express and implied, including warranties
&lt;br&gt;+or conditions of title and non-infringement, and implied warranties or
&lt;br&gt;+conditions of merchantability and fitness for a particular purpose;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;ii) effectively excludes on behalf of all Contributors
&lt;br&gt;+all liability for damages, including direct, indirect, special,
&lt;br&gt;+incidental and consequential damages, such as lost profits;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;iii) states that any provisions which differ from this
&lt;br&gt;+Agreement are offered by that Contributor alone and not by any other
&lt;br&gt;+party; and&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;iv) states that source code for the Program is available
&lt;br&gt;+from such Contributor, and informs licensees how to obtain it in a
&lt;br&gt;+reasonable manner on or through a medium customarily used for software
&lt;br&gt;+exchange.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;When the Program is made available in source code form:&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;a) it must be made available under this Agreement; and&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;b) a copy of this Agreement must be included with each
&lt;br&gt;+copy of the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Contributors may not remove or alter any copyright notices contained
&lt;br&gt;+within the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Each Contributor must identify itself as the originator of its
&lt;br&gt;+Contribution, if any, in a manner that reasonably allows subsequent
&lt;br&gt;+Recipients to identify the originator of the Contribution.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;4. COMMERCIAL DISTRIBUTION&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Commercial distributors of software may accept certain
&lt;br&gt;+responsibilities with respect to end users, business partners and the
&lt;br&gt;+like. While this license is intended to facilitate the commercial use of
&lt;br&gt;+the Program, the Contributor who includes the Program in a commercial
&lt;br&gt;+product offering should do so in a manner which does not create
&lt;br&gt;+potential liability for other Contributors. Therefore, if a Contributor
&lt;br&gt;+includes the Program in a commercial product offering, such Contributor
&lt;br&gt;+(&amp;quot;Commercial Contributor&amp;quot;) hereby agrees to defend and
&lt;br&gt;+indemnify every other Contributor (&amp;quot;Indemnified Contributor&amp;quot;)
&lt;br&gt;+against any losses, damages and costs (collectively &amp;quot;Losses&amp;quot;)
&lt;br&gt;+arising from claims, lawsuits and other legal actions brought by a third
&lt;br&gt;+party against the Indemnified Contributor to the extent caused by the
&lt;br&gt;+acts or omissions of such Commercial Contributor in connection with its
&lt;br&gt;+distribution of the Program in a commercial product offering. The
&lt;br&gt;+obligations in this section do not apply to any claims or Losses
&lt;br&gt;+relating to any actual or alleged intellectual property infringement. In
&lt;br&gt;+order to qualify, an Indemnified Contributor must: a) promptly notify
&lt;br&gt;+the Commercial Contributor in writing of such claim, and b) allow the
&lt;br&gt;+Commercial Contributor to control, and cooperate with the Commercial
&lt;br&gt;+Contributor in, the defense and any related settlement negotiations. The
&lt;br&gt;+Indemnified Contributor may participate in any such claim at its own
&lt;br&gt;+expense.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;For example, a Contributor might include the Program in a commercial
&lt;br&gt;+product offering, Product X. That Contributor is then a Commercial
&lt;br&gt;+Contributor. If that Commercial Contributor then makes performance
&lt;br&gt;+claims, or offers warranties related to Product X, those performance
&lt;br&gt;+claims and warranties are such Commercial Contributor's responsibility
&lt;br&gt;+alone. Under this section, the Commercial Contributor would have to
&lt;br&gt;+defend claims against the other Contributors related to those
&lt;br&gt;+performance claims and warranties, and if a court requires any other
&lt;br&gt;+Contributor to pay any damages as a result, the Commercial Contributor
&lt;br&gt;+must pay those damages.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;5. NO WARRANTY&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
&lt;br&gt;+PROVIDED ON AN &amp;quot;AS IS&amp;quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
&lt;br&gt;+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
&lt;br&gt;+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
&lt;br&gt;+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
&lt;br&gt;+responsible for determining the appropriateness of using and
&lt;br&gt;+distributing the Program and assumes all risks associated with its
&lt;br&gt;+exercise of rights under this Agreement , including but not limited to
&lt;br&gt;+the risks and costs of program errors, compliance with applicable laws,
&lt;br&gt;+damage to or loss of data, programs or equipment, and unavailability or
&lt;br&gt;+interruption of operations.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;6. DISCLAIMER OF LIABILITY&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
&lt;br&gt;+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
&lt;br&gt;+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
&lt;br&gt;+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
&lt;br&gt;+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
&lt;br&gt;+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
&lt;br&gt;+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
&lt;br&gt;+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;7. GENERAL&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;If any provision of this Agreement is invalid or unenforceable under
&lt;br&gt;+applicable law, it shall not affect the validity or enforceability of
&lt;br&gt;+the remainder of the terms of this Agreement, and without further action
&lt;br&gt;+by the parties hereto, such provision shall be reformed to the minimum
&lt;br&gt;+extent necessary to make such provision valid and enforceable.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;If Recipient institutes patent litigation against any entity
&lt;br&gt;+(including a cross-claim or counterclaim in a lawsuit) alleging that the
&lt;br&gt;+Program itself (excluding combinations of the Program with other
&lt;br&gt;+software or hardware) infringes such Recipient's patent(s), then such
&lt;br&gt;+Recipient's rights granted under Section 2(b) shall terminate as of the
&lt;br&gt;+date such litigation is filed.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;All Recipient's rights under this Agreement shall terminate if it
&lt;br&gt;+fails to comply with any of the material terms or conditions of this
&lt;br&gt;+Agreement and does not cure such failure in a reasonable period of time
&lt;br&gt;+after becoming aware of such noncompliance. If all Recipient's rights
&lt;br&gt;+under this Agreement terminate, Recipient agrees to cease use and
&lt;br&gt;+distribution of the Program as soon as reasonably practicable. However,
&lt;br&gt;+Recipient's obligations under this Agreement and any licenses granted by
&lt;br&gt;+Recipient relating to the Program shall continue and survive.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Everyone is permitted to copy and distribute copies of this
&lt;br&gt;+Agreement, but in order to avoid inconsistency the Agreement is
&lt;br&gt;+copyrighted and may only be modified in the following manner. The
&lt;br&gt;+Agreement Steward reserves the right to publish new versions (including
&lt;br&gt;+revisions) of this Agreement from time to time. No one other than the
&lt;br&gt;+Agreement Steward has the right to modify this Agreement. The Eclipse
&lt;br&gt;+Foundation is the initial Agreement Steward. The Eclipse Foundation may
&lt;br&gt;+assign the responsibility to serve as the Agreement Steward to a
&lt;br&gt;+suitable separate entity. Each new version of the Agreement will be
&lt;br&gt;+given a distinguishing version number. The Program (including
&lt;br&gt;+Contributions) may always be distributed subject to the version of the
&lt;br&gt;+Agreement under which it was received. In addition, after a new version
&lt;br&gt;+of the Agreement is published, Contributor may elect to distribute the
&lt;br&gt;+Program (including its Contributions) under the new version. Except as
&lt;br&gt;+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
&lt;br&gt;+rights or licenses to the intellectual property of any Contributor under
&lt;br&gt;+this Agreement, whether expressly, by implication, estoppel or
&lt;br&gt;+otherwise. All rights in the Program not expressly granted under this
&lt;br&gt;+Agreement are reserved.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;This Agreement is governed by the laws of the State of New York and
&lt;br&gt;+the intellectual property laws of the United States of America. No party
&lt;br&gt;+to this Agreement will bring a legal action under this Agreement more
&lt;br&gt;+than one year after the cause of action arose. Each party waives its
&lt;br&gt;+rights to a jury trial in any resulting litigation.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/body&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/html&amp;gt;
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Deleted: rvmroot/branches/RVM-777-NewMMTkGlue/work/LICENSE.txt
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/LICENSE.txt	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/LICENSE.txt	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,266 +0,0 @@
&lt;br&gt;-Jikes RVM is free, open source software, distributed and freely
&lt;br&gt;-redistributable under the Common Public License (CPL). &amp;nbsp;The CPL has
&lt;br&gt;-been certified by the Open Source Initiative as an open source
&lt;br&gt;-license. &amp;nbsp;The CPL meets the Debian Free Software Guidelines.
&lt;br&gt;-
&lt;br&gt;-Note: some code in the libraryInterface tree is distributed under
&lt;br&gt;-other open source licenses. &amp;nbsp;See the various LICENSE files in that
&lt;br&gt;-tree for details.
&lt;br&gt;-
&lt;br&gt;-Note: some code in the external tree is distributed under
&lt;br&gt;-other open source licenses. &amp;nbsp;See the various LICENSE files in that
&lt;br&gt;-tree for details.
&lt;br&gt;-
&lt;br&gt;-Note: &amp;nbsp;rvm/src-generated/opt-burs/jburg contains a tool, jburg,
&lt;br&gt;-which was derived from iburg and is not distributed under the CPL.
&lt;br&gt;-See rvm/src-generated/opt-burs/jburg/LICENSE for details.
&lt;br&gt;-
&lt;br&gt;--------- The following is the legal text of the Common Public License ---------
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Common Public License - v 1.0
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; THE &amp;nbsp;ACCOMPANYING &amp;nbsp;PROGRAM &amp;nbsp;IS PROVIDED UNDER THE TERMS OF THIS COMMON
&lt;br&gt;- &amp;nbsp; PUBLIC LICENSE (&amp;quot;AGREEMENT&amp;quot;). ANY USE, REPRODUCTION OR DISTRIBUTION OF
&lt;br&gt;- &amp;nbsp; THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 1. DEFINITIONS
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Contribution&amp;quot; means:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; a) in the case of the initial Contributor, the initial code and
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; documentation distributed under this Agreement, and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; b) in the case of each subsequent Contributor:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;i) changes to the Program, and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ii) additions to the Program;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; where such changes and/or additions to the Program originate from
&lt;br&gt;- &amp;nbsp; and are distributed by that particular Contributor. &amp;nbsp;A Contribution
&lt;br&gt;- &amp;nbsp; 'originates' from a Contributor if it was added to the Program by
&lt;br&gt;- &amp;nbsp; such Contributor itself or anyone acting on such Contributor's
&lt;br&gt;- &amp;nbsp; behalf. &amp;nbsp;Contributions do not include additions to the Program
&lt;br&gt;- &amp;nbsp; which: (i) are separate modules of software distributed in
&lt;br&gt;- &amp;nbsp; conjunction with the Program under their own license agreement, and
&lt;br&gt;- &amp;nbsp; (ii) are not derivative works of the Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Contributor&amp;quot; means any person or entity that distributes the
&lt;br&gt;- &amp;nbsp; Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Licensed Patents&amp;quot; mean patent claims licensable by a Contributor
&lt;br&gt;- &amp;nbsp; which are necessarily infringed by the use or sale of its
&lt;br&gt;- &amp;nbsp; Contribution alone or when combined with the Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Program&amp;quot; means the Contributions distributed in accordance with
&lt;br&gt;- &amp;nbsp; this Agreement.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Recipient&amp;quot; means anyone who receives the Program under this
&lt;br&gt;- &amp;nbsp; Agreement, including all Contributors.
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 2. GRANT OF RIGHTS
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; a) Subject to the terms of this Agreement, each Contributor hereby
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; grants Recipient a non-exclusive, worldwide, royalty-free
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; copyright license to reproduce, prepare derivative works of,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; publicly display, publicly perform, distribute and sublicense
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; the Contribution of such Contributor, if any, and such
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; derivative works, in source code and object code form.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; b) Subject to the terms of this Agreement, each Contributor hereby
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; grants Recipient a non-exclusive, worldwide, royalty-free
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; patent license under Licensed Patents to make, use, sell, offer
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; to sell, import and otherwise transfer the Contribution of such
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Contributor, if any, in source code and object code form. This
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; patent license shall apply to the combination of the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Contribution and the Program if, at the time the Contribution
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; is added by the Contributor, such addition of the Contribution
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; causes such combination to be covered by the Licensed
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Patents. The patent license shall not apply to any other
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; combinations which include the Contribution. No hardware per se
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; is licensed hereunder.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; c) Recipient understands that although each Contributor grants the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; licenses to its Contributions set forth herein, no assurances
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; are provided by any Contributor that the Program does not
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; infringe the patent or other intellectual property rights of
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; any other entity. &amp;nbsp;Each Contributor disclaims any liability to
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Recipient for claims brought by any other entity based on
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; infringement of intellectual property rights or otherwise. &amp;nbsp;As
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; a condition to exercising the rights and licenses granted
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; hereunder, each Recipient hereby assumes sole responsibility to
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; secure any other intellectual property rights needed, if any.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; For example, if a third party patent license is required to
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; allow Recipient to distribute the Program, it is Recipient's
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; responsibility to acquire that license before distributing the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; d) Each Contributor represents that to its knowledge it has
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; sufficient copyright rights in its Contribution, if any, to
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; grant the copyright license set forth in this Agreement.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 3. REQUIREMENTS
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; A Contributor may choose to distribute the Program in object code
&lt;br&gt;- &amp;nbsp; form under its own license agreement, provided that:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; a) it complies with the terms and conditions of this Agreement; and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; b) its license agreement:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; i) effectively disclaims on behalf of all Contributors all
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; warranties and conditions, express and implied, including
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; warranties or conditions of title and non-infringement, and
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; implied warranties or conditions of merchantability and fitness
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; for a particular purpose;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; ii) effectively excludes on behalf of all Contributors all
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; liability for damages, including direct, indirect, special,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; incidental and consequential damages, such as lost profits;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; iii) states that any provisions which differ from this Agreement
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; are offered by that Contributor alone and not by any other
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; party; and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; iv) states that source code for the Program is available from such
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Contributor, and informs licensees how to obtain it in a
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; reasonable manner on or through a medium customarily used for
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; software exchange.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; When the Program is made available in source code form:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; a) it must be made available under this Agreement; and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; b) a copy of this Agreement must be included with each copy of the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; Contributors may not remove or alter any copyright notices
&lt;br&gt;- &amp;nbsp; contained within the Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; Each Contributor must identify itself as the originator of its
&lt;br&gt;- &amp;nbsp; Contribution, if any, in a manner that reasonably allows subsequent
&lt;br&gt;- &amp;nbsp; Recipients to identify the originator of the Contribution.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 4. COMMERCIAL DISTRIBUTION
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; Commercial distributors of software may accept certain
&lt;br&gt;- &amp;nbsp; responsibilities with respect to end users, business partners and
&lt;br&gt;- &amp;nbsp; the like. &amp;nbsp;While this license is intended to facilitate the
&lt;br&gt;- &amp;nbsp; commercial use of the Program, the Contributor who includes the
&lt;br&gt;- &amp;nbsp; Program in a commercial product offering should do so in a manner
&lt;br&gt;- &amp;nbsp; which does not create potential liability for other
&lt;br&gt;- &amp;nbsp; Contributors. Therefore, if a Contributor includes the Program in a
&lt;br&gt;- &amp;nbsp; commercial product offering, such Contributor (&amp;quot;Commercial
&lt;br&gt;- &amp;nbsp; Contributor&amp;quot;) hereby agrees to defend and indemnify every other
&lt;br&gt;- &amp;nbsp; Contributor (&amp;quot;Indemnified Contributor&amp;quot;) against any losses, damages
&lt;br&gt;- &amp;nbsp; and costs (collectively &amp;quot;Losses&amp;quot;) arising from claims, lawsuits and
&lt;br&gt;- &amp;nbsp; other legal actions brought by a third party against the
&lt;br&gt;- &amp;nbsp; Indemnified Contributor to the extent caused by the acts or
&lt;br&gt;- &amp;nbsp; omissions of such Commercial Contributor in connection with its
&lt;br&gt;- &amp;nbsp; distribution of the Program in a commercial product offering. The
&lt;br&gt;- &amp;nbsp; obligations in this section do not apply to any claims or Losses
&lt;br&gt;- &amp;nbsp; relating to any actual or alleged intellectual property
&lt;br&gt;- &amp;nbsp; infringement. &amp;nbsp;In order to qualify, an Indemnified Contributor
&lt;br&gt;- &amp;nbsp; must: a) promptly notify the Commercial Contributor in writing of
&lt;br&gt;- &amp;nbsp; such claim, and b) allow the Commercial Contributor to control, and
&lt;br&gt;- &amp;nbsp; cooperate with the Commercial Contributor in, the defense and any
&lt;br&gt;- &amp;nbsp; related settlement negotiations. &amp;nbsp;The Indemnified Contributor may
&lt;br&gt;- &amp;nbsp; participate in any such claim at its own expense.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; For example, a Contributor might include the Program in a
&lt;br&gt;- &amp;nbsp; commercial product offering, Product X. &amp;nbsp;That Contributor is then a
&lt;br&gt;- &amp;nbsp; Commercial Contributor. &amp;nbsp;If that Commercial Contributor then makes
&lt;br&gt;- &amp;nbsp; performance claims, or offers warranties related to Product X,
&lt;br&gt;- &amp;nbsp; those performance claims and warranties are such Commercial
&lt;br&gt;- &amp;nbsp; Contributor's responsibility alone. &amp;nbsp;Under this section, the
&lt;br&gt;- &amp;nbsp; Commercial Contributor would have to defend claims against the
&lt;br&gt;- &amp;nbsp; other Contributors related to those performance claims and
&lt;br&gt;- &amp;nbsp; warranties, and if a court requires any other Contributor to pay
&lt;br&gt;- &amp;nbsp; any damages as a result, the Commercial Contributor must pay those
&lt;br&gt;- &amp;nbsp; damages.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 5. NO WARRANTY
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
&lt;br&gt;- &amp;nbsp; PROVIDED ON AN &amp;quot;AS IS&amp;quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
&lt;br&gt;- &amp;nbsp; ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
&lt;br&gt;- &amp;nbsp; ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
&lt;br&gt;- &amp;nbsp; MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;Each
&lt;br&gt;- &amp;nbsp; Recipient is solely responsible for determining the appropriateness
&lt;br&gt;- &amp;nbsp; of using and distributing the Program and assumes all risks
&lt;br&gt;- &amp;nbsp; associated with its exercise of rights under this Agreement,
&lt;br&gt;- &amp;nbsp; including but not limited to the risks and costs of program errors,
&lt;br&gt;- &amp;nbsp; compliance with applicable laws, damage to or loss of data,
&lt;br&gt;- &amp;nbsp; programs or equipment, and unavailability or interruption of
&lt;br&gt;- &amp;nbsp; operations.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 6. DISCLAIMER OF LIABILITY
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
&lt;br&gt;- &amp;nbsp; NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
&lt;br&gt;- &amp;nbsp; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&lt;br&gt;- &amp;nbsp; (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON
&lt;br&gt;- &amp;nbsp; ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
&lt;br&gt;- &amp;nbsp; TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
&lt;br&gt;- &amp;nbsp; THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY
&lt;br&gt;- &amp;nbsp; RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF
&lt;br&gt;- &amp;nbsp; SUCH DAMAGES.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 7. GENERAL
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; If any provision of this Agreement is invalid or unenforceable
&lt;br&gt;- &amp;nbsp; under applicable law, it shall not affect the validity or
&lt;br&gt;- &amp;nbsp; enforceability of the remainder of the terms of this Agreement, and
&lt;br&gt;- &amp;nbsp; without further action by the parties hereto, such provision shall
&lt;br&gt;- &amp;nbsp; be reformed to the minimum extent necessary to make such provision
&lt;br&gt;- &amp;nbsp; valid and enforceable.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; If Recipient institutes patent litigation against a Contributor
&lt;br&gt;- &amp;nbsp; with respect to a patent applicable to software (including a
&lt;br&gt;- &amp;nbsp; cross-claim or counterclaim in a lawsuit), then any patent licenses
&lt;br&gt;- &amp;nbsp; granted by that Contributor to such Recipient under this Agreement
&lt;br&gt;- &amp;nbsp; shall terminate as of the date such litigation is filed. &amp;nbsp;In
&lt;br&gt;- &amp;nbsp; addition, if Recipient institutes patent litigation against any
&lt;br&gt;- &amp;nbsp; entity (including a cross-claim or counterclaim in a lawsuit)
&lt;br&gt;- &amp;nbsp; alleging that the Program itself (excluding combinations of the
&lt;br&gt;- &amp;nbsp; Program with other software or hardware) infringes such Recipient's
&lt;br&gt;- &amp;nbsp; patent(s), then such Recipient's rights granted under Section 2(b)
&lt;br&gt;- &amp;nbsp; shall terminate as of the date such litigation is filed.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; All Recipient's rights under this Agreement shall terminate if it
&lt;br&gt;- &amp;nbsp; fails to comply with any of the material terms or conditions of
&lt;br&gt;- &amp;nbsp; this Agreement and does not cure such failure in a reasonable
&lt;br&gt;- &amp;nbsp; period of time after becoming aware of such noncompliance. If all
&lt;br&gt;- &amp;nbsp; Recipient's rights under this Agreement terminate, Recipient agrees
&lt;br&gt;- &amp;nbsp; to cease use and distribution of the Program as soon as reasonably
&lt;br&gt;- &amp;nbsp; practicable. &amp;nbsp;However, Recipient's obligations under this Agreement
&lt;br&gt;- &amp;nbsp; and any licenses granted by Recipient relating to the Program shall
&lt;br&gt;- &amp;nbsp; continue and survive.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; Everyone is permitted to copy and distribute copies of this
&lt;br&gt;- &amp;nbsp; Agreement, but in order to avoid inconsistency the Agreement is
&lt;br&gt;- &amp;nbsp; copyrighted and may only be modified in the following manner. The
&lt;br&gt;- &amp;nbsp; Agreement Steward reserves the right to publish new versions
&lt;br&gt;- &amp;nbsp; (including revisions) of this Agreement from time to time. No one
&lt;br&gt;- &amp;nbsp; other than the Agreement Steward has the right to modify this
&lt;br&gt;- &amp;nbsp; Agreement. IBM is the initial Agreement Steward. &amp;nbsp;IBM may assign
&lt;br&gt;- &amp;nbsp; the responsibility to serve as the Agreement Steward to a suitable
&lt;br&gt;- &amp;nbsp; separate entity. Each new version of the Agreement will be given a
&lt;br&gt;- &amp;nbsp; distinguishing version number. The Program (including
&lt;br&gt;- &amp;nbsp; Contributions) may always be distributed subject to the version of
&lt;br&gt;- &amp;nbsp; the Agreement under which it was received. In addition, after a new
&lt;br&gt;- &amp;nbsp; version of the Agreement is published, Contributor may elect to
&lt;br&gt;- &amp;nbsp; distribute the Program (including its Contributions) under the new
&lt;br&gt;- &amp;nbsp; version. Except as expressly stated in Sections 2(a) and 2(b)
&lt;br&gt;- &amp;nbsp; above, Recipient receives no rights or licenses to the intellectual
&lt;br&gt;- &amp;nbsp; property of any Contributor under this Agreement, whether
&lt;br&gt;- &amp;nbsp; expressly, by implication, estoppel or otherwise. All rights in the
&lt;br&gt;- &amp;nbsp; Program not expressly granted under this Agreement are reserved.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; This Agreement is governed by the laws of the State of New York and
&lt;br&gt;- &amp;nbsp; the intellectual property laws of the United States of America. No
&lt;br&gt;- &amp;nbsp; party to this Agreement will bring a legal action under this
&lt;br&gt;- &amp;nbsp; Agreement more than one year after the cause of action arose. Each
&lt;br&gt;- &amp;nbsp; party waives its rights to a jury trial in any resulting
&lt;br&gt;- &amp;nbsp; litigation.
&lt;br&gt;&lt;br&gt;Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/LICENSE.html
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/LICENSE.html	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(rev 0)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/LICENSE.html	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -0,0 +1,273 @@
&lt;br&gt;+&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot; ?&amp;gt;
&lt;br&gt;+&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;&lt;a href=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;html xmlns=&amp;quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;head&amp;gt;
&lt;br&gt;+&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=ISO-8859-1&amp;quot; /&amp;gt;
&lt;br&gt;+&amp;lt;title&amp;gt;License Information&amp;lt;/title&amp;gt;
&lt;br&gt;+&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp;body {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;size: 8.5in 11.0in;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin: 0.25in 0.5in 0.25in 0.5in;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;tab-interval: 0.5in;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;p { &amp;nbsp;	
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-left: auto;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-top: &amp;nbsp;0.5em;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-bottom: 0.5em;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;p.list {
&lt;br&gt;+ &amp;nbsp;	margin-left: 0.5in;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-top: &amp;nbsp;0.05em;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;margin-bottom: 0.05em;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;&amp;lt;/style&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/head&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;body lang=&amp;quot;EN-US&amp;quot;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;h2&amp;gt;General Information&amp;lt;/h2&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;MMTk is free, open source software, distributed and freely
&lt;br&gt;+redistributable under the Eclipse Public License (EPL). &amp;nbsp;The EPL has
&lt;br&gt;+been certified by the Open Source Initiative as an open source
&lt;br&gt;+license. &amp;nbsp;The EPL meets the Debian Free Software Guidelines.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;The legal text of the Eclipse Public License is appended below for
&lt;br&gt;+reference&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;hline&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;h2&amp;gt;Eclipse Public License - v 1.0&amp;lt;/h2&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
&lt;br&gt;+PUBLIC LICENSE (&amp;quot;AGREEMENT&amp;quot;). ANY USE, REPRODUCTION OR
&lt;br&gt;+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
&lt;br&gt;+AGREEMENT.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;1. DEFINITIONS&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Contribution&amp;quot; means:&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;a) in the case of the initial Contributor, the initial
&lt;br&gt;+code and documentation distributed under this Agreement, and&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;b) in the case of each subsequent Contributor:&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;i) changes to the Program, and&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;ii) additions to the Program;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;where such changes and/or additions to the Program
&lt;br&gt;+originate from and are distributed by that particular Contributor. A
&lt;br&gt;+Contribution 'originates' from a Contributor if it was added to the
&lt;br&gt;+Program by such Contributor itself or anyone acting on such
&lt;br&gt;+Contributor's behalf. Contributions do not include additions to the
&lt;br&gt;+Program which: (i) are separate modules of software distributed in
&lt;br&gt;+conjunction with the Program under their own license agreement, and (ii)
&lt;br&gt;+are not derivative works of the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Contributor&amp;quot; means any person or entity that distributes
&lt;br&gt;+the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Licensed Patents&amp;quot; mean patent claims licensable by a
&lt;br&gt;+Contributor which are necessarily infringed by the use or sale of its
&lt;br&gt;+Contribution alone or when combined with the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Program&amp;quot; means the Contributions distributed in accordance
&lt;br&gt;+with this Agreement.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;quot;Recipient&amp;quot; means anyone who receives the Program under
&lt;br&gt;+this Agreement, including all Contributors.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;2. GRANT OF RIGHTS&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;a) Subject to the terms of this Agreement, each
&lt;br&gt;+Contributor hereby grants Recipient a non-exclusive, worldwide,
&lt;br&gt;+royalty-free copyright license to reproduce, prepare derivative works
&lt;br&gt;+of, publicly display, publicly perform, distribute and sublicense the
&lt;br&gt;+Contribution of such Contributor, if any, and such derivative works, in
&lt;br&gt;+source code and object code form.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;b) Subject to the terms of this Agreement, each
&lt;br&gt;+Contributor hereby grants Recipient a non-exclusive, worldwide,
&lt;br&gt;+royalty-free patent license under Licensed Patents to make, use, sell,
&lt;br&gt;+offer to sell, import and otherwise transfer the Contribution of such
&lt;br&gt;+Contributor, if any, in source code and object code form. This patent
&lt;br&gt;+license shall apply to the combination of the Contribution and the
&lt;br&gt;+Program if, at the time the Contribution is added by the Contributor,
&lt;br&gt;+such addition of the Contribution causes such combination to be covered
&lt;br&gt;+by the Licensed Patents. The patent license shall not apply to any other
&lt;br&gt;+combinations which include the Contribution. No hardware per se is
&lt;br&gt;+licensed hereunder.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;c) Recipient understands that although each Contributor
&lt;br&gt;+grants the licenses to its Contributions set forth herein, no assurances
&lt;br&gt;+are provided by any Contributor that the Program does not infringe the
&lt;br&gt;+patent or other intellectual property rights of any other entity. Each
&lt;br&gt;+Contributor disclaims any liability to Recipient for claims brought by
&lt;br&gt;+any other entity based on infringement of intellectual property rights
&lt;br&gt;+or otherwise. As a condition to exercising the rights and licenses
&lt;br&gt;+granted hereunder, each Recipient hereby assumes sole responsibility to
&lt;br&gt;+secure any other intellectual property rights needed, if any. For
&lt;br&gt;+example, if a third party patent license is required to allow Recipient
&lt;br&gt;+to distribute the Program, it is Recipient's responsibility to acquire
&lt;br&gt;+that license before distributing the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;d) Each Contributor represents that to its knowledge it
&lt;br&gt;+has sufficient copyright rights in its Contribution, if any, to grant
&lt;br&gt;+the copyright license set forth in this Agreement.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;3. REQUIREMENTS&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;A Contributor may choose to distribute the Program in object code
&lt;br&gt;+form under its own license agreement, provided that:&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;a) it complies with the terms and conditions of this
&lt;br&gt;+Agreement; and&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;b) its license agreement:&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;i) effectively disclaims on behalf of all Contributors
&lt;br&gt;+all warranties and conditions, express and implied, including warranties
&lt;br&gt;+or conditions of title and non-infringement, and implied warranties or
&lt;br&gt;+conditions of merchantability and fitness for a particular purpose;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;ii) effectively excludes on behalf of all Contributors
&lt;br&gt;+all liability for damages, including direct, indirect, special,
&lt;br&gt;+incidental and consequential damages, such as lost profits;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;iii) states that any provisions which differ from this
&lt;br&gt;+Agreement are offered by that Contributor alone and not by any other
&lt;br&gt;+party; and&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;iv) states that source code for the Program is available
&lt;br&gt;+from such Contributor, and informs licensees how to obtain it in a
&lt;br&gt;+reasonable manner on or through a medium customarily used for software
&lt;br&gt;+exchange.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;When the Program is made available in source code form:&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;a) it must be made available under this Agreement; and&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p class=&amp;quot;list&amp;quot;&amp;gt;b) a copy of this Agreement must be included with each
&lt;br&gt;+copy of the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Contributors may not remove or alter any copyright notices contained
&lt;br&gt;+within the Program.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Each Contributor must identify itself as the originator of its
&lt;br&gt;+Contribution, if any, in a manner that reasonably allows subsequent
&lt;br&gt;+Recipients to identify the originator of the Contribution.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;4. COMMERCIAL DISTRIBUTION&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Commercial distributors of software may accept certain
&lt;br&gt;+responsibilities with respect to end users, business partners and the
&lt;br&gt;+like. While this license is intended to facilitate the commercial use of
&lt;br&gt;+the Program, the Contributor who includes the Program in a commercial
&lt;br&gt;+product offering should do so in a manner which does not create
&lt;br&gt;+potential liability for other Contributors. Therefore, if a Contributor
&lt;br&gt;+includes the Program in a commercial product offering, such Contributor
&lt;br&gt;+(&amp;quot;Commercial Contributor&amp;quot;) hereby agrees to defend and
&lt;br&gt;+indemnify every other Contributor (&amp;quot;Indemnified Contributor&amp;quot;)
&lt;br&gt;+against any losses, damages and costs (collectively &amp;quot;Losses&amp;quot;)
&lt;br&gt;+arising from claims, lawsuits and other legal actions brought by a third
&lt;br&gt;+party against the Indemnified Contributor to the extent caused by the
&lt;br&gt;+acts or omissions of such Commercial Contributor in connection with its
&lt;br&gt;+distribution of the Program in a commercial product offering. The
&lt;br&gt;+obligations in this section do not apply to any claims or Losses
&lt;br&gt;+relating to any actual or alleged intellectual property infringement. In
&lt;br&gt;+order to qualify, an Indemnified Contributor must: a) promptly notify
&lt;br&gt;+the Commercial Contributor in writing of such claim, and b) allow the
&lt;br&gt;+Commercial Contributor to control, and cooperate with the Commercial
&lt;br&gt;+Contributor in, the defense and any related settlement negotiations. The
&lt;br&gt;+Indemnified Contributor may participate in any such claim at its own
&lt;br&gt;+expense.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;For example, a Contributor might include the Program in a commercial
&lt;br&gt;+product offering, Product X. That Contributor is then a Commercial
&lt;br&gt;+Contributor. If that Commercial Contributor then makes performance
&lt;br&gt;+claims, or offers warranties related to Product X, those performance
&lt;br&gt;+claims and warranties are such Commercial Contributor's responsibility
&lt;br&gt;+alone. Under this section, the Commercial Contributor would have to
&lt;br&gt;+defend claims against the other Contributors related to those
&lt;br&gt;+performance claims and warranties, and if a court requires any other
&lt;br&gt;+Contributor to pay any damages as a result, the Commercial Contributor
&lt;br&gt;+must pay those damages.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;5. NO WARRANTY&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
&lt;br&gt;+PROVIDED ON AN &amp;quot;AS IS&amp;quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
&lt;br&gt;+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
&lt;br&gt;+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
&lt;br&gt;+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
&lt;br&gt;+responsible for determining the appropriateness of using and
&lt;br&gt;+distributing the Program and assumes all risks associated with its
&lt;br&gt;+exercise of rights under this Agreement , including but not limited to
&lt;br&gt;+the risks and costs of program errors, compliance with applicable laws,
&lt;br&gt;+damage to or loss of data, programs or equipment, and unavailability or
&lt;br&gt;+interruption of operations.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;6. DISCLAIMER OF LIABILITY&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
&lt;br&gt;+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
&lt;br&gt;+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
&lt;br&gt;+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
&lt;br&gt;+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
&lt;br&gt;+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
&lt;br&gt;+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
&lt;br&gt;+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;7. GENERAL&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;If any provision of this Agreement is invalid or unenforceable under
&lt;br&gt;+applicable law, it shall not affect the validity or enforceability of
&lt;br&gt;+the remainder of the terms of this Agreement, and without further action
&lt;br&gt;+by the parties hereto, such provision shall be reformed to the minimum
&lt;br&gt;+extent necessary to make such provision valid and enforceable.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;If Recipient institutes patent litigation against any entity
&lt;br&gt;+(including a cross-claim or counterclaim in a lawsuit) alleging that the
&lt;br&gt;+Program itself (excluding combinations of the Program with other
&lt;br&gt;+software or hardware) infringes such Recipient's patent(s), then such
&lt;br&gt;+Recipient's rights granted under Section 2(b) shall terminate as of the
&lt;br&gt;+date such litigation is filed.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;All Recipient's rights under this Agreement shall terminate if it
&lt;br&gt;+fails to comply with any of the material terms or conditions of this
&lt;br&gt;+Agreement and does not cure such failure in a reasonable period of time
&lt;br&gt;+after becoming aware of such noncompliance. If all Recipient's rights
&lt;br&gt;+under this Agreement terminate, Recipient agrees to cease use and
&lt;br&gt;+distribution of the Program as soon as reasonably practicable. However,
&lt;br&gt;+Recipient's obligations under this Agreement and any licenses granted by
&lt;br&gt;+Recipient relating to the Program shall continue and survive.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;Everyone is permitted to copy and distribute copies of this
&lt;br&gt;+Agreement, but in order to avoid inconsistency the Agreement is
&lt;br&gt;+copyrighted and may only be modified in the following manner. The
&lt;br&gt;+Agreement Steward reserves the right to publish new versions (including
&lt;br&gt;+revisions) of this Agreement from time to time. No one other than the
&lt;br&gt;+Agreement Steward has the right to modify this Agreement. The Eclipse
&lt;br&gt;+Foundation is the initial Agreement Steward. The Eclipse Foundation may
&lt;br&gt;+assign the responsibility to serve as the Agreement Steward to a
&lt;br&gt;+suitable separate entity. Each new version of the Agreement will be
&lt;br&gt;+given a distinguishing version number. The Program (including
&lt;br&gt;+Contributions) may always be distributed subject to the version of the
&lt;br&gt;+Agreement under which it was received. In addition, after a new version
&lt;br&gt;+of the Agreement is published, Contributor may elect to distribute the
&lt;br&gt;+Program (including its Contributions) under the new version. Except as
&lt;br&gt;+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
&lt;br&gt;+rights or licenses to the intellectual property of any Contributor under
&lt;br&gt;+this Agreement, whether expressly, by implication, estoppel or
&lt;br&gt;+otherwise. All rights in the Program not expressly granted under this
&lt;br&gt;+Agreement are reserved.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;p&amp;gt;This Agreement is governed by the laws of the State of New York and
&lt;br&gt;+the intellectual property laws of the United States of America. No party
&lt;br&gt;+to this Agreement will bring a legal action under this Agreement more
&lt;br&gt;+than one year after the cause of action arose. Each party waives its
&lt;br&gt;+rights to a jury trial in any resulting litigation.&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/body&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/html&amp;gt;
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Deleted: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/LICENSE.txt
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/LICENSE.txt	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/LICENSE.txt	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,254 +0,0 @@
&lt;br&gt;-MMTk is free, open source software, distributed and freely
&lt;br&gt;-redistributable under the Common Public License (CPL). &amp;nbsp;The CPL has
&lt;br&gt;-been certified by the Open Source Initiative as an open source
&lt;br&gt;-license. &amp;nbsp;The CPL meets the Debian Free Software Guidelines.
&lt;br&gt;-
&lt;br&gt;--------- The following is the legal text of the Common Public License ---------
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Common Public License - v 1.0
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; THE &amp;nbsp;ACCOMPANYING &amp;nbsp;PROGRAM &amp;nbsp;IS PROVIDED UNDER THE TERMS OF THIS COMMON
&lt;br&gt;- &amp;nbsp; PUBLIC LICENSE (&amp;quot;AGREEMENT&amp;quot;). ANY USE, REPRODUCTION OR DISTRIBUTION OF
&lt;br&gt;- &amp;nbsp; THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 1. DEFINITIONS
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Contribution&amp;quot; means:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; a) in the case of the initial Contributor, the initial code and
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; documentation distributed under this Agreement, and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; b) in the case of each subsequent Contributor:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;i) changes to the Program, and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ii) additions to the Program;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; where such changes and/or additions to the Program originate from
&lt;br&gt;- &amp;nbsp; and are distributed by that particular Contributor. &amp;nbsp;A Contribution
&lt;br&gt;- &amp;nbsp; 'originates' from a Contributor if it was added to the Program by
&lt;br&gt;- &amp;nbsp; such Contributor itself or anyone acting on such Contributor's
&lt;br&gt;- &amp;nbsp; behalf. &amp;nbsp;Contributions do not include additions to the Program
&lt;br&gt;- &amp;nbsp; which: (i) are separate modules of software distributed in
&lt;br&gt;- &amp;nbsp; conjunction with the Program under their own license agreement, and
&lt;br&gt;- &amp;nbsp; (ii) are not derivative works of the Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Contributor&amp;quot; means any person or entity that distributes the
&lt;br&gt;- &amp;nbsp; Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Licensed Patents&amp;quot; mean patent claims licensable by a Contributor
&lt;br&gt;- &amp;nbsp; which are necessarily infringed by the use or sale of its
&lt;br&gt;- &amp;nbsp; Contribution alone or when combined with the Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Program&amp;quot; means the Contributions distributed in accordance with
&lt;br&gt;- &amp;nbsp; this Agreement.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;quot;Recipient&amp;quot; means anyone who receives the Program under this
&lt;br&gt;- &amp;nbsp; Agreement, including all Contributors.
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 2. GRANT OF RIGHTS
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; a) Subject to the terms of this Agreement, each Contributor hereby
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; grants Recipient a non-exclusive, worldwide, royalty-free
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; copyright license to reproduce, prepare derivative works of,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; publicly display, publicly perform, distribute and sublicense
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; the Contribution of such Contributor, if any, and such
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; derivative works, in source code and object code form.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; b) Subject to the terms of this Agreement, each Contributor hereby
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; grants Recipient a non-exclusive, worldwide, royalty-free
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; patent license under Licensed Patents to make, use, sell, offer
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; to sell, import and otherwise transfer the Contribution of such
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Contributor, if any, in source code and object code form. This
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; patent license shall apply to the combination of the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Contribution and the Program if, at the time the Contribution
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; is added by the Contributor, such addition of the Contribution
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; causes such combination to be covered by the Licensed
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Patents. The patent license shall not apply to any other
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; combinations which include the Contribution. No hardware per se
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; is licensed hereunder.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; c) Recipient understands that although each Contributor grants the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; licenses to its Contributions set forth herein, no assurances
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; are provided by any Contributor that the Program does not
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; infringe the patent or other intellectual property rights of
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; any other entity. &amp;nbsp;Each Contributor disclaims any liability to
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Recipient for claims brought by any other entity based on
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; infringement of intellectual property rights or otherwise. &amp;nbsp;As
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; a condition to exercising the rights and licenses granted
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; hereunder, each Recipient hereby assumes sole responsibility to
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; secure any other intellectual property rights needed, if any.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; For example, if a third party patent license is required to
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; allow Recipient to distribute the Program, it is Recipient's
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; responsibility to acquire that license before distributing the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; d) Each Contributor represents that to its knowledge it has
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; sufficient copyright rights in its Contribution, if any, to
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; grant the copyright license set forth in this Agreement.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 3. REQUIREMENTS
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; A Contributor may choose to distribute the Program in object code
&lt;br&gt;- &amp;nbsp; form under its own license agreement, provided that:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; a) it complies with the terms and conditions of this Agreement; and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; b) its license agreement:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; i) effectively disclaims on behalf of all Contributors all
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; warranties and conditions, express and implied, including
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; warranties or conditions of title and non-infringement, and
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; implied warranties or conditions of merchantability and fitness
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; for a particular purpose;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; ii) effectively excludes on behalf of all Contributors all
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; liability for damages, including direct, indirect, special,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; incidental and consequential damages, such as lost profits;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; iii) states that any provisions which differ from this Agreement
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; are offered by that Contributor alone and not by any other
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; party; and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; iv) states that source code for the Program is available from such
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; Contributor, and informs licensees how to obtain it in a
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; reasonable manner on or through a medium customarily used for
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; software exchange.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; When the Program is made available in source code form:
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; a) it must be made available under this Agreement; and
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; b) a copy of this Agreement must be included with each copy of the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; Contributors may not remove or alter any copyright notices
&lt;br&gt;- &amp;nbsp; contained within the Program.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; Each Contributor must identify itself as the originator of its
&lt;br&gt;- &amp;nbsp; Contribution, if any, in a manner that reasonably allows subsequent
&lt;br&gt;- &amp;nbsp; Recipients to identify the originator of the Contribution.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 4. COMMERCIAL DISTRIBUTION
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; Commercial distributors of software may accept certain
&lt;br&gt;- &amp;nbsp; responsibilities with respect to end users, business partners and
&lt;br&gt;- &amp;nbsp; the like. &amp;nbsp;While this license is intended to facilitate the
&lt;br&gt;- &amp;nbsp; commercial use of the Program, the Contributor who includes the
&lt;br&gt;- &amp;nbsp; Program in a commercial product offering should do so in a manner
&lt;br&gt;- &amp;nbsp; which does not create potential liability for other
&lt;br&gt;- &amp;nbsp; Contributors. Therefore, if a Contributor includes the Program in a
&lt;br&gt;- &amp;nbsp; commercial product offering, such Contributor (&amp;quot;Commercial
&lt;br&gt;- &amp;nbsp; Contributor&amp;quot;) hereby agrees to defend and indemnify every other
&lt;br&gt;- &amp;nbsp; Contributor (&amp;quot;Indemnified Contributor&amp;quot;) against any losses, damages
&lt;br&gt;- &amp;nbsp; and costs (collectively &amp;quot;Losses&amp;quot;) arising from claims, lawsuits and
&lt;br&gt;- &amp;nbsp; other legal actions brought by a third party against the
&lt;br&gt;- &amp;nbsp; Indemnified Contributor to the extent caused by the acts or
&lt;br&gt;- &amp;nbsp; omissions of such Commercial Contributor in connection with its
&lt;br&gt;- &amp;nbsp; distribution of the Program in a commercial product offering. The
&lt;br&gt;- &amp;nbsp; obligations in this section do not apply to any claims or Losses
&lt;br&gt;- &amp;nbsp; relating to any actual or alleged intellectual property
&lt;br&gt;- &amp;nbsp; infringement. &amp;nbsp;In order to qualify, an Indemnified Contributor
&lt;br&gt;- &amp;nbsp; must: a) promptly notify the Commercial Contributor in writing of
&lt;br&gt;- &amp;nbsp; such claim, and b) allow the Commercial Contributor to control, and
&lt;br&gt;- &amp;nbsp; cooperate with the Commercial Contributor in, the defense and any
&lt;br&gt;- &amp;nbsp; related settlement negotiations. &amp;nbsp;The Indemnified Contributor may
&lt;br&gt;- &amp;nbsp; participate in any such claim at its own expense.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; For example, a Contributor might include the Program in a
&lt;br&gt;- &amp;nbsp; commercial product offering, Product X. &amp;nbsp;That Contributor is then a
&lt;br&gt;- &amp;nbsp; Commercial Contributor. &amp;nbsp;If that Commercial Contributor then makes
&lt;br&gt;- &amp;nbsp; performance claims, or offers warranties related to Product X,
&lt;br&gt;- &amp;nbsp; those performance claims and warranties are such Commercial
&lt;br&gt;- &amp;nbsp; Contributor's responsibility alone. &amp;nbsp;Under this section, the
&lt;br&gt;- &amp;nbsp; Commercial Contributor would have to defend claims against the
&lt;br&gt;- &amp;nbsp; other Contributors related to those performance claims and
&lt;br&gt;- &amp;nbsp; warranties, and if a court requires any other Contributor to pay
&lt;br&gt;- &amp;nbsp; any damages as a result, the Commercial Contributor must pay those
&lt;br&gt;- &amp;nbsp; damages.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 5. NO WARRANTY
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
&lt;br&gt;- &amp;nbsp; PROVIDED ON AN &amp;quot;AS IS&amp;quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
&lt;br&gt;- &amp;nbsp; ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
&lt;br&gt;- &amp;nbsp; ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
&lt;br&gt;- &amp;nbsp; MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;Each
&lt;br&gt;- &amp;nbsp; Recipient is solely responsible for determining the appropriateness
&lt;br&gt;- &amp;nbsp; of using and distributing the Program and assumes all risks
&lt;br&gt;- &amp;nbsp; associated with its exercise of rights under this Agreement,
&lt;br&gt;- &amp;nbsp; including but not limited to the risks and costs of program errors,
&lt;br&gt;- &amp;nbsp; compliance with applicable laws, damage to or loss of data,
&lt;br&gt;- &amp;nbsp; programs or equipment, and unavailability or interruption of
&lt;br&gt;- &amp;nbsp; operations.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 6. DISCLAIMER OF LIABILITY
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
&lt;br&gt;- &amp;nbsp; NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
&lt;br&gt;- &amp;nbsp; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&lt;br&gt;- &amp;nbsp; (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON
&lt;br&gt;- &amp;nbsp; ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
&lt;br&gt;- &amp;nbsp; TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
&lt;br&gt;- &amp;nbsp; THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY
&lt;br&gt;- &amp;nbsp; RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF
&lt;br&gt;- &amp;nbsp; SUCH DAMAGES.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; 7. GENERAL
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; If any provision of this Agreement is invalid or unenforceable
&lt;br&gt;- &amp;nbsp; under applicable law, it shall not affect the validity or
&lt;br&gt;- &amp;nbsp; enforceability of the remainder of the terms of this Agreement, and
&lt;br&gt;- &amp;nbsp; without further action by the parties hereto, such provision shall
&lt;br&gt;- &amp;nbsp; be reformed to the minimum extent necessary to make such provision
&lt;br&gt;- &amp;nbsp; valid and enforceable.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; If Recipient institutes patent litigation against a Contributor
&lt;br&gt;- &amp;nbsp; with respect to a patent applicable to software (including a
&lt;br&gt;- &amp;nbsp; cross-claim or counterclaim in a lawsuit), then any patent licenses
&lt;br&gt;- &amp;nbsp; granted by that Contributor to such Recipient under this Agreement
&lt;br&gt;- &amp;nbsp; shall terminate as of the date such litigation is filed. &amp;nbsp;In
&lt;br&gt;- &amp;nbsp; addition, if Recipient institutes patent litigation against any
&lt;br&gt;- &amp;nbsp; entity (including a cross-claim or counterclaim in a lawsuit)
&lt;br&gt;- &amp;nbsp; alleging that the Program itself (excluding combinations of the
&lt;br&gt;- &amp;nbsp; Program with other software or hardware) infringes such Recipient's
&lt;br&gt;- &amp;nbsp; patent(s), then such Recipient's rights granted under Section 2(b)
&lt;br&gt;- &amp;nbsp; shall terminate as of the date such litigation is filed.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; All Recipient's rights under this Agreement shall terminate if it
&lt;br&gt;- &amp;nbsp; fails to comply with any of the material terms or conditions of
&lt;br&gt;- &amp;nbsp; this Agreement and does not cure such failure in a reasonable
&lt;br&gt;- &amp;nbsp; period of time after becoming aware of such noncompliance. If all
&lt;br&gt;- &amp;nbsp; Recipient's rights under this Agreement terminate, Recipient agrees
&lt;br&gt;- &amp;nbsp; to cease use and distribution of the Program as soon as reasonably
&lt;br&gt;- &amp;nbsp; practicable. &amp;nbsp;However, Recipient's obligations under this Agreement
&lt;br&gt;- &amp;nbsp; and any licenses granted by Recipient relating to the Program shall
&lt;br&gt;- &amp;nbsp; continue and survive.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; Everyone is permitted to copy and distribute copies of this
&lt;br&gt;- &amp;nbsp; Agreement, but in order to avoid inconsistency the Agreement is
&lt;br&gt;- &amp;nbsp; copyrighted and may only be modified in the following manner. The
&lt;br&gt;- &amp;nbsp; Agreement Steward reserves the right to publish new versions
&lt;br&gt;- &amp;nbsp; (including revisions) of this Agreement from time to time. No one
&lt;br&gt;- &amp;nbsp; other than the Agreement Steward has the right to modify this
&lt;br&gt;- &amp;nbsp; Agreement. IBM is the initial Agreement Steward. &amp;nbsp;IBM may assign
&lt;br&gt;- &amp;nbsp; the responsibility to serve as the Agreement Steward to a suitable
&lt;br&gt;- &amp;nbsp; separate entity. Each new version of the Agreement will be given a
&lt;br&gt;- &amp;nbsp; distinguishing version number. The Program (including
&lt;br&gt;- &amp;nbsp; Contributions) may always be distributed subject to the version of
&lt;br&gt;- &amp;nbsp; the Agreement under which it was received. In addition, after a new
&lt;br&gt;- &amp;nbsp; version of the Agreement is published, Contributor may elect to
&lt;br&gt;- &amp;nbsp; distribute the Program (including its Contributions) under the new
&lt;br&gt;- &amp;nbsp; version. Except as expressly stated in Sections 2(a) and 2(b)
&lt;br&gt;- &amp;nbsp; above, Recipient receives no rights or licenses to the intellectual
&lt;br&gt;- &amp;nbsp; property of any Contributor under this Agreement, whether
&lt;br&gt;- &amp;nbsp; expressly, by implication, estoppel or otherwise. All rights in the
&lt;br&gt;- &amp;nbsp; Program not expressly granted under this Agreement are reserved.
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; This Agreement is governed by the laws of the State of New York and
&lt;br&gt;- &amp;nbsp; the intellectual property laws of the United States of America. No
&lt;br&gt;- &amp;nbsp; party to this Agreement will bring a legal action under this
&lt;br&gt;- &amp;nbsp; Agreement more than one year after the cause of action arose. Each
&lt;br&gt;- &amp;nbsp; party waives its rights to a jury trial in any resulting
&lt;br&gt;- &amp;nbsp; litigation.
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ActivePlan.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ActivePlan.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ActivePlan.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,19 +1,22 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;package org.mmtk.harness.vm;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+import java.util.concurrent.BlockingQueue;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.Collector;
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.Mutator;
&lt;br&gt;+import org.mmtk.harness.Mutators;
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.scheduler.Scheduler;
&lt;br&gt;&amp;nbsp;import org.mmtk.plan.Plan;
&lt;br&gt;&amp;nbsp;import org.mmtk.plan.CollectorContext;
&lt;br&gt;@@ -29,7 +32,10 @@
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public final class ActivePlan extends org.mmtk.vm.ActivePlan {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** Initialise static state */
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Initialise static state
&lt;br&gt;+ &amp;nbsp; * @param prefix The name of the plan class (prefix for the associated classes)
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static void init(String prefix) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;constraints = (PlanConstraints)Class.forName(prefix + &amp;quot;Constraints&amp;quot;).newInstance();
&lt;br&gt;@@ -49,9 +55,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The global constraints */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static PlanConstraints constraints;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** Used for iterating over mutators */
&lt;br&gt;- &amp;nbsp;private static int mutatorIndex;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The active Plan instance. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public Plan global() { return plan; };
&lt;br&gt;@@ -76,9 +79,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public int collectorCount() { return Collector.count(); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;private BlockingQueue&amp;lt;Mutator&amp;gt; mutators = null;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** Reset the mutator iterator */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public void resetMutatorIterator() { mutatorIndex = 0; }
&lt;br&gt;+ &amp;nbsp;public void resetMutatorIterator() { mutators = null; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Return the next &amp;lt;code&amp;gt;MutatorContext&amp;lt;/code&amp;gt; in a
&lt;br&gt;@@ -91,8 +96,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public MutatorContext getNextMutator() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized(ActivePlan.class) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (mutatorIndex &amp;gt;= Mutator.count()) return null;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Mutator.get(mutatorIndex++).getContext();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (mutators == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mutators = Mutators.getAll();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Mutator m = mutators.poll();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return m == null ? null : m.getContext();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Assert.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;@@ -14,6 +14,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Uninterruptible;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/**
&lt;br&gt;+ * MMTk Harness implementation of Assert
&lt;br&gt;+ */
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public class Assert extends org.mmtk.vm.Assert {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -29,6 +32,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param message the string to log
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void fail(String message) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Assertion Failed: &amp;quot; + message);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -40,6 +44,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param cond the condition to be checked
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void _assert(boolean cond) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (!cond) fail(&amp;quot;&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -52,6 +57,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param cond the condition to be checked
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param message the message to print
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void _assert(boolean cond, String message) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (!cond) fail(message);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -59,6 +65,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Print a stack trace
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void dumpStack() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;new Exception().printStackTrace();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -70,11 +77,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; if the virtual machine is running
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean runningVM() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return true if assertions should be verified */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected boolean getVerifyAssertionsConstant() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;@@ -15,125 +15,347 @@
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Uninterruptible;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/**
&lt;br&gt;+ * MMTk Harness implementation of Barriers interface
&lt;br&gt;+ */
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public class Barriers extends org.mmtk.vm.Barriers {
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Sets an element of an object array without invoking any write
&lt;br&gt;- &amp;nbsp; * barrier. &amp;nbsp;This method is called by the Map class to ensure
&lt;br&gt;- &amp;nbsp; * potentially-allocation-triggering write barriers do not occur in
&lt;br&gt;- &amp;nbsp; * allocation slow path code.
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a boolean write barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param dst the destination array
&lt;br&gt;- &amp;nbsp; * @param index the index of the element to set
&lt;br&gt;- &amp;nbsp; * @param value the new value for the element
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public void setArrayNoBarrier(Object [] dst, int index, Object value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;dst[index] = value;
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void booleanWrite(ObjectReference ref, boolean value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store((byte) (value ? 1 : 0));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual write of the write barrier.
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a boolean read barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param slot The slot that holds the reference
&lt;br&gt;- &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;- &amp;nbsp; * @param metaDataA Unused
&lt;br&gt;- &amp;nbsp; * @param metaDataB Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occuring
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public void performWriteInBarrier(ObjectReference ref, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference target, Word metaDataA,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public boolean booleanRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadByte() != 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual write of the write barrier, writing the value as a raw Word.
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a byte write barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param slot The slot that holds the reference
&lt;br&gt;- &amp;nbsp; * @param rawTarget The value that the slot will be updated to
&lt;br&gt;- &amp;nbsp; * @param metaDataA Unused
&lt;br&gt;- &amp;nbsp; * @param metaDataB Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occuring
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public void performRawWriteInBarrier(ObjectReference ref, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word rawTarget, Word metaDataA,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;slot.store(rawTarget);
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void byteWrite(ObjectReference ref, byte value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a byte read barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param slot The slot that holds the reference
&lt;br&gt;- &amp;nbsp; * @param metaDataA Unused
&lt;br&gt;- &amp;nbsp; * @param metaDataB Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occuring
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public ObjectReference performReadInBarrier(ObjectReference ref, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return slot.loadObjectReference();
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public byte byteRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadByte();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual read of the read barrier, returning the value as a raw Word.
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a char write barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param slot The slot that holds the reference
&lt;br&gt;- &amp;nbsp; * @param metaDataA Unused
&lt;br&gt;- &amp;nbsp; * @param metaDataB Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occuring
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void charWrite(ObjectReference ref, char value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a char read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public Word performRawReadInBarrier(ObjectReference ref, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return slot.loadWord();
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public char charRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadChar();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a short write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void shortWrite(ObjectReference ref, short value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a short read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public short shortRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadShort();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a int write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void intWrite(ObjectReference ref, int value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a int read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public int intRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadInt();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a long write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void longWrite(ObjectReference ref, long value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a long read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public long longRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadLong();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a float write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void floatWrite(ObjectReference ref, float value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a float read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public float floatRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadFloat();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a double write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void doubleWrite(ObjectReference ref, double value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a double read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public double doubleRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadDouble();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of an object reference write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void objectReferenceWrite(ObjectReference ref, ObjectReference value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of an object reference read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public ObjectReference objectReferenceRead(ObjectReference ref,Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadObjectReference();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of the non-heap write barrier. &amp;nbsp;This is
&lt;br&gt;+ &amp;nbsp; * used when the store is not to an object, but to a non-heap location
&lt;br&gt;+ &amp;nbsp; * such as statics or the stack.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param slot The address that contains the reference field
&lt;br&gt;+ &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param unusedA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param unusedB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void objectReferenceNonHeapWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Atomically write a reference field of an object or array and return
&lt;br&gt;&amp;nbsp; &amp;nbsp; * the old value of the reference field.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param slot The slot that holds the reference
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;- &amp;nbsp; * @param metaDataA Unused
&lt;br&gt;- &amp;nbsp; * @param metaDataB Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occuring
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public ObjectReference performWriteInBarrierAtomic(ObjectReference ref, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ObjectReference target, Word metaDataA,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public ObjectReference objectReferenceAtomicWrite(ObjectReference ref, ObjectReference target, Word slot, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference old;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;old = slot.prepareObjectReference();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} while (!slot.attempt(old, target));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;old = slot.toAddress().prepareObjectReference();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} while (!slot.toAddress().attempt(old, target));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return old;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Attempt an atomic compare and exchange in a write barrier sequence.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param old The old reference to be swapped out
&lt;br&gt;+ &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceTryCompareAndSwap(ObjectReference ref, ObjectReference old, ObjectReference target, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().attempt(old, target);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of the write barrier, writing the value as a raw Word.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void wordWrite(ObjectReference ref, Word target, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(target);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Atomically write a reference field of an object or array and return
&lt;br&gt;&amp;nbsp; &amp;nbsp; * the old value of the reference field.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param slot The slot that holds the reference
&lt;br&gt;- &amp;nbsp; * @param rawTarget The raw value that the slot will be updated to
&lt;br&gt;- &amp;nbsp; * @param metaDataA Unused
&lt;br&gt;- &amp;nbsp; * @param metaDataB Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occuring
&lt;br&gt;+ &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot Unused
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The raw value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public Word performRawWriteInBarrierAtomic(ObjectReference ref, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word rawTarget, Word metaDataA,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public Word wordAtomicWrite(ObjectReference ref, Word target,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Word slot, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Word old;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;old = slot.prepareWord();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} while (!slot.attempt(old, rawTarget));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;old = slot.toAddress().prepareWord();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} while (!slot.toAddress().attempt(old, target));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return old;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -144,32 +366,43 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param slot The slot that holds the reference
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param old The old reference to be swapped out
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;- &amp;nbsp; * @param metaDataA Unused
&lt;br&gt;- &amp;nbsp; * @param metaDataB Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occuring
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public boolean tryCompareAndSwapWriteInBarrier(ObjectReference ref, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ObjectReference old, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return slot.attempt(old, target);
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public boolean wordTryCompareAndSwap(ObjectReference ref, Word old, Word target,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().attempt(old, target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Attempt an atomic compare and exchange in a write barrier sequence.
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of the read barrier, returning the value as a raw Word.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param slot The slot that holds the reference
&lt;br&gt;- &amp;nbsp; * @param rawOld The old reference to be swapped out
&lt;br&gt;- &amp;nbsp; * @param rawTarget The value that the slot will be updated to
&lt;br&gt;- &amp;nbsp; * @param metaDataA Unused
&lt;br&gt;- &amp;nbsp; * @param metaDataB Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occuring
&lt;br&gt;- &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public boolean tryRawCompareAndSwapWriteInBarrier(ObjectReference ref, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word rawOld, Word rawTarget,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return slot.attempt(rawOld, rawTarget);
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public Word wordRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadWord();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Sets an element of an object array without invoking any write
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;This method is called by the Map class to ensure
&lt;br&gt;+ &amp;nbsp; * potentially-allocation-triggering write barriers do not occur in
&lt;br&gt;+ &amp;nbsp; * allocation slow path code.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param dst the destination array
&lt;br&gt;+ &amp;nbsp; * @param index the index of the element to set
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the element
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void objectArrayStoreNoGCBarrier(Object [] dst, int index, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;dst[index] = value;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/BuildTimeConfig.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/BuildTimeConfig.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/BuildTimeConfig.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Collection.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Collection.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Collection.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;@@ -15,6 +15,8 @@
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.Collector;
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.Harness;
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.Mutator;
&lt;br&gt;+import org.mmtk.harness.Mutators;
&lt;br&gt;+import org.mmtk.harness.exception.OutOfMemory;
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.scheduler.Scheduler;
&lt;br&gt;&amp;nbsp;import org.mmtk.plan.CollectorContext;
&lt;br&gt;&amp;nbsp;import org.mmtk.plan.MutatorContext;
&lt;br&gt;@@ -37,6 +39,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param why the reason why a collection was triggered. &amp;nbsp;0 to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;code&amp;gt;TRIGGER_REASONS - 1&amp;lt;/code&amp;gt;.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void triggerCollection(int why) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (Options.verbose.getValue() &amp;gt;= 4) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new Exception(&amp;quot;Collection trigger: &amp;quot; + triggerReasons[why]).printStackTrace();
&lt;br&gt;@@ -57,19 +60,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mutator.reportCollectionAttempt();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (mutator.isOutOfMemory()) throw new Mutator.OutOfMemory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (mutator.isOutOfMemory()) throw new OutOfMemory();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Collector.triggerGC(why);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Scheduler.waitForGC();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (mutator.isOutOfMemory() &amp;&amp; !mutator.isPhysicalAllocationFailure()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new Mutator.OutOfMemory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new OutOfMemory();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Joins an already requested collection.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void joinCollection() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;while (Plan.isCollectionTriggered()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* allow a gc thread to run */
&lt;br&gt;@@ -77,7 +81,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Mutator mutator = Mutator.current();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (mutator.isOutOfMemory() &amp;&amp; !mutator.isPhysicalAllocationFailure()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new Mutator.OutOfMemory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new OutOfMemory();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -88,6 +92,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param why the reason why a collection was triggered. &amp;nbsp;0 to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;code&amp;gt;TRIGGER_REASONS - 1&amp;lt;/code&amp;gt;.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void triggerAsyncCollection(int why) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Plan.setCollectionTriggered();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (Options.verbose.getValue() &amp;gt;= 1) {
&lt;br&gt;@@ -102,13 +107,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * The maximum number collection attempts across threads.
&lt;br&gt;+ &amp;nbsp; * @return The maximum number of collection attempts across threads.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public int maximumCollectionAttempt() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int max = 1;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;for(int m=0; m &amp;lt; Mutator.count(); m++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Mutator mutator = Mutator.get(m);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int current = mutator.getCollectionAttempts();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;for(Mutator m : Mutators.getAll()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int current = m.getCollectionAttempts();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (current &amp;gt; max) max = current;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return max + Collector.getCollectionAttemptBase();
&lt;br&gt;@@ -117,6 +122,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Report that the allocation has succeeded.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void reportAllocationSuccess() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Mutator mutator = Mutator.current();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;mutator.setOutOfMemory(false);
&lt;br&gt;@@ -127,6 +133,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Report that a physical allocation has failed.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void reportPhysicalAllocationFailed() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Mutator.current().setPhysicalAllocationFailure(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -135,6 +142,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Does the VM consider this an emergency alloction, where the normal
&lt;br&gt;&amp;nbsp; &amp;nbsp; * heap size rules can be ignored.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean isEmergencyAllocation() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Not required
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;@@ -148,6 +156,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if GC is not in progress.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean noThreadsInGC() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return Scheduler.noThreadsInGC();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -157,6 +166,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param m the mutator to prepare
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void prepareMutator(MutatorContext m) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Nothing to do
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -166,6 +176,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param c the collector to prepare
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void prepareCollector(CollectorContext c) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Nothing to do
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -174,11 +185,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Rendezvous with all other processors, returning the rank
&lt;br&gt;&amp;nbsp; &amp;nbsp; * (that is, the order this processor arrived at the barrier).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public int rendezvous(int where) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return Collector.rendezvous(where);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The number of active collector threads */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public int activeGCThreads() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return Harness.collectors.getValue();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -187,6 +200,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The ordinal ID of the running collector thread w.r.t.
&lt;br&gt;&amp;nbsp; &amp;nbsp; * the set of active collector threads (zero based)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public int activeGCThreadOrdinal() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return Collector.current().getContext().getId();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -203,6 +217,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * will trigger the flush and then yield until all processors have
&lt;br&gt;&amp;nbsp; &amp;nbsp; * flushed.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void requestMutatorFlush() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assert.notImplemented();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Added: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(rev 0)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Debug.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -0,0 +1,90 @@
&lt;br&gt;+/*
&lt;br&gt;+ * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;+ * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;+ * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;+ *
&lt;br&gt;+ * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;+ * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;+ */
&lt;br&gt;+package org.mmtk.harness.vm;
&lt;br&gt;+
&lt;br&gt;+import org.mmtk.harness.lang.Trace;
&lt;br&gt;+import org.mmtk.harness.lang.Trace.Item;
&lt;br&gt;+import org.mmtk.harness.sanity.FromSpaceInvariant;
&lt;br&gt;+import org.mmtk.plan.Simple;
&lt;br&gt;+import org.mmtk.plan.TraceLocal;
&lt;br&gt;+import org.vmmagic.unboxed.Address;
&lt;br&gt;+import org.vmmagic.unboxed.ObjectReference;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * Debugger support for the MMTk harness
&lt;br&gt;+ */
&lt;br&gt;+public final class Debug extends org.mmtk.vm.Debug {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Enable MMTk debugger support
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public boolean isEnabled() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;private String format(ObjectReference obj) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (obj.isNull()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return obj.toString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ObjectModel.getString(obj);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;private String format(Address addr) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ObjectModel.addressAndSpaceString(addr);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * @see org.mmtk.vm.Debug#arrayRemsetEntry(org.vmmagic.unboxed.Address, org.vmmagic.unboxed.Address)
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void arrayRemsetEntry(Address start, Address guard) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Trace.trace(Item.REMSET, &amp;quot;arrayRemset: [%s,%s)&amp;quot;, start, guard);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * @see org.mmtk.vm.Debug#modbufEntry(org.vmmagic.unboxed.ObjectReference)
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void modbufEntry(ObjectReference object) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Trace.trace(Item.REMSET, &amp;quot;modbuf: %s&amp;quot;, format(object));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * @see org.mmtk.vm.Debug#remsetEntry(org.vmmagic.unboxed.Address)
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void remsetEntry(Address slot) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Trace.trace(Item.REMSET, &amp;quot;remset: %s-&amp;gt;%s&amp;quot;, format(slot), format(slot.loadObjectReference()));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * @see org.mmtk.vm.Debug#globalPhase(short, boolean)
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void globalPhase(short phaseId, boolean before) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (phaseId == Simple.RELEASE &amp;&amp; before) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;new FromSpaceInvariant();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * @see org.mmtk.vm.Debug#traceObject(org.mmtk.plan.TraceLocal, org.vmmagic.unboxed.ObjectReference)
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void traceObject(TraceLocal trace, ObjectReference object) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Trace.trace(Item.TRACEOBJECT, &amp;quot;traceObject: %s&amp;quot;, format(object));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Factory.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Factory.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Factory.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;@@ -135,12 +135,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Create a new ReferenceProcessor instance using the appropriate VM-specific
&lt;br&gt;&amp;nbsp; &amp;nbsp; * concrete ReferenceProcessor sub-class.
&lt;br&gt;+ &amp;nbsp; * @param semantics The reference semantics for this processor
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @see ReferenceProcessor
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return A concrete VM-specific ReferenceProcessor instance.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public ReferenceProcessor newReferenceProcessor(ReferenceProcessor.Semantics semantics) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return new ReferenceProcessor();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ReferenceProcessor.getProcessorFor(semantics);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -396,4 +397,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public org.mmtk.vm.MMTk_Events newEvents() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return new MMTkEvents();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public Debug newDebug() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return new Debug();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/FinalizableProcessor.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/FinalizableProcessor.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/FinalizableProcessor.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/MMTkEvents.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/MMTkEvents.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/MMTkEvents.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Memory.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Memory.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/Memory.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;@@ -17,6 +17,8 @@
&lt;br&gt;&amp;nbsp;import org.mmtk.utility.heap.VMRequest;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.*;
&lt;br&gt;+import org.vmmagic.unboxed.harness.MemoryConstants;
&lt;br&gt;+import org.vmmagic.unboxed.harness.SimulatedMemory;
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;@@ -207,17 +209,17 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The highest address in the contiguous address space available to MMTk */
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected Address getAvailableEndConstant() &amp;nbsp;{ return HEAP_END; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The log base two of the size of an address */
&lt;br&gt;- &amp;nbsp;protected byte getLogBytesInAddressConstant() { return (byte) SimulatedMemory.LOG_BYTES_IN_WORD; }
&lt;br&gt;+ &amp;nbsp;protected byte getLogBytesInAddressConstant() { return (byte) MemoryConstants.LOG_BYTES_IN_WORD; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The log base two of the size of a word */
&lt;br&gt;- &amp;nbsp;protected byte getLogBytesInWordConstant() { return (byte) SimulatedMemory.LOG_BYTES_IN_WORD; }
&lt;br&gt;+ &amp;nbsp;protected byte getLogBytesInWordConstant() { return (byte) MemoryConstants.LOG_BYTES_IN_WORD; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The log base two of the size of an OS page */
&lt;br&gt;- &amp;nbsp;protected byte getLogBytesInPageConstant() { return SimulatedMemory.LOG_BYTES_IN_PAGE; }
&lt;br&gt;+ &amp;nbsp;protected byte getLogBytesInPageConstant() { return MemoryConstants.LOG_BYTES_IN_PAGE; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The log base two of the minimum allocation alignment */
&lt;br&gt;- &amp;nbsp;protected byte getLogMinAlignmentConstant() &amp;nbsp;{ return (byte) SimulatedMemory.LOG_BYTES_IN_WORD; }
&lt;br&gt;+ &amp;nbsp;protected byte getLogMinAlignmentConstant() &amp;nbsp;{ return (byte) MemoryConstants.LOG_BYTES_IN_WORD; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The log base two of (MAX_ALIGNMENT/MIN_ALIGNMENT) */
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected byte getMaxAlignmentShiftConstant() { return 1; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The maximum number of bytes of padding to prepend to an object */
&lt;br&gt;- &amp;nbsp;protected int getMaxBytesPaddingConstant() { return SimulatedMemory.BYTES_IN_WORD; }
&lt;br&gt;+ &amp;nbsp;protected int getMaxBytesPaddingConstant() { return MemoryConstants.BYTES_IN_WORD; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The value to store in alignment holes */
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected int getAlignmentValueConstant() { return ObjectModel.ALIGNMENT_VALUE; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;+++ rvmroot/branches/RVM-777-NewMMTkGlue/work/MMTk/ext/vm/harness/org/mmtk/harness/vm/ObjectModel.java	2009-11-05 04:56:08 UTC (rev 15789)
&lt;br&gt;@@ -1,11 +1,11 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * &amp;nbsp;This file is part of the Jikes RVM project (&lt;a href=&quot;http://jikesrvm.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.org&lt;/a&gt;).
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp;This file is licensed to You under the Common Public License (CPL);
&lt;br&gt;+ * &amp;nbsp;This file is licensed to You under the Eclipse Public License (EPL);
&lt;br&gt;&amp;nbsp; * &amp;nbsp;You may not use this file except in compliance with the License. You
&lt;br&gt;&amp;nbsp; * &amp;nbsp;may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/cpl1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/cpl1.0.php&lt;/a&gt;&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.opensource.org/licenses/eclipse-1.0.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.opensource.org/licenses/eclipse-1.0.php&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * &amp;nbsp;See the COPYRIGHT.txt file distributed with this work for information
&lt;br&gt;&amp;nbsp; * &amp;nbsp;regarding copyright ownership.
&lt;br&gt;@@ -13,7 +13,11 @@
&lt;br&gt;&amp;nbsp;package org.mmtk.harness.vm;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import java.io.PrintStream;
&lt;br&gt;-import java.util.Stack;
&lt;br&gt;+import java.util.ArrayList;
&lt;br&gt;+import java.util.HashSet;
&lt;br&gt;+import java.util.List;
&lt;br&gt;+import java.util.Set;
&lt;br&gt;+import java.util.Collection;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.Collector;
&lt;br&gt;&amp;nbsp;import org.mmtk.harness.Mutator;
&lt;br&gt;@@ -22,47 +26,49 @@
&lt;br&gt;&amp;nbsp;import org.mmtk.plan.CollectorContext;
&lt;br&gt;&amp;nbsp;import org.mmtk.plan.MutatorContext;
&lt;br&gt;&amp;nbsp;import org.mmtk.plan.Plan;
&lt;br&gt;+import org.mmtk.policy.Space;
&lt;br&gt;&amp;nbsp;import org.vmmagic.pragma.Uninterruptible;
&lt;br&gt;&amp;nbsp;import org.vmmagic.unboxed.*;
&lt;br&gt;+import org.vmmagic.unboxed.harness.ArchitecturalWord;
&lt;br&gt;+import org.vmmagic.unboxed.harness.MemoryConstants;
&lt;br&gt;+import org.vmmagic.unboxed.harness.SimulatedMemory;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/**
&lt;br&gt;+ * MMTk Harness implementation of MMTk object model
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;Object id (age in allocations); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Word)
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;Allocation site &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Word)
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;The size of the data section in words. (UInt16)
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;The number of reference words. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (UInt16)
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;Status Word (includes GC)
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;References
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;Data
&lt;br&gt;+ */
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public final class ObjectModel extends org.mmtk.vm.ObjectModel {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; * The object model for the harness stores:
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp;Object id (age in allocations); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Word)
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp;Allocation site &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Word)
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp;The size of the data section in words. (UInt16)
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp;The number of reference words. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (UInt16)
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp;Status Word (includes GC)
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp;References
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp;Data
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static final boolean IS_32_BIT = ArchitecturalWord.getModel().bitsInWord() == 32;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The total header size (including any requested GC words) */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final int HEADER_WORDS = (IS_32_BIT ? 5 : 3) + ActivePlan.constraints.gcHeaderWords();
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The number of bytes in the header */
&lt;br&gt;- &amp;nbsp;private static final int HEADER_SIZE = HEADER_WORDS &amp;lt;&amp;lt; SimulatedMemory.LOG_BYTES_IN_WORD;
&lt;br&gt;+ &amp;nbsp;private static final int HEADER_SIZE = HEADER_WORDS &amp;lt;&amp;lt; MemoryConstants.LOG_BYTES_IN_WORD;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The number of bytes requested for GC in the header */
&lt;br&gt;- &amp;nbsp;private static final int GC_HEADER_BYTES = ActivePlan.constraints.gcHeaderWords() &amp;lt;&amp;lt; SimulatedMemory.LOG_BYTES_IN_WORD;
&lt;br&gt;+ &amp;nbsp;private static final int GC_HEADER_BYTES = ActivePlan.constraints.gcHeaderWords() &amp;lt;&amp;lt; MemoryConstants.LOG_BYTES_IN_WORD;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The offset of the first GC header word */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static final Offset GC_OFFSET &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= Offset.zero();
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The offset of the object ID */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static final Offset ID_OFFSET &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= GC_OFFSET.plus(GC_HEADER_BYTES);
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The offset of the allocation site */
&lt;br&gt;- &amp;nbsp;private static final Offset SITE_OFFSET &amp;nbsp; &amp;nbsp; &amp;nbsp;= ID_OFFSET.plus(SimulatedMemory.BYTES_IN_INT);
&lt;br&gt;+ &amp;nbsp;private static final Offset SITE_OFFSET &amp;nbsp; &amp;nbsp; &amp;nbsp;= ID_OFFSET.plus(MemoryConstants.BYTES_IN_INT);
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The offset of the UInt16 storing the number of data fields */
&lt;br&gt;- &amp;nbsp;private static final Offset DATACOUNT_OFFSET = SITE_OFFSET.plus(SimulatedMemory.BYTES_IN_INT);
&lt;br&gt;+ &amp;nbsp;private static final Offset DATACOUNT_OFFSET = SITE_OFFSET.plus(MemoryConstants.BYTES_IN_INT);
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The offset of the UInt16 storing the number of reference fields */
&lt;br&gt;- &amp;nbsp;private static final Offset REFCOUNT_OFFSET &amp;nbsp;= DATACOUNT_OFFSET.plus(SimulatedMemory.BYTES_IN_INT);
&lt;br&gt;+ &amp;nbsp;private static final Offset REFCOUNT_OFFSET &amp;nbsp;= DATACOUNT_OFFSET.plus(MemoryConstants.BYTES_IN_INT);
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The offset of the status word */
&lt;br&gt;- &amp;nbsp;private static final Offset STATUS_OFFSET &amp;nbsp; &amp;nbsp;= REFCOUNT_OFFSET.plus(SimulatedMemory.BYTES_IN_INT);
&lt;br&gt;+ &amp;nbsp;private static final Offset STATUS_OFFSET &amp;nbsp; &amp;nbsp;= REFCOUNT_OFFSET.plus(MemoryConstants.BYTES_IN_INT);
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** The offset of the first reference field. */
&lt;br&gt;- &amp;nbsp;public &amp;nbsp;static final Offset REFS_OFFSET &amp;nbsp; &amp;nbsp; &amp;nbsp;= STATUS_OFFSET.plus(SimulatedMemory.BYTES_IN_WORD);
&lt;br&gt;+ &amp;nbsp;public &amp;nbsp;static final Offset REFS_OFFSET &amp;nbsp; &amp;nbsp; &amp;nbsp;= STATUS_OFFSET.plus(MemoryConstants.BYTES_IN_WORD);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;@SuppressWarnings(&amp;quot;unused&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static void printObjectLayout(PrintStream wr) {
&lt;br&gt;@@ -75,24 +81,25 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;wr.flush();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;static {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;//printObjectLayout(System.out);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;assert REFS_OFFSET.EQ(Offset.fromIntSignExtend(HEADER_SIZE));
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp;/** Max data fields in an object */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final int MAX_DATA_FIELDS = Integer.MAX_VALUE;
&lt;br&gt;+ &amp;nbsp;/** Max pointer fields in an object */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final int MAX_REF_FIELDS = Integer.MAX_VALUE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** Has this object been hashed? */
&lt;br&gt;- &amp;nbsp;private static final int HASHED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 0x1 &amp;lt;&amp;lt; (3 * SimulatedMemory.BITS_IN_BYTE);
&lt;br&gt;+ &amp;nbsp;private static final int HASHED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 0x1 &amp;lt;&amp;lt; (3 * MemoryConstants.BITS_IN_BYTE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** Has this object been moved since it was hashed? */
&lt;br&gt;&lt;br&gt;@@ Diff output truncated at 100000 characters. @@
&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
&lt;br&gt;trial. Simplify your report design, integration and deployment - and focus on 
&lt;br&gt;what you do best, core application coding. Discover what's new with
&lt;br&gt;Crystal Reports now. &amp;nbsp;&lt;a href=&quot;http://p.sf.net/sfu/bobj-july&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/bobj-july&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26209295&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15789--rvmroot-branches-RVM-777-NewMMTkGlue-work-tp26209295p26209295.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25617079</id>
	<title>SF.net SVN: jikesrvm:[15788] rvmroot/trunk/rvm/src-generated/opt-burs/ppc/ PPC_Common.rules</title>
	<published>2009-09-25T11:37:27Z</published>
	<updated>2009-09-25T11:37:27Z</updated>
	<author>
		<name>dgrove-oss</name>
	</author>
	<content type="html">Revision: 15788
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15788&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15788&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; dgrove-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-25 18:37:26 +0000 (Fri, 25 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;RVM-860 : Improper instruction format usage in PPC BURS rules
&lt;br&gt;&lt;br&gt;In the rules that take combinations of NEG(ADD(MULL(r, r), r)) and
&lt;br&gt;produce a FNMADD instruction, the result of the NEG instruction
&lt;br&gt;was being improperly accessed as if NEG was a Binary instead of 
&lt;br&gt;a Unary. &amp;nbsp;Wouldn't have actually mattered in terms of what
&lt;br&gt;code was being generated, since the Result operand is at the same
&lt;br&gt;offset in both Unary and Binary instruction forms, but the code 
&lt;br&gt;was incorrect.
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src-generated/opt-burs/ppc/PPC_Common.rules
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src-generated/opt-burs/ppc/PPC_Common.rules
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src-generated/opt-burs/ppc/PPC_Common.rules	2009-09-19 03:23:17 UTC (rev 15787)
&lt;br&gt;+++ rvmroot/trunk/rvm/src-generated/opt-burs/ppc/PPC_Common.rules	2009-09-25 18:37:26 UTC (rev 15788)
&lt;br&gt;@@ -859,42 +859,42 @@
&lt;br&gt;&amp;nbsp;r: 	FLOAT_NEG(FLOAT_ADD(FLOAT_MUL(r, r), r))
&lt;br&gt;&amp;nbsp;burs.ir.strictFP(P(p),PL(p),PLL(p))?INFINITE:10
&lt;br&gt;&amp;nbsp;EMIT_INSTRUCTION
&lt;br&gt;-EMIT(MIR_Ternary.mutate(P(p), PPC_FNMADDS, Binary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;\
&lt;br&gt;+EMIT(MIR_Ternary.mutate(P(p), PPC_FNMADDS, Unary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R(Binary.getVal1(PLL(p))), R(Binary.getVal2(PLL(p))), \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R(Binary.getVal2(PL(p)))));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;r: 	DOUBLE_NEG(DOUBLE_ADD(DOUBLE_MUL(r, r), r))
&lt;br&gt;&amp;nbsp;burs.ir.strictFP(P(p),PL(p),PLL(p))?INFINITE:10
&lt;br&gt;&amp;nbsp;EMIT_INSTRUCTION
&lt;br&gt;-EMIT(MIR_Ternary.mutate(P(p), PPC_FNMADD, Binary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \
&lt;br&gt;+EMIT(MIR_Ternary.mutate(P(p), PPC_FNMADD, Unary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;\
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R(Binary.getVal1(PLL(p))), R(Binary.getVal2(PLL(p))), \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R(Binary.getVal2(PL(p)))));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;r:	FLOAT_NEG(FLOAT_ADD(r, FLOAT_MUL(r,r)))
&lt;br&gt;&amp;nbsp;burs.ir.strictFP(P(p),PL(p),PLR(p))?INFINITE:10
&lt;br&gt;&amp;nbsp;EMIT_INSTRUCTION
&lt;br&gt;-EMIT(MIR_Ternary.mutate(P(p), PPC_FNMADDS, Binary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;\
&lt;br&gt;+EMIT(MIR_Ternary.mutate(P(p), PPC_FNMADDS, Unary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \
&lt;br&gt;&amp;nbsp;			R(Binary.getVal1(PLR(p))), R(Binary.getVal2(PLR(p))), \
&lt;br&gt;&amp;nbsp;			R(Binary.getVal1(PL(p)))));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;r:	DOUBLE_NEG(DOUBLE_ADD(r, DOUBLE_MUL(r,r)))
&lt;br&gt;&amp;nbsp;burs.ir.strictFP(P(p),PL(p),PLR(p))?INFINITE:10
&lt;br&gt;&amp;nbsp;EMIT_INSTRUCTION
&lt;br&gt;-EMIT(MIR_Ternary.mutate(P(p), PPC_FNMADD, Binary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;\
&lt;br&gt;+EMIT(MIR_Ternary.mutate(P(p), PPC_FNMADD, Unary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \
&lt;br&gt;&amp;nbsp;			R(Binary.getVal1(PLR(p))), R(Binary.getVal2(PLR(p))),\
&lt;br&gt;&amp;nbsp;			R(Binary.getVal1(PL(p)))));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;r: 	FLOAT_NEG(FLOAT_SUB(FLOAT_MUL(r, r), r))
&lt;br&gt;&amp;nbsp;burs.ir.strictFP(P(p),PL(p),PLL(p))?INFINITE:10
&lt;br&gt;&amp;nbsp;EMIT_INSTRUCTION
&lt;br&gt;-EMIT(MIR_Ternary.mutate(P(p), PPC_FNMSUBS, Binary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;\
&lt;br&gt;+EMIT(MIR_Ternary.mutate(P(p), PPC_FNMSUBS, Unary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R(Binary.getVal1(PLL(p))), R(Binary.getVal2(PLL(p))), \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R(Binary.getVal2(PL(p)))));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;r: 	DOUBLE_NEG(DOUBLE_SUB(DOUBLE_MUL(r, r), r))
&lt;br&gt;&amp;nbsp;burs.ir.strictFP(P(p),PL(p),PLL(p))?INFINITE:10
&lt;br&gt;&amp;nbsp;EMIT_INSTRUCTION
&lt;br&gt;-EMIT(MIR_Ternary.mutate(P(p), PPC_FNMSUB, Binary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \
&lt;br&gt;+EMIT(MIR_Ternary.mutate(P(p), PPC_FNMSUB, Unary.getResult(P(p)), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;\
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R(Binary.getVal1(PLL(p))), R(Binary.getVal2(PLL(p))), \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R(Binary.getVal2(PL(p)))));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry&amp;reg; Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9&amp;#45;12, 2009. Register now&amp;#33;
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconf&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25617079&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15788--rvmroot-trunk-rvm-src-generated-opt-burs-ppc--PPC_Common.rules-tp25617079p25617079.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25518252</id>
	<title>SF.net SVN: jikesrvm:[15787] rvmroot/trunk</title>
	<published>2009-09-18T20:23:21Z</published>
	<updated>2009-09-18T20:23:21Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15787
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15787&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15787&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-19 03:23:17 +0000 (Sat, 19 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Pad out barrier plumbing to include primitive types. &amp;nbsp;This should conclude RVM-589.
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;+++ rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java	2009-09-19 03:23:17 UTC (rev 15787)
&lt;br&gt;@@ -21,21 +21,21 @@
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public class Barriers extends org.mmtk.vm.Barriers {
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual write of the write barrier.
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a boolean write barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param unused Unused
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public void objectReferenceWrite(ObjectReference ref, ObjectReference target, Word slot, Word unused, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;slot.toAddress().store(target);
&lt;br&gt;+ &amp;nbsp;public void booleanWrite(ObjectReference ref, boolean value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store((byte) (value ? 1 : 0));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a boolean read barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;@@ -44,6 +44,230 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public boolean booleanRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadByte() != 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a byte write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void byteWrite(ObjectReference ref, byte value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a byte read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public byte byteRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadByte();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a char write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void charWrite(ObjectReference ref, char value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a char read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public char charRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadChar();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a short write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void shortWrite(ObjectReference ref, short value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a short read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public short shortRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadShort();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a int write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void intWrite(ObjectReference ref, int value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a int read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public int intRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadInt();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a long write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void longWrite(ObjectReference ref, long value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a long read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public long longRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadLong();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a float write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void floatWrite(ObjectReference ref, float value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a float read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public float floatRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadFloat();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a double write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void doubleWrite(ObjectReference ref, double value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a double read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public double doubleRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadDouble();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of an object reference write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be written to
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public void objectReferenceWrite(ObjectReference ref, ObjectReference value, Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.toAddress().store(value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of an object reference read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public ObjectReference objectReferenceRead(ObjectReference ref,Word slot, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return slot.toAddress().loadObjectReference();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;+++ rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java	2009-09-19 03:23:17 UTC (rev 15787)
&lt;br&gt;@@ -22,29 +22,271 @@
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public class Barriers extends org.mmtk.vm.Barriers implements SizeConstants {
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual write of the write barrier.
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a boolean write barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void booleanWrite(ObjectReference objref, boolean value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setByteAtOffset(objref.toObject(), offset.toOffset(), (byte) (value ? 1 : 0));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a boolean read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final boolean booleanRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Magic.getByteAtOffset(objref.toObject(), offset.toOffset()) == 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a byte write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void byteWrite(ObjectReference objref, byte value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setByteAtOffset(objref.toObject(), offset.toOffset(), value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a byte read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final byte byteRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Magic.getByteAtOffset(objref.toObject(), offset.toOffset());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a char write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void charWrite(ObjectReference objref, char value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setCharAtOffset(objref.toObject(), offset.toOffset(), value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a char read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final char charRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Magic.getCharAtOffset(objref.toObject(), offset.toOffset());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a short write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void shortWrite(ObjectReference objref, short value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setShortAtOffset(objref.toObject(), offset.toOffset(), value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a short read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final short shortRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Magic.getShortAtOffset(objref.toObject(), offset.toOffset());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a int write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void intWrite(ObjectReference objref, int value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setIntAtOffset(objref.toObject(), offset.toOffset(), value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a int read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final int intRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Magic.getIntAtOffset(objref.toObject(), offset.toOffset());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a long write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void longWrite(ObjectReference objref, long value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setLongAtOffset(objref.toObject(), offset.toOffset(), value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a long read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final long longRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Magic.getLongAtOffset(objref.toObject(), offset.toOffset());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a float write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void floatWrite(ObjectReference objref, float value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setFloatAtOffset(objref.toObject(), offset.toOffset(), value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a float read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final float floatRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Magic.getFloatAtOffset(objref.toObject(), offset.toOffset());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a double write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void doubleWrite(ObjectReference objref, double value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setDoubleAtOffset(objref.toObject(), offset.toOffset(), value);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a double read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final double doubleRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Magic.getDoubleAtOffset(objref.toObject(), offset.toOffset());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of an object reference write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param location The index of the FieldReference
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void objectReferenceWrite(ObjectReference objref, ObjectReference target, Word offset, Word location, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(objref.toObject(), offset.toOffset(), target.toObject(), location.toInt());
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceWrite(ObjectReference objref, ObjectReference value, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(objref.toObject(), offset.toOffset(), value.toObject(), location.toInt());
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of an object reference read barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param location The index of the FieldReference
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;- &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; * @return the object reference read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final ObjectReference objectReferenceRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return ObjectReference.fromObject(Magic.getObjectAtOffset(objref.toObject(), offset.toOffset(), location.toInt()));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -59,6 +301,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final void objectReferenceNonHeapWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -75,6 +318,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final ObjectReference objectReferenceAtomicWrite(ObjectReference objref, ObjectReference target, Word offset, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object obj = objref.toObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object newObject = target.toObject();
&lt;br&gt;@@ -97,6 +341,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final boolean objectReferenceTryCompareAndSwap(ObjectReference objref, ObjectReference old, ObjectReference target, Word offset, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object oldValue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;@@ -116,6 +361,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final void wordWrite(ObjectReference ref, Word target,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word offset, Word location, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.setWordAtOffset(ref.toObject(), offset.toOffset(), target, location.toInt());
&lt;br&gt;@@ -133,6 +379,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final Word wordAtomicWrite(ObjectReference ref, Word target,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word offset, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Word oldValue;
&lt;br&gt;@@ -154,6 +401,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final boolean wordTryCompareAndSwap(ObjectReference ref, Word old, Word target,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word offset, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;@@ -173,6 +421,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final Word wordRead(ObjectReference ref,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word offset, Word location, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return Magic.getWordAtOffset(ref.toObject(), offset.toOffset(), location.toInt());
&lt;br&gt;@@ -189,6 +438,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param value the new value for the element
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@UninterruptibleNoWarn
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final void objectArrayStoreNoGCBarrier(Object[] dst, int index, Object value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (org.jikesrvm.VM.runningVM) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Address base = ObjectReference.fromObject(dst).toAddress();
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java	2009-09-19 03:23:17 UTC (rev 15787)
&lt;br&gt;@@ -282,6 +282,518 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a boolean. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new boolean
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void booleanWrite(ObjectReference src, Address slot, boolean value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a boolean. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The boolean that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public boolean booleanRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of booleans are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;+ &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean booleanBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a byte. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new byte
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void byteWrite(ObjectReference src, Address slot, byte value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a byte. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The byte that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public byte byteRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of bytes are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;+ &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean byteBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a char. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new char
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void charWrite(ObjectReference src, Address slot, char value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a char. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The char that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public char charRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of chars are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;+ &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean charBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a short. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new short
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void shortWrite(ObjectReference src, Address slot, short value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a short. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The short that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public short shortRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of shorts are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;+ &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean shortBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a int. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new int
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void intWrite(ObjectReference src, Address slot, int value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a int. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The int that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public int intRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of ints are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;+ &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean intBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a long. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new int
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void longWrite(ObjectReference src, Address slot, long value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a long. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The long that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public long longRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of longs are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;+ &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean longBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a float. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new float
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void floatWrite(ObjectReference src, Address slot, float value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a float. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The float that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public float floatRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of floats are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;+ &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean floatBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Write a double. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new double
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public void doubleWrite(ObjectReference src, Address slot, double value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Read a double. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The double that was read.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public double doubleRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * A number of doubles are about to be copied from object
&lt;br&gt;+ &amp;nbsp; * &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; to object &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; (as in an array
&lt;br&gt;+ &amp;nbsp; * copy). &amp;nbsp;Thus, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; is the mutated object. &amp;nbsp;Take
&lt;br&gt;+ &amp;nbsp; * appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The source of the values to be copied
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param dst The mutated object, i.e. the destination of the copy.
&lt;br&gt;+ &amp;nbsp; * @param dstOffset The offset of the first destination address, in
&lt;br&gt;+ &amp;nbsp; * bytes relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public boolean doubleBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Write an object reference. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;@@ -289,12 +801,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;&amp;nbsp; &amp;nbsp; * stored.
&lt;br&gt;- &amp;nbsp; * @param tgt The target of the new reference
&lt;br&gt;+ &amp;nbsp; * @param value The value of the new reference
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public void objectReferenceWrite(ObjectReference src, Address slot, ObjectReference tgt, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp;public void objectReferenceWrite(ObjectReference src, Address slot, ObjectReference value, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java	2009-09-19 03:23:17 UTC (rev 15787)
&lt;br&gt;@@ -25,6 +25,54 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on java.lang.reference types. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsJavaLangReferenceReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on booleans. */
&lt;br&gt;+ &amp;nbsp;public boolean needsBooleanWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on booleans. */
&lt;br&gt;+ &amp;nbsp;public boolean needsBooleanReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on bytes. */
&lt;br&gt;+ &amp;nbsp;public boolean needsByteWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on bytes. */
&lt;br&gt;+ &amp;nbsp;public boolean needsByteReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on chars. */
&lt;br&gt;+ &amp;nbsp;public boolean needsCharWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on chars. */
&lt;br&gt;+ &amp;nbsp;public boolean needsCharReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on shorts. */
&lt;br&gt;+ &amp;nbsp;public boolean needsShortWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on shorts. */
&lt;br&gt;+ &amp;nbsp;public boolean needsShortReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on ints. */
&lt;br&gt;+ &amp;nbsp;public boolean needsIntWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on ints. */
&lt;br&gt;+ &amp;nbsp;public boolean needsIntReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on longs. */
&lt;br&gt;+ &amp;nbsp;public boolean needsLongWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on longs. */
&lt;br&gt;+ &amp;nbsp;public boolean needsLongReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on floats. */
&lt;br&gt;+ &amp;nbsp;public boolean needsFloatWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on floats. */
&lt;br&gt;+ &amp;nbsp;public boolean needsFloatReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on doubles. */
&lt;br&gt;+ &amp;nbsp;public boolean needsDoubleWriteBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on doubles. */
&lt;br&gt;+ &amp;nbsp;public boolean needsDoubleReadBarrier() { return false; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires write barriers on object references. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java	2009-09-19 03:23:17 UTC (rev 15787)
&lt;br&gt;@@ -18,18 +18,194 @@
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public abstract class Barriers {
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a boolean write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract void booleanWrite(ObjectReference ref, boolean value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a boolean read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract boolean booleanRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a byte write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract void byteWrite(ObjectReference ref, byte value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a byte read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract byte byteRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a char write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract void charWrite(ObjectReference ref, char value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a char read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract char charRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a short write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract void shortWrite(ObjectReference ref, short value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a short read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract short shortRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a int write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract void intWrite(ObjectReference ref, int value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a int read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract int intRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a long write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract void longWrite(ObjectReference ref, long value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a long read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract long longRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a float write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract void floatWrite(ObjectReference ref, float value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a float read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract float floatRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of a double write barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract void doubleWrite(ObjectReference ref, double value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a double read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract double doubleRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Perform the actual write of an object reference write barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param value The value that the slot will be updated to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract void objectReferenceWrite(ObjectReference ref, ObjectReference target, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+ &amp;nbsp;public abstract void objectReferenceWrite(ObjectReference ref, ObjectReference value, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of a read barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java	2009-09-19 03:23:17 UTC (rev 15787)
&lt;br&gt;@@ -43,6 +43,919 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/* bool byte char short int long float double */
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on boolean putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_BOOLEAN_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsBooleanWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on boolean putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BOOLEAN_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_BOOLEAN_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on boolean arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BOOLEAN_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_BOOLEAN_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on boolean getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_BOOLEAN_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsBooleanReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on boolean getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BOOLEAN_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_BOOLEAN_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on boolean arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BOOLEAN_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_BOOLEAN_GC_READ_BARRIER;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of booleans into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void booleanFieldWrite(Object ref, boolean value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_BOOLEAN_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().booleanWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of booleans into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void booleanArrayWrite(Object ref, int index, boolean value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().booleanWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of booleans from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static boolean booleanFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().booleanRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of booleans from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static boolean booleanArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().booleanRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of booleans (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;+ &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;+ &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static boolean booleanBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().booleanBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on byte putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_BYTE_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsByteWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on byte putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BYTE_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_BYTE_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on byte arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BYTE_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_BYTE_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on byte getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_BYTE_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsByteReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on byte getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BYTE_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_BYTE_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on byte arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_BYTE_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_BYTE_GC_READ_BARRIER;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of bytes into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void byteFieldWrite(Object ref, byte value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_BYTE_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().byteWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void byteArrayWrite(Object ref, int index, byte value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().byteWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static byte byteFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().byteRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static byte byteArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().byteRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;+ &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;+ &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static boolean byteBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().byteBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on char putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_CHAR_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsCharWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on char putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_CHAR_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_CHAR_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on char arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_CHAR_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_CHAR_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on char getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_CHAR_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsCharReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on char getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_CHAR_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_CHAR_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on char arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_CHAR_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_CHAR_GC_READ_BARRIER;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of chars into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void charFieldWrite(Object ref, char value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_CHAR_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().charWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void charArrayWrite(Object ref, int index, char value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().charWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static char charFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().charRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static char charArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().charRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;+ &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;+ &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static boolean charBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().charBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on short putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_SHORT_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsShortWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on short putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_SHORT_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_SHORT_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on short arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_SHORT_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_SHORT_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on short getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_SHORT_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsShortReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on short getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_SHORT_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_SHORT_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on short arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_SHORT_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_SHORT_GC_READ_BARRIER;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of shorts into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void shortFieldWrite(Object ref, short value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_SHORT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().shortWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void shortArrayWrite(Object ref, int index, short value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().shortWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static short shortFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().shortRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static short shortArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().shortRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;+ &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;+ &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static boolean shortBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().shortBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on int putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_INT_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsIntWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on int putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_INT_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_INT_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on int arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_INT_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_INT_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on int getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_INT_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsIntReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on int getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_INT_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_INT_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on int arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_INT_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_INT_GC_READ_BARRIER;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of ints into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void intFieldWrite(Object ref, int value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_INT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().intWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void intArrayWrite(Object ref, int index, int value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().intWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static int intFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().intRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static int intArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().intRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;+ &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;+ &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static boolean intBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().intBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on long putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_LONG_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsLongWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on long putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_LONG_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_LONG_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on long arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_LONG_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_LONG_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on long getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_LONG_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsLongReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on long getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_LONG_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_LONG_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on long arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_LONG_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_LONG_GC_READ_BARRIER;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of longs into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void longFieldWrite(Object ref, long value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_LONG_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().longWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void longArrayWrite(Object ref, int index, long value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().longWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static long longFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().longRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static long longArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().longRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;+ &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;+ &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static boolean longBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().longBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on float putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_FLOAT_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsFloatWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on float putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_FLOAT_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_FLOAT_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on float arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_FLOAT_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_FLOAT_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on float getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_FLOAT_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsFloatReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on float getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_FLOAT_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_FLOAT_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on float arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_FLOAT_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_FLOAT_GC_READ_BARRIER;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of floats into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void floatFieldWrite(Object ref, float value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_FLOAT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().floatWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void floatArrayWrite(Object ref, int index, float value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().floatWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static float floatFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().floatRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;+ &amp;nbsp; * @return the value read from the array
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static float floatArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().floatRead(array, array.toAddress().plus(offset), offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;+ &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;+ &amp;nbsp; * bytes, relative to &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param tgt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The target object
&lt;br&gt;+ &amp;nbsp; * @param tgtOffset &amp;nbsp;The offset of the first target address, in bytes
&lt;br&gt;+ &amp;nbsp; * relative to &amp;lt;code&amp;gt;tgt&amp;lt;/code&amp;gt; (in principle, this could be
&lt;br&gt;+ &amp;nbsp; * negative).
&lt;br&gt;+ &amp;nbsp; * @param bytes The size of the region being copied, in bytes.
&lt;br&gt;+ &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;+ &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public static boolean floatBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().floatBulkCopy(ObjectReference.fromObject(src), srcOffset, ObjectReference.fromObject(tgt), tgtOffset, bytes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires write barriers on double putfield, arraystore or modifycheck */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_DOUBLE_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsDoubleWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on double putfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_DOUBLE_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_DOUBLE_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires write barriers on double arraystore */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_DOUBLE_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_DOUBLE_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the garbage collector requires read barriers on double getfield or arrayload */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_DOUBLE_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsDoubleReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on double getfield */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_DOUBLE_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_DOUBLE_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the VM requires read barriers on double arrayload */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_DOUBLE_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_DOUBLE_GC_READ_BARRIER;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of doubles into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the field
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void doubleFieldWrite(Object ref, double value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_DOUBLE_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().doubleWrite(src, src.toAddress().plus(offset), value, offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;+ &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;+ &amp;nbsp; * resides. &amp;nbsp;The index is the &amp;quot;natural&amp;quot; index into the array, for
&lt;br&gt;+ &amp;nbsp; * example a[index].
&lt;br&gt;+ &amp;nbsp; * @param value the value to be stored.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static void doubleArrayWrite(Object ref, int index, double value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().doubleWrite(array, array.toAddress().plus(offset), value, offset.toWord(), Word.zero(), ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;+ &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return The value read from the field.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;@Entrypoint
&lt;br&gt;+ &amp;nbsp;public static double doubleFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().doubleRead(src, src.toAddress().plus(offset), offset.toWord(), Word.fromIntZeroExtend(locationMetadata), INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;&lt;br&gt;@@ Diff output truncated at 100000 characters. @@
&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry&amp;reg; Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9&amp;#45;12, 2009. Register now&amp;#33;
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconf&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25518252&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15787--rvmroot-trunk-tp25518252p25518252.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25518139</id>
	<title>SF.net SVN: jikesrvm:[15786] rvmroot/trunk/MMTk</title>
	<published>2009-09-18T19:54:48Z</published>
	<updated>2009-09-18T19:54:48Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15786
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15786&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15786&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-19 02:54:48 +0000 (Sat, 19 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Rename for clarity--thanks to Laurence Hellyer
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;+++ rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;@@ -59,7 +59,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param unusedB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public void objectReferenceWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;+ &amp;nbsp;public void objectReferenceNonHeapWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;+++ rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;@@ -59,7 +59,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void objectReferenceWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceNonHeapWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;@@ -219,7 +219,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final void objectReferenceNonHeapWrite(Address slot, ObjectReference tgt,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fastPath(slot, tgt);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;VM.barriers.objectReferenceWrite(slot, tgt, metaDataA, metaDataB);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;VM.barriers.objectReferenceNonHeapWrite(slot, tgt, metaDataA, metaDataB);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java	2009-09-19 02:54:48 UTC (rev 15786)
&lt;br&gt;@@ -49,7 +49,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract void objectReferenceWrite(Address slot, ObjectReference target, Word metaDataA, Word metaDataB);
&lt;br&gt;+ &amp;nbsp;public abstract void objectReferenceNonHeapWrite(Address slot, ObjectReference target, Word metaDataA, Word metaDataB);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Atomically write a reference field of an object or array and return
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry&amp;reg; Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9&amp;#45;12, 2009. Register now&amp;#33;
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconf&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25518139&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15786--rvmroot-trunk-MMTk-tp25518139p25518139.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25517911</id>
	<title>SF.net SVN: jikesrvm:[15785] rvmroot/trunk/rvm/src/org/jikesrvm</title>
	<published>2009-09-18T19:11:45Z</published>
	<updated>2009-09-18T19:11:45Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15785
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15785&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15785&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-19 02:11:41 +0000 (Sat, 19 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Added missing magic methods, as part of another step toward RVM-845
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineMagic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerateMagic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/escape/SimpleEscape.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Magic.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/runtime/MagicNames.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineMagic.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineMagic.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineMagic.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;@@ -298,6 +298,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Address.class, MagicNames.prepareInt, Offset.class, int.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Address.class, MagicNames.loadFloat, Offset.class, float.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.getIntAtOffset, Object.class, Offset.class, int.class), g);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.getFloatAtOffset, Object.class, Offset.class, float.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.getWordAtOffset, Object.class, Offset.class, Word.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.prepareInt, Object.class, Offset.class, int.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.prepareAddress, Object.class, Offset.class, Address.class), g);
&lt;br&gt;@@ -578,6 +579,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;static {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;MagicGenerator g = new Magic_Store32();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.setIntAtOffset, Object.class, Offset.class, int.class, void.class), g);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.setFloatAtOffset, Object.class, Offset.class, float.class, void.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.setWordAtOffset, Object.class, Offset.class, Word.class, void.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VALIDATE_OBJECT_REFERENCES) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;g = new EarlyReferenceCheckDecorator(NO_SLOT, g);
&lt;br&gt;@@ -695,13 +697,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;MagicGenerator g = new Store16_Offset();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Address.class, MagicNames.store, short.class, Offset.class, void.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Address.class, MagicNames.store, char.class, Offset.class, void.class), g);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Store a char to an address plus offset in the format used in {@link Magic}
&lt;br&gt;+ &amp;nbsp; * Store a 16 bit quantity to an address plus offset in the format used in {@link Magic}
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;private static final class Magic_StoreChar extends MagicGenerator {
&lt;br&gt;+ &amp;nbsp;private static final class Magic_Store16 extends MagicGenerator {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void generateMagic(Assembler asm, MethodReference m, RVMMethod cm, Offset sd) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPOP_Reg(T0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // value
&lt;br&gt;@@ -711,8 +712,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;MagicGenerator g = new Magic_StoreChar();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;MagicGenerator g = new Magic_Store16();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.setCharAtOffset, Object.class, Offset.class, char.class, void.class), g);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;generators.put(getMethodReference(Magic.class, MagicNames.setShortAtOffset, Object.class, Offset.class, short.class, void.class), g);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;@@ -4615,6 +4615,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;popAddr(T0); // pop object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLIntX(T0, T1, T0); // *(object+offset)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pushInt(T0); // push *(object+offset)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.getFloatAtOffset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;popInt(T1); // pop offset
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;popAddr(T0); // pop object
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLWZX(T0, T1, T0); // *(object+offset)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;pushInt(T0); // push *(object+offset),
&lt;br&gt;+// &amp;nbsp; &amp;nbsp;asm.emitLFSX &amp;nbsp;(F0, T1, T0); // *(object+offset)
&lt;br&gt;+// &amp;nbsp; &amp;nbsp;pushFloat(F0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.getObjectAtOffset ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; methodName == MagicNames.getWordAtOffset ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; methodName == MagicNames.getTIBAtOffset) {
&lt;br&gt;@@ -4651,6 +4658,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;popInt(T1); // pop offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;popAddr(T0); // pop object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitSTWX(T2, T1, T0); // *(object+offset) = newvalue
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.setFloatAtOffset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;popInt(T2); // pop newvalue
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;popInt(T1); // pop offset
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;popAddr(T0); // pop object
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitSTWX(T2, T1, T0); // *(object+offset) = newvalue
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.setObjectAtOffset || methodName == MagicNames.setWordAtOffset) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (methodToBeCalled.getParameterTypes().length == 4) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discardSlot(); // discard locationMetadata parameter
&lt;br&gt;@@ -4664,7 +4676,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;popInt(T1); // pop offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;popAddr(T0); // pop object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitSTBX(T2, T1, T0); // *(object+offset) = newvalue
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.setCharAtOffset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.setCharAtOffset || methodName == MagicNames.setShortAtOffset) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;popInt(T2); // pop newvalue
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;popInt(T1); // pop offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;popAddr(T0); // pop object
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerateMagic.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerateMagic.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerateMagic.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;@@ -303,6 +303,17 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand offset = bc2ir.popAddress();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand object = bc2ir.popRef();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bc2ir.appendInstruction(Store.create(INT_STORE, val, object, offset, null));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.getFloatAtOffset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand offset = bc2ir.popAddress();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand object = bc2ir.popRef();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;RegisterOperand val = gc.temps.makeTempFloat();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;bc2ir.appendInstruction(Load.create(FLOAT_LOAD, val, object, offset, null));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;bc2ir.push(val.copyD2U());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.setFloatAtOffset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand val = bc2ir.popFloat();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand offset = bc2ir.popAddress();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand object = bc2ir.popRef();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;bc2ir.appendInstruction(Store.create(FLOAT_STORE, val, object, offset, null));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.getWordAtOffset) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LocationOperand loc = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (meth.getParameterTypes().length == 3) {
&lt;br&gt;@@ -398,7 +409,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RegisterOperand val = gc.temps.makeTemp(TypeReference.Char);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bc2ir.appendInstruction(Load.create(USHORT_LOAD, val, object, offset, null));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bc2ir.push(val.copyD2U());
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.setCharAtOffset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else if (methodName == MagicNames.setCharAtOffset || methodName == MagicNames.setShortAtOffset) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand val = bc2ir.popInt();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand offset = bc2ir.popAddress();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Operand object = bc2ir.popRef();
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/escape/SimpleEscape.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/escape/SimpleEscape.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/escape/SimpleEscape.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;@@ -62,6 +62,8 @@
&lt;br&gt;&amp;nbsp;import static org.jikesrvm.compilers.opt.ir.Operators.DOUBLE_STORE_opcode;
&lt;br&gt;&amp;nbsp;import static org.jikesrvm.compilers.opt.ir.Operators.FLOAT_ALOAD_opcode;
&lt;br&gt;&amp;nbsp;import static org.jikesrvm.compilers.opt.ir.Operators.FLOAT_ASTORE_opcode;
&lt;br&gt;+import static org.jikesrvm.compilers.opt.ir.Operators.FLOAT_LOAD_opcode;
&lt;br&gt;+import static org.jikesrvm.compilers.opt.ir.Operators.FLOAT_STORE_opcode;
&lt;br&gt;&amp;nbsp;import static org.jikesrvm.compilers.opt.ir.Operators.GETFIELD_opcode;
&lt;br&gt;&amp;nbsp;import static org.jikesrvm.compilers.opt.ir.Operators.GETSTATIC_opcode;
&lt;br&gt;&amp;nbsp;import static org.jikesrvm.compilers.opt.ir.Operators.GET_CAUGHT_EXCEPTION_opcode;
&lt;br&gt;@@ -411,6 +413,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case REF_ALOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case INT_LOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case LONG_LOAD_opcode:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;case FLOAT_LOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case DOUBLE_LOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case REF_LOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// all is OK, unless we load this register from memory
&lt;br&gt;@@ -431,6 +434,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case REF_STORE_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case INT_STORE_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case LONG_STORE_opcode:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;case FLOAT_STORE_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case DOUBLE_STORE_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// as long as we don't store this operand elsewhere, all
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// is OK. TODO: add more smarts.
&lt;br&gt;@@ -611,6 +615,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case REF_ALOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case INT_LOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case LONG_LOAD_opcode:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;case FLOAT_LOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case DOUBLE_LOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case REF_LOAD_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// all is OK, unless we load this register from memory
&lt;br&gt;@@ -631,6 +636,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case REF_STORE_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case INT_STORE_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case LONG_STORE_opcode:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;case FLOAT_STORE_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case DOUBLE_STORE_opcode:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// as long as we don't store this operand elsewhere, all
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// is OK. TODO: add more smarts.
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Magic.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Magic.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Magic.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;@@ -197,6 +197,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Get char at arbitrary (byte) offset from object. The most
&lt;br&gt;+ &amp;nbsp; * significant 16bits will be 0.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public static char getCharAtOffset(Object object, Offset offset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return (char) -1;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Get short at arbitrary (byte) offset from object. The most
&lt;br&gt;&amp;nbsp; &amp;nbsp; * significant 16bits will be the same as the most significant bit
&lt;br&gt;&amp;nbsp; &amp;nbsp; * in the short.
&lt;br&gt;@@ -207,33 +216,41 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Get char at arbitrary (byte) offset from object. The most
&lt;br&gt;- &amp;nbsp; * significant 16bits will be 0.
&lt;br&gt;+ &amp;nbsp; * Get int at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Use getIntAtOffset(obj, ofs) instead of getMemoryInt(objectAsAddress(obj)+ofs)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static char getCharAtOffset(Object object, Offset offset) {
&lt;br&gt;+ &amp;nbsp;public static int getIntAtOffset(Object object, Offset offset) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return (char) -1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Get int at arbitrary (byte) offset from object.
&lt;br&gt;- &amp;nbsp; * Use getIntAtOffset(obj, ofs) instead of getMemoryInt(objectAsAddress(obj)+ofs)
&lt;br&gt;+ &amp;nbsp; * Get long at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Use getlongAtOffset(obj, ofs) instead of two getIntAtOffset
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static int getIntAtOffset(Object object, Offset offset) {
&lt;br&gt;+ &amp;nbsp;public static long getLongAtOffset(Object object, Offset offset) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Get Word at arbitrary (byte) offset from object.
&lt;br&gt;- &amp;nbsp; * Use getWordAtOffset(obj, ofs) instead of getMemoryWord(objectAsAddress(obj)+ofs)
&lt;br&gt;+ &amp;nbsp; * Get float at arbitrary (byte) offset from object.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static Word getWordAtOffset(Object object, Offset offset) {
&lt;br&gt;+ &amp;nbsp;public static float getFloatAtOffset(Object object, Offset offset) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return Word.max();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Get double at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Use getDoubleAtOffset(obj, ofs) instead of two getIntAtOffset
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public static double getDoubleAtOffset(Object object, Offset offset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return -1;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Get Object at arbitrary (byte) offset from object.
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Use getObjectAtOffset(obj, ofs) instead of
&lt;br&gt;&amp;nbsp; &amp;nbsp; * addressAsObject(getMemoryAddress(objectAsAddress(obj)+ofs))
&lt;br&gt;@@ -255,7 +272,16 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Get Word at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Use getWordAtOffset(obj, ofs) instead of getMemoryWord(objectAsAddress(obj)+ofs)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public static Word getWordAtOffset(Object object, Offset offset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Word.max();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Get Word at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static Word getWordAtOffset(Object object, Offset offset, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;@@ -272,46 +298,58 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Get long at arbitrary (byte) offset from object.
&lt;br&gt;- &amp;nbsp; * Use getlongAtOffset(obj, ofs) instead of two getIntAtOffset
&lt;br&gt;+ &amp;nbsp; * Set byte at arbitrary (byte) offset from object.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static long getLongAtOffset(Object object, Offset offset) {
&lt;br&gt;+ &amp;nbsp;public static void setByteAtOffset(Object object, Offset offset, byte newvalue) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Get double at arbitrary (byte) offset from object.
&lt;br&gt;- &amp;nbsp; * Use getDoubleAtOffset(obj, ofs) instead of two getIntAtOffset
&lt;br&gt;+ &amp;nbsp; * Set char at arbitrary (byte) offset from object.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static double getDoubleAtOffset(Object object, Offset offset) {
&lt;br&gt;+ &amp;nbsp;public static void setCharAtOffset(Object object, Offset offset, char newvalue) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Set byte at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Set short at arbitrary (byte) offset from object.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static void setByteAtOffset(Object object, Offset offset, byte newvalue) {
&lt;br&gt;+ &amp;nbsp;public static void setShortAtOffset(Object object, Offset offset, short newvalue) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Set char at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Set int at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Use setIntAtOffset(obj, ofs, new) instead of setMemoryWord(objectAsAddress(obj)+ofs, new)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static void setCharAtOffset(Object object, Offset offset, char newvalue) {
&lt;br&gt;+ &amp;nbsp;public static void setIntAtOffset(Object object, Offset offset, int newvalue) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Set int at arbitrary (byte) offset from object.
&lt;br&gt;- &amp;nbsp; * Use setIntAtOffset(obj, ofs, new) instead of setMemoryWord(objectAsAddress(obj)+ofs, new)
&lt;br&gt;+ &amp;nbsp; * Set long at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Use setlongAtOffset(obj, ofs) instead of two setIntAtOffset
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static void setIntAtOffset(Object object, Offset offset, int newvalue) {
&lt;br&gt;+ &amp;nbsp;public static void setLongAtOffset(Object object, Offset offset, long newvalue) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Set float at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public static void setFloatAtOffset(Object object, Offset offset, float newvalue) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Set double at arbitrary (byte) offset from object.
&lt;br&gt;+ &amp;nbsp; * Use setDoubleAtOffset(obj, ofs) instead of two setIntAtOffset
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public static void setDoubleAtOffset(Object object, Offset offset, double newvalue) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Set word at arbitrary (byte) offset from object.
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Use setWordAtOffset(obj, ofs, new) instead of setMemoryWord(objectAsAddress(obj)+ofs, new)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;@@ -342,22 +380,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Set long at arbitrary (byte) offset from object.
&lt;br&gt;- &amp;nbsp; * Use setlongAtOffset(obj, ofs) instead of two setIntAtOffset
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static void setLongAtOffset(Object object, Offset offset, long newvalue) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Set double at arbitrary (byte) offset from object.
&lt;br&gt;- &amp;nbsp; * Use setDoubleAtOffset(obj, ofs) instead of two setIntAtOffset
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public static void setDoubleAtOffset(Object object, Offset offset, double newvalue) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); &amp;nbsp;// call site should have been hijacked by magic in compiler
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;//---------------------------------------//
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp; &amp;nbsp;Atomic Memory Access Primitives. &amp;nbsp; //
&lt;br&gt;&amp;nbsp; &amp;nbsp;//---------------------------------------//
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/runtime/MagicNames.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/runtime/MagicNames.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/runtime/MagicNames.java	2009-09-19 02:11:41 UTC (rev 15785)
&lt;br&gt;@@ -69,21 +69,24 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom getUnsignedByteAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getUnsignedByteAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom getByteAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getByteAtOffset&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final Atom getCharAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getCharAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom getShortAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getShortAtOffset&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final Atom getCharAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getCharAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom getIntAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getIntAtOffset&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final Atom getLongAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getLongAtOffset&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final Atom getFloatAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getFloatAtOffset&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final Atom getDoubleAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getDoubleAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom getWordAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getWordAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom getObjectAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getObjectAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom getTIBAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getTIBAtOffset&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final Atom getLongAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getLongAtOffset&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final Atom getDoubleAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;getDoubleAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom setByteAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setByteAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom setCharAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setCharAtOffset&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final Atom setShortAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setShortAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom setIntAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setIntAtOffset&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final Atom setLongAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setLongAtOffset&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final Atom setFloatAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setFloatAtOffset&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final Atom setDoubleAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setDoubleAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom setWordAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setWordAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom setObjectAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setObjectAtOffset&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final Atom setLongAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setLongAtOffset&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final Atom setDoubleAtOffset = Atom.findOrCreateAsciiAtom(&amp;quot;setDoubleAtOffset&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom getMemoryInt = Atom.findOrCreateAsciiAtom(&amp;quot;getMemoryInt&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final Atom setMemoryInt = Atom.findOrCreateAsciiAtom(&amp;quot;setMemoryInt&amp;quot;);
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry&amp;reg; Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9&amp;#45;12, 2009. Register now&amp;#33;
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconf&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25517911&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15785--rvmroot-trunk-rvm-src-org-jikesrvm-tp25517911p25517911.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25505351</id>
	<title>SF.net SVN: jikesrvm:[15784] rvmroot/trunk/rvm/src/org/jikesrvm</title>
	<published>2009-09-18T02:03:36Z</published>
	<updated>2009-09-18T02:03:36Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15784
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15784&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15784&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-18 09:03:36 +0000 (Fri, 18 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Another minor refactoring fix missed in r15782.
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java	2009-09-18 08:44:24 UTC (rev 15783)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;@@ -78,7 +78,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(reg); // offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 3);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectNonHeapWriteBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectStaticWriteBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutstaticBarrierImm(Assembler asm, Offset fieldOffset, int locationMetadata) {
&lt;br&gt;@@ -86,7 +86,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(fieldOffset.toInt());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 3);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectNonHeapWriteBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectStaticWriteBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileArrayLoadBarrier(Assembler asm, boolean pushResult) {
&lt;br&gt;@@ -121,7 +121,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(reg);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 2);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectNonHeapReadBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectStaticReadBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -129,7 +129,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(fieldOffset.toInt());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 2);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectNonHeapReadBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectStaticReadBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java	2009-09-18 08:44:24 UTC (rev 15783)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;@@ -60,7 +60,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// T1 already contains the offset of the field on entry
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutstaticBarrier(BaselineCompilerImpl comp, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectNonHeapWriteBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectStaticWriteBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;comp.peekAddr(T0, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // value to store
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVAL(T2, locationMetadata);
&lt;br&gt;@@ -70,7 +70,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp;on entry java stack contains ...|ref_to_store|
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutstaticBarrierImm(BaselineCompilerImpl comp, Offset fieldOffset, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectNonHeapWriteBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectStaticWriteBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVALAddr(T1, fieldOffset); &amp;nbsp; &amp;nbsp;// offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;comp.peekAddr(T0, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // value to store
&lt;br&gt;@@ -114,7 +114,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// T0 already contains the offset of the field on entry
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileGetstaticBarrier(BaselineCompilerImpl comp, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectNonHeapReadBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectStaticReadBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVAL(T1, locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitBCCTRL(); // MemoryManager.getstaticReadBarrier(T0,T1)
&lt;br&gt;@@ -123,7 +123,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp;on entry java stack contains ...|
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileGetstaticBarrierImm(BaselineCompilerImpl comp, Offset fieldOffset, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectNonHeapReadBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectStaticReadBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVALAddr(T0, fieldOffset); &amp;nbsp; &amp;nbsp;// offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVAL(T1, locationMetadata);
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java	2009-09-18 08:44:24 UTC (rev 15783)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;@@ -478,7 +478,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LocationOperand loc = PutStatic.getLocation(inst);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FieldReference field = loc.getFieldRef();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!field.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectNonHeapWriteBarrierMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectStaticWriteBarrierMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Instruction wb =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Call.create3(CALL,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; null,
&lt;br&gt;@@ -504,7 +504,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LocationOperand loc = GetStatic.getLocation(inst);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FieldReference field = loc.getFieldRef();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!field.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectNonHeapReadBarrierMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectStaticReadBarrierMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Instruction rb =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Call.create2(CALL,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetStatic.getClearResult(inst),
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java	2009-09-18 08:44:24 UTC (rev 15783)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java	2009-09-18 09:03:36 UTC (rev 15784)
&lt;br&gt;@@ -273,9 +273,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod objectFieldReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;public static final NormalMethod objectNonHeapWriteBarrierMethod =
&lt;br&gt;+ &amp;nbsp;public static final NormalMethod objectStaticWriteBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectStaticWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final NormalMethod objectNonHeapReadBarrierMethod =
&lt;br&gt;+ &amp;nbsp;public static final NormalMethod objectStaticReadBarrierMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectStaticRead&amp;quot;, &amp;quot;(Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod modifyCheckMethod =
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry&amp;reg; Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9&amp;#45;12, 2009. Register now&amp;#33;
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconf&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25505351&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15784--rvmroot-trunk-rvm-src-org-jikesrvm-tp25505351p25505351.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25505059</id>
	<title>SF.net SVN: jikesrvm:[15783] rvmroot/trunk/rvm/src/org/jikesrvm/compilers/ baseline/ppc</title>
	<published>2009-09-18T01:44:24Z</published>
	<updated>2009-09-18T01:44:24Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15783
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15783&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15783&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-18 08:44:24 +0000 (Fri, 18 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Fix breakage of PPC r15782 (previous commit).
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/Barriers.java	2009-09-18 08:44:24 UTC (rev 15783)
&lt;br&gt;@@ -34,7 +34,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// T2 already contains the offset of the field on entry
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutfieldBarrier(BaselineCompilerImpl comp, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceFieldWriteBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectFieldWriteBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;comp.peekAddr(T0, 1); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // object base
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitNullCheck(T0);
&lt;br&gt;@@ -46,7 +46,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp;on entry java stack contains ...|target_ref|ref_to_store|
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutfieldBarrierImm(BaselineCompilerImpl comp, Offset fieldOffset, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceFieldWriteBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectFieldWriteBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;comp.peekAddr(T0, 1); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // object base
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitNullCheck(T0);
&lt;br&gt;@@ -60,7 +60,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// T1 already contains the offset of the field on entry
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutstaticBarrier(BaselineCompilerImpl comp, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceNonHeapWriteBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectNonHeapWriteBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;comp.peekAddr(T0, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // value to store
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVAL(T2, locationMetadata);
&lt;br&gt;@@ -70,7 +70,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp;on entry java stack contains ...|ref_to_store|
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutstaticBarrierImm(BaselineCompilerImpl comp, Offset fieldOffset, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceNonHeapWriteBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectNonHeapWriteBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVALAddr(T1, fieldOffset); &amp;nbsp; &amp;nbsp;// offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;comp.peekAddr(T0, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // value to store
&lt;br&gt;@@ -81,7 +81,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// on entry T0, T1 already contain the appropriate values
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileArrayLoadBarrier(BaselineCompilerImpl comp) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceArrayReadBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectArrayReadBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitBCCTRL(); &amp;nbsp;// MemoryManager.arrayLoadReadBarrier(T0,T1)
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -90,7 +90,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// T1 already contains the offset of the field on entry
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileGetfieldBarrier(BaselineCompilerImpl comp, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceFieldReadBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectFieldReadBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;comp.peekAddr(T0, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // object base
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitNullCheck(T0);
&lt;br&gt;@@ -101,7 +101,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp;on entry java stack contains ...|source_ref|
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileGetfieldBarrierImm(BaselineCompilerImpl comp, Offset fieldOffset, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceFieldReadBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectFieldReadBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;comp.peekAddr(T0, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // object base
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitNullCheck(T0);
&lt;br&gt;@@ -114,7 +114,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// T0 already contains the offset of the field on entry
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileGetstaticBarrier(BaselineCompilerImpl comp, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceNonHeapReadBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectNonHeapReadBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVAL(T1, locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitBCCTRL(); // MemoryManager.getstaticReadBarrier(T0,T1)
&lt;br&gt;@@ -123,7 +123,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp;on entry java stack contains ...|
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileGetstaticBarrierImm(BaselineCompilerImpl comp, Offset fieldOffset, int locationMetadata) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Assembler asm = comp.asm;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.referenceNonHeapReadBarrierMethod.getOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(S0, Entrypoints.objectNonHeapReadBarrierMethod.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitMTCTR(S0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVALAddr(T0, fieldOffset); &amp;nbsp; &amp;nbsp;// offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVAL(T1, locationMetadata);
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ppc/BaselineCompilerImpl.java	2009-09-18 08:44:24 UTC (rev 15783)
&lt;br&gt;@@ -965,7 +965,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected final void emit_aaload() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;genBoundsCheck();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_ALOAD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileArrayLoadBarrier(this);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pushAddr(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;@@ -2470,7 +2470,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected final void emit_unresolved_getstatic(FieldReference fieldRef) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;emitDynamicLinkingSequence(T0, fieldRef, true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TypeReference fieldType = fieldRef.getFieldContentsType();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETSTATIC_BARRIER &amp;&amp; fieldType.isReferenceType()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETSTATIC_BARRIER &amp;&amp; fieldType.isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileGetstaticBarrier(this, fieldType.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pushAddr(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;@@ -2500,7 +2500,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RVMField field = fieldRef.peekResolvedField();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset fieldOffset = field.getOffset();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TypeReference fieldType = fieldRef.getFieldContentsType();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETSTATIC_BARRIER &amp;&amp; fieldType.isReferenceType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETSTATIC_BARRIER &amp;&amp; fieldType.isReferenceType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileGetstaticBarrierImm(this, fieldOffset, fieldType.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pushAddr(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;@@ -2528,7 +2528,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected final void emit_unresolved_putstatic(FieldReference fieldRef) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;emitDynamicLinkingSequence(T1, fieldRef, true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTSTATIC_BARRIER &amp;&amp; !fieldRef.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTSTATIC_BARRIER &amp;&amp; !fieldRef.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compilePutstaticBarrier(this, fieldRef.getId()); // NOTE: offset is in T0 from emitDynamicLinkingSequence
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discardSlots(1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;@@ -2557,7 +2557,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected final void emit_resolved_putstatic(FieldReference fieldRef) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RVMField field = fieldRef.peekResolvedField();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset fieldOffset = field.getOffset();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTSTATIC_BARRIER &amp;&amp; !fieldRef.getFieldContentsType().isPrimitiveType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTSTATIC_BARRIER &amp;&amp; !fieldRef.getFieldContentsType().isPrimitiveType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compilePutstaticBarrierImm(this, fieldOffset, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discardSlots(1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;@@ -2587,7 +2587,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TypeReference fieldType = fieldRef.getFieldContentsType();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// T1 = field offset from emitDynamicLinkingSequence()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;emitDynamicLinkingSequence(T1, fieldRef, true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETFIELD_BARRIER &amp;&amp; fieldType.isReferenceType()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER &amp;&amp; fieldType.isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileGetfieldBarrier(this, fieldType.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discardSlots(1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pushAddr(T0);
&lt;br&gt;@@ -2637,7 +2637,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RVMField field = fieldRef.peekResolvedField();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TypeReference fieldType = fieldRef.getFieldContentsType();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset fieldOffset = field.getOffset();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETFIELD_BARRIER &amp;&amp; fieldType.isReferenceType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER &amp;&amp; fieldType.isReferenceType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileGetfieldBarrierImm(this, fieldOffset, fieldType.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discardSlots(1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pushAddr(T0);
&lt;br&gt;@@ -2688,7 +2688,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;emitDynamicLinkingSequence(T2, fieldRef, true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (fieldType.isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 32/64bit reference store
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// NOTE: offset is in T2 from emitDynamicLinkingSequence
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compilePutfieldBarrier(this, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discardSlots(2);
&lt;br&gt;@@ -2742,7 +2742,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TypeReference fieldType = fieldRef.getFieldContentsType();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (fieldType.isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 32/64bit reference store
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTFIELD_BARRIER &amp;&amp; !field.isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER &amp;&amp; !field.isUntraced()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compilePutfieldBarrierImm(this, fieldOffset, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discardSlots(2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;@@ -3743,7 +3743,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param reg The register to hold the counter array.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private void loadCounterArray(int reg) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_ALOAD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLAddrToc(T0, Entrypoints.edgeCountersField.getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitLVAL(T1, getEdgeCounterIndex());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileArrayLoadBarrier(this);
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry&amp;reg; Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9&amp;#45;12, 2009. Register now&amp;#33;
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconf&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25505059&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15783--rvmroot-trunk-rvm-src-org-jikesrvm-compilers--baseline-ppc-tp25505059p25505059.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25502772</id>
	<title>SF.net SVN: jikesrvm:[15782] rvmroot/trunk</title>
	<published>2009-09-17T20:57:40Z</published>
	<updated>2009-09-17T20:57:40Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15782
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15782&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15782&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-18 03:57:39 +0000 (Fri, 18 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Yet another minor refactoring toward RVM-845
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/Mutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/Gen.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenCollector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSMutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Map.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/Services.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMArray.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/osr/ObjectHolder.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Statics.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/scheduler/Synchronization.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/ext/vm/harness/org/mmtk/harness/vm/Barriers.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -30,12 +30,25 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public void referenceWrite(ObjectReference ref, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp;public void objectReferenceWrite(ObjectReference ref, ObjectReference target, Word slot, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;slot.toAddress().store(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;+ &amp;nbsp; * @param unused Unused
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp;public ObjectReference objectReferenceRead(ObjectReference ref,Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot.toAddress().loadObjectReference();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Perform the actual write of the non-heap write barrier. &amp;nbsp;This is
&lt;br&gt;&amp;nbsp; &amp;nbsp; * used when the store is not to an object, but to a non-heap location
&lt;br&gt;&amp;nbsp; &amp;nbsp; * such as statics or the stack.
&lt;br&gt;@@ -46,8 +59,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param unusedB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public void referenceWrite(Address slot, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word unusedA, Word unusedB) {
&lt;br&gt;+ &amp;nbsp;public void objectReferenceWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -63,8 +75,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public ObjectReference referenceAtomicWrite(ObjectReference ref, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp;public ObjectReference objectReferenceAtomicWrite(ObjectReference ref, ObjectReference target, Word slot, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference old;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old = slot.toAddress().prepareObjectReference();
&lt;br&gt;@@ -84,25 +95,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean referenceTryCompareAndSwap(ObjectReference ref, ObjectReference old, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceTryCompareAndSwap(ObjectReference ref, ObjectReference old, ObjectReference target, Word slot, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return slot.toAddress().attempt(old, target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param slot The address to be read from
&lt;br&gt;- &amp;nbsp; * @param unused Unused
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;- &amp;nbsp; * @return the read value
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public ObjectReference referenceRead(ObjectReference ref,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word slot, Word unused, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return slot.toAddress().loadObjectReference();
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Perform the actual write of the write barrier, writing the value as a raw Word.
&lt;br&gt;@@ -114,8 +110,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public void wordWrite(ObjectReference ref, Word target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp;public void wordWrite(ObjectReference ref, Word target, Word slot, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;slot.toAddress().store(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -168,8 +163,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public Word wordRead(ObjectReference ref,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word slot, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp;public Word wordRead(ObjectReference ref, Word slot, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return slot.toAddress().loadWord();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -184,8 +178,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param value the new value for the element
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public void referenceArrayStoreNoGCBarrier(Object [] dst, int index, Object value) {
&lt;br&gt;+ &amp;nbsp;public void objectArrayStoreNoGCBarrier(Object [] dst, int index, Object value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;dst[index] = value;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -31,25 +31,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceWrite(ObjectReference objref, ObjectReference target, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceWrite(ObjectReference objref, ObjectReference target, Word offset, Word location, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(objref.toObject(), offset.toOffset(), target.toObject(), location.toInt());
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual write of the non-heap write barrier. &amp;nbsp;This is
&lt;br&gt;- &amp;nbsp; * used when the store is not to an object, but to a non-heap location
&lt;br&gt;- &amp;nbsp; * such as statics or the stack.
&lt;br&gt;- &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;- &amp;nbsp; * @param unusedA The offset from the ref
&lt;br&gt;- &amp;nbsp; * @param unusedB Unused
&lt;br&gt;- &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;@@ -59,29 +45,22 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final ObjectReference referenceRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp;public final ObjectReference objectReferenceRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return ObjectReference.fromObject(Magic.getObjectAtOffset(objref.toObject(), offset.toOffset(), location.toInt()));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Sets an element of an object array without invoking any write
&lt;br&gt;- &amp;nbsp; * barrier. &amp;nbsp;This method is called by the Map class to ensure
&lt;br&gt;- &amp;nbsp; * potentially-allocation-triggering write barriers do not occur in
&lt;br&gt;- &amp;nbsp; * allocation slow path code.
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param dst the destination array
&lt;br&gt;- &amp;nbsp; * @param index the index of the element to set
&lt;br&gt;- &amp;nbsp; * @param value the new value for the element
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of the non-heap write barrier. &amp;nbsp;This is
&lt;br&gt;+ &amp;nbsp; * used when the store is not to an object, but to a non-heap location
&lt;br&gt;+ &amp;nbsp; * such as statics or the stack.
&lt;br&gt;+ &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;+ &amp;nbsp; * @param unusedA The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param unusedB Unused
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;@UninterruptibleNoWarn
&lt;br&gt;- &amp;nbsp;public final void referenceArrayStoreNoGCBarrier(Object[] dst, int index, Object value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (org.jikesrvm.VM.runningVM) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Address base = ObjectReference.fromObject(dst).toAddress();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Address slot = base.plus(Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.activePlan.global().storeObjectReference(slot, ObjectReference.fromObject(value));
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;dst[index] = value;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -96,7 +75,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final ObjectReference referenceAtomicWrite(ObjectReference objref, ObjectReference target, Word offset, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp;public final ObjectReference objectReferenceAtomicWrite(ObjectReference objref, ObjectReference target, Word offset, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object obj = objref.toObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object newObject = target.toObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object oldObject;
&lt;br&gt;@@ -118,7 +97,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final boolean referenceTryCompareAndSwap(ObjectReference objref, ObjectReference old, ObjectReference target, Word offset, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp;public final boolean objectReferenceTryCompareAndSwap(ObjectReference objref, ObjectReference old, ObjectReference target, Word offset, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object oldValue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;oldValue = Magic.prepareObject(objref, offset.toOffset());
&lt;br&gt;@@ -199,4 +178,24 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return Magic.getWordAtOffset(ref.toObject(), offset.toOffset(), location.toInt());
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Sets an element of an object array without invoking any write
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;This method is called by the Map class to ensure
&lt;br&gt;+ &amp;nbsp; * potentially-allocation-triggering write barriers do not occur in
&lt;br&gt;+ &amp;nbsp; * allocation slow path code.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param dst the destination array
&lt;br&gt;+ &amp;nbsp; * @param index the index of the element to set
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the element
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@UninterruptibleNoWarn
&lt;br&gt;+ &amp;nbsp;public final void objectArrayStoreNoGCBarrier(Object[] dst, int index, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (org.jikesrvm.VM.runningVM) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Address base = ObjectReference.fromObject(dst).toAddress();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Address slot = base.plus(Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.activePlan.global().storeObjectReference(slot, ObjectReference.fromObject(value));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;dst[index] = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/Mutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/Mutator.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/Mutator.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -302,8 +302,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;check(index &amp;lt; limit, &amp;quot;Index &amp;quot;+index+&amp;quot; out of bounds &amp;quot;+limit);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Address referenceSlot = ObjectModel.getRefSlot(object, index);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (ActivePlan.constraints.needsReferenceWriteBarrier()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;context.referenceWrite(object, referenceSlot, value, referenceSlot.toWord(), null, Plan.ARRAY_ELEMENT);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (ActivePlan.constraints.needsObjectReferenceWriteBarrier()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;context.objectReferenceWrite(object, referenceSlot, value, referenceSlot.toWord(), null, Plan.ARRAY_ELEMENT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (gcEveryWB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gc();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -346,8 +346,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Address referenceSlot = ObjectModel.getRefSlot(object, index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference result;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (ActivePlan.constraints.needsReferenceReadBarrier()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;result = context.referenceRead(object, referenceSlot, null, null, Plan.INSTANCE_FIELD);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (ActivePlan.constraints.needsObjectReferenceReadBarrier()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;result = context.objectReferenceRead(object, referenceSlot, null, null, Plan.INSTANCE_FIELD);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = referenceSlot.loadObjectReference();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/MutatorContext.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -267,70 +267,57 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * A new reference is about to be created. Take appropriate write
&lt;br&gt;- &amp;nbsp; * barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; * Read a reference type. In a concurrent collector this may
&lt;br&gt;+ &amp;nbsp; * involve adding the referent to the marking queue.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;- &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;- &amp;nbsp; * stored.
&lt;br&gt;- &amp;nbsp; * @param tgt The target of the new reference
&lt;br&gt;- &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;- &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; * @param referent The referent being read.
&lt;br&gt;+ &amp;nbsp; * @return The new referent.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public void referenceWrite(ObjectReference src, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference tgt, Word metaDataA,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public ObjectReference javaLangReferenceReadBarrier(ObjectReference referent) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ObjectReference.nullReference();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * A new reference is about to be created in a location that is not
&lt;br&gt;- &amp;nbsp; * a regular heap object. &amp;nbsp;Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; * Write an object reference. Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;&amp;nbsp; &amp;nbsp; * stored.
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param tgt The target of the new reference
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public void referenceNonHeapWrite(Address slot, ObjectReference tgt,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB) {
&lt;br&gt;+ &amp;nbsp;public void objectReferenceWrite(ObjectReference src, Address slot, ObjectReference tgt, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Attempt to atomically exchange the value in the given slot
&lt;br&gt;- &amp;nbsp; * with the passed replacement value. If a new reference is
&lt;br&gt;- &amp;nbsp; * created, we must then take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; * Read an object reference. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;- &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;- &amp;nbsp; * stored.
&lt;br&gt;- &amp;nbsp; * @param old The old reference to be swapped out
&lt;br&gt;- &amp;nbsp; * @param tgt The target of the new reference
&lt;br&gt;- &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;- &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;- &amp;nbsp; * @return True if the swap was successful.
&lt;br&gt;+ &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;+ &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;+ &amp;nbsp; * @return The reference that was read.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public boolean referenceTryCompareAndSwap(ObjectReference src, Address slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference old, ObjectReference tgt, Word metaDataA,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public ObjectReference objectReferenceRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ObjectReference.nullReference();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -351,44 +338,44 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public boolean referenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference dst, Offset dstOffset,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;int bytes) {
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Read a reference type. In a concurrent collector this may
&lt;br&gt;- &amp;nbsp; * involve adding the referent to the marking queue.
&lt;br&gt;+ &amp;nbsp; * A new reference is about to be created in a location that is not
&lt;br&gt;+ &amp;nbsp; * a regular heap object. &amp;nbsp;Take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param referent The referent being read.
&lt;br&gt;- &amp;nbsp; * @return The new referent.
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param tgt The target of the new reference
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public ObjectReference javaLangReferenceReadBarrier(ObjectReference referent) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp;public void objectReferenceNonHeapWrite(Address slot, ObjectReference tgt, Word metaDataA, Word metaDataB) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return ObjectReference.nullReference();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Read a reference. Take appropriate read barrier action, and
&lt;br&gt;+ &amp;nbsp; * Read an object reference. Take appropriate read barrier action, and
&lt;br&gt;&amp;nbsp; &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param src The object reference holding the field being read.
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the load occurred
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The reference that was read.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public ObjectReference referenceRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp;public ObjectReference objectReferenceNonHeapRead(Address slot, Word metaDataA, Word metaDataB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;@@ -396,22 +383,33 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Read a reference. Take appropriate read barrier action, and
&lt;br&gt;- &amp;nbsp; * return the value that was read.&amp;lt;p&amp;gt; This is a &amp;lt;b&amp;gt;substituting&amp;lt;b&amp;gt;
&lt;br&gt;- &amp;nbsp; * barrier. &amp;nbsp;The call to this barrier takes the place of a load.&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; * Attempt to atomically exchange the value in the given slot
&lt;br&gt;+ &amp;nbsp; * with the passed replacement value. If a new reference is
&lt;br&gt;+ &amp;nbsp; * created, we must then take appropriate write barrier actions.&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param slot The address of the slot being read.
&lt;br&gt;- &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a load
&lt;br&gt;- &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a load
&lt;br&gt;- &amp;nbsp; * @return The reference that was read.
&lt;br&gt;+ &amp;nbsp; * &amp;lt;b&amp;gt;By default do nothing, override if appropriate.&amp;lt;/b&amp;gt;
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param src The object into which the new reference will be stored
&lt;br&gt;+ &amp;nbsp; * @param slot The address into which the new reference will be
&lt;br&gt;+ &amp;nbsp; * stored.
&lt;br&gt;+ &amp;nbsp; * @param old The old reference to be swapped out
&lt;br&gt;+ &amp;nbsp; * @param tgt The target of the new reference
&lt;br&gt;+ &amp;nbsp; * @param metaDataA A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;+ &amp;nbsp; * @return True if the swap was successful.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public ObjectReference referenceNonHeapRead(Address slot, Word metaDataA, Word metaDataB) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// Either: read barriers are used and this is overridden, or
&lt;br&gt;- &amp;nbsp; &amp;nbsp;// read barriers are not used and this is never called
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceTryCompareAndSwap(ObjectReference src, Address slot, ObjectReference old, ObjectReference tgt, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// Either: write barriers are used and this is overridden, or
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// write barriers are not used and this is never called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return ObjectReference.nullReference();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Flush mutator context, in response to a requestMutatorFlush.
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Also called by the default implementation of deinitMutator.
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -25,17 +25,17 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True of this Plan requires read barriers on java.lang.reference types. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsJavaLangReferenceReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True if this Plan requires write barriers on reference types. */
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceWriteBarrier() { return false; }
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires write barriers on object references. */
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True of this Plan requires read barriers on reference types. */
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceReadBarrier() { return false; }
&lt;br&gt;+ &amp;nbsp;/** @return True of this Plan requires read barriers on object references. */
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True if this Plan requires static write barriers on reference types. */
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceStaticWriteBarrier() { return false;}
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires non-heap write barriers on object references. */
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceNonHeapWriteBarrier() { return false;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @return True if this Plan requires static read barriers on reference types. */
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceStaticReadBarrier() { return false; }
&lt;br&gt;+ &amp;nbsp;/** @return True if this Plan requires non-heap read barriers on object references. */
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceNonHeapReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires linear scanning. */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean needsLinearScan() { return org.mmtk.utility.Constants.SUPPORT_CARD_SCANNING;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/Gen.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/Gen.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/Gen.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -56,7 +56,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected static final float MATURE_FRACTION = 0.5f; // est yield
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static final float WORST_CASE_COPY_EXPANSION = 1.5f; // worst case for addition of one word overhead due to address based hashing
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean IGNORE_REMSETS = false;
&lt;br&gt;- &amp;nbsp;public static final boolean USE_STATIC_WRITE_BARRIER = false;
&lt;br&gt;+ &amp;nbsp;public static final boolean USE_NON_HEAP_OBJECT_REFERENCE_WRITE_BARRIER = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean USE_OBJECT_BARRIER_FOR_AASTORE = false; // choose between slot and object barriers
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean USE_OBJECT_BARRIER_FOR_PUTFIELD = false; // choose between slot and object barriers
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean USE_OBJECT_BARRIER = USE_OBJECT_BARRIER_FOR_AASTORE || USE_OBJECT_BARRIER_FOR_PUTFIELD;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenCollector.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenCollector.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenCollector.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -95,7 +95,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (phaseId == StopTheWorld.ROOTS) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.scanning.computeGlobalRoots(getCurrentTrace());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!Gen.USE_STATIC_WRITE_BARRIER || global().traceFullHeap()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!Gen.USE_NON_HEAP_OBJECT_REFERENCE_WRITE_BARRIER || global().traceFullHeap()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.scanning.computeStaticRoots(getCurrentTrace());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (Plan.SCAN_BOOT_IMAGE &amp;&amp; global().traceFullHeap()) {
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -46,11 +46,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this plan requires a write barrier */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceWriteBarrier() { return true; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return true; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this plan requires a static barrier */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceStaticWriteBarrier() { return Gen.USE_STATIC_WRITE_BARRIER; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceNonHeapWriteBarrier() { return Gen.USE_NON_HEAP_OBJECT_REFERENCE_WRITE_BARRIER; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return The specialized scan methods required */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenMutator.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -175,11 +175,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The mode of the store (eg putfield, putstatic etc)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceWrite(ObjectReference src, Address slot,
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceWrite(ObjectReference src, Address slot,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference tgt, Word metaDataA,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fastPath(src, slot, tgt, mode);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;VM.barriers.referenceWrite(src, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;VM.barriers.objectReferenceWrite(src, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -216,10 +216,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB A value that assists the host VM in creating a store
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceNonHeapWrite(Address slot, ObjectReference tgt,
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceNonHeapWrite(Address slot, ObjectReference tgt,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fastPath(slot, tgt);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;VM.barriers.referenceWrite(slot, tgt, metaDataA, metaDataB);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;VM.barriers.objectReferenceWrite(slot, tgt, metaDataA, metaDataB);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -242,9 +242,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the swap was successful.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public boolean referenceTryCompareAndSwap(ObjectReference src, Address slot, ObjectReference old, ObjectReference tgt,
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceTryCompareAndSwap(ObjectReference src, Address slot, ObjectReference old, ObjectReference tgt,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;boolean result = VM.barriers.referenceTryCompareAndSwap(src, old, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;boolean result = VM.barriers.objectReferenceTryCompareAndSwap(src, old, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (result)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fastPath(src, slot, tgt, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;@@ -272,7 +272,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final boolean referenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;+ &amp;nbsp;public final boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference dst, Offset dstOffset,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int bytes) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// We can ignore when src is in old space, right?
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedConstraints.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedConstraints.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -24,11 +24,11 @@
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public class PoisonedConstraints extends MSConstraints {
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceWriteBarrier() { return true; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return true; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceReadBarrier() { return true; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceReadBarrier() { return true; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceStaticWriteBarrier() { return false; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceNonHeapWriteBarrier() { return false; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceStaticReadBarrier() { return false; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceNonHeapReadBarrier() { return false; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedMutator.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -50,7 +50,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public void referenceWrite(ObjectReference src, Address slot, ObjectReference tgt, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp;public void objectReferenceWrite(ObjectReference src, Address slot, ObjectReference tgt, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;VM.barriers.wordWrite(src, Poisoned.poison(tgt), metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -72,7 +72,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the swap was successful.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean referenceTryCompareAndSwap(ObjectReference src, Address slot, ObjectReference old, ObjectReference tgt,
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceTryCompareAndSwap(ObjectReference src, Address slot, ObjectReference old, ObjectReference tgt,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return VM.barriers.wordTryCompareAndSwap(src, Poisoned.poison(old), Poisoned.poison(tgt), metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -96,7 +96,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean referenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// TODO: Currently, read barriers implies that this is never used, perhaps
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// &amp;nbsp; &amp;nbsp; &amp;nbsp; we might want to use it sometime anyway?
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(false);
&lt;br&gt;@@ -117,7 +117,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public ObjectReference referenceRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;+ &amp;nbsp;public ObjectReference objectReferenceRead(ObjectReference src, Address slot, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return Poisoned.depoison(VM.barriers.wordRead(src, metaDataA, metaDataB, mode));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseConstraints.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseConstraints.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -30,7 +30,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public int gcHeaderWords() { return RCHeader.GC_HEADER_WORDS_REQUIRED; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceWriteBarrier() { return true; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return true; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public int maxNonLOSDefaultAllocBytes() { return MAX_FREELIST_OBJECT_BYTES; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseMutator.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseMutator.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -238,13 +238,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the store occurred
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public void referenceWrite(ObjectReference src, Address slot,
&lt;br&gt;+ &amp;nbsp;public void objectReferenceWrite(ObjectReference src, Address slot,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ObjectReference tgt, Word metaDataA,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (RCHeader.logRequired(src)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;coalescingWriteBarrierSlow(src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;VM.barriers.referenceWrite(src,tgt,metaDataA, metaDataB, mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;VM.barriers.objectReferenceWrite(src,tgt,metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -265,13 +265,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the swap was successful.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public boolean referenceTryCompareAndSwap(ObjectReference src, Address slot,
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceTryCompareAndSwap(ObjectReference src, Address slot,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ObjectReference old, ObjectReference tgt, Word metaDataA,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (RCHeader.logRequired(src)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;coalescingWriteBarrierSlow(src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return VM.barriers.referenceTryCompareAndSwap(src,old,tgt,metaDataA,metaDataB,mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return VM.barriers.objectReferenceTryCompareAndSwap(src,old,tgt,metaDataA,metaDataB,mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -293,7 +293,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public boolean referenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (RCHeader.logRequired(dst)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;coalescingWriteBarrierSlow(dst);
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceConstraints.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceConstraints.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -22,7 +22,7 @@
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public class GCTraceConstraints extends SSConstraints {
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceWriteBarrier() { return true; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return true; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public boolean generateGCTrace() { return true; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceMutator.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceMutator.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -89,12 +89,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The mode of the store (eg putfield, putstatic etc)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceWrite(ObjectReference src, Address slot,
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceWrite(ObjectReference src, Address slot,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference tgt, Word metaDataA,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TraceGenerator.processPointerUpdate(mode == INSTANCE_FIELD,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src, slot, tgt);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;VM.barriers.referenceWrite(src, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;VM.barriers.objectReferenceWrite(src, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -115,10 +115,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the swap was successful.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public boolean referenceTryCompareAndSwap(ObjectReference src, Address slot,
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceTryCompareAndSwap(ObjectReference src, Address slot,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference old, ObjectReference tgt, Word metaDataA,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataB, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;boolean result = VM.barriers.referenceTryCompareAndSwap(src, old, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;boolean result = VM.barriers.objectReferenceTryCompareAndSwap(src, old, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (result) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TraceGenerator.processPointerUpdate(mode == INSTANCE_FIELD, src, slot, tgt);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -143,7 +143,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the update was performed by the barrier, false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public boolean referenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;+ &amp;nbsp;public boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* These names seem backwards, but are defined to be compatable with the
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * previous writeBarrier method. */
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixConstraints.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixConstraints.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -32,7 +32,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this plan requires a write barrier */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceWriteBarrier() { return true; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return true; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires a header bit for object logging */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixMutator.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixMutator.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -80,11 +80,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The mode of the store (eg putfield, putstatic etc)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceWrite(ObjectReference src, Address slot,
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceWrite(ObjectReference src, Address slot,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference tgt, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (HeaderByte.isUnlogged(src))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logSource(src);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;VM.barriers.referenceWrite(src, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;VM.barriers.objectReferenceWrite(src, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -109,7 +109,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final boolean referenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;+ &amp;nbsp;public final boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (HeaderByte.isUnlogged(src))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logSource(src);
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSConstraints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSConstraints.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSConstraints.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -32,7 +32,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this plan requires a write barrier */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp;public boolean needsReferenceWriteBarrier() { return true; }
&lt;br&gt;+ &amp;nbsp;public boolean needsObjectReferenceWriteBarrier() { return true; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** @return True if this Plan requires a header bit for object logging */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSMutator.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSMutator.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSMutator.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -81,11 +81,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The mode of the store (eg putfield, putstatic etc)
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceWrite(ObjectReference src, Address slot,
&lt;br&gt;+ &amp;nbsp;public final void objectReferenceWrite(ObjectReference src, Address slot,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference tgt, Word metaDataA, Word metaDataB, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (HeaderByte.isUnlogged(src))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logSource(src);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;VM.barriers.referenceWrite(src, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;VM.barriers.objectReferenceWrite(src, tgt, metaDataA, metaDataB, mode);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -110,7 +110,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final boolean referenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;+ &amp;nbsp;public final boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference dst, Offset dstOffset, int bytes) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (HeaderByte.isUnlogged(src))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logSource(src);
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Map.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Map.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Map.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -97,7 +97,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions.fail(&amp;quot;exiting&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;descriptorMap[index] = descriptor;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.barriers.referenceArrayStoreNoGCBarrier(spaceMap, index, space);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.barriers.objectArrayStoreNoGCBarrier(spaceMap, index, space);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;e = e.plus(Space.BYTES_IN_CHUNK);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -208,7 +208,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;totalAvailableDiscontiguousChunks += chunks;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for (int offset = 0; offset &amp;lt; chunks; offset++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;descriptorMap[chunk + offset] = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.barriers.referenceArrayStoreNoGCBarrier(spaceMap, chunk + offset, null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.barriers.objectArrayStoreNoGCBarrier(spaceMap, chunk + offset, null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;linkageMap[chunk + offset] = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return chunks;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/vm/Barriers.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -18,7 +18,7 @@
&lt;br&gt;&amp;nbsp;@Uninterruptible
&lt;br&gt;&amp;nbsp;public abstract class Barriers {
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual write of the write barrier.
&lt;br&gt;+ &amp;nbsp; * Perform the actual write of an object reference write barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;@@ -26,10 +26,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract void referenceWrite(ObjectReference ref, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+ &amp;nbsp;public abstract void objectReferenceWrite(ObjectReference ref, ObjectReference target, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public abstract ObjectReference objectReferenceRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Perform the actual write of the non-heap write barrier. &amp;nbsp;This is
&lt;br&gt;&amp;nbsp; &amp;nbsp; * used when the store is not to an object, but to a non-heap location
&lt;br&gt;&amp;nbsp; &amp;nbsp; * such as statics or the stack.
&lt;br&gt;@@ -39,8 +49,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract void referenceWrite(Address slot, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB);
&lt;br&gt;+ &amp;nbsp;public abstract void objectReferenceWrite(Address slot, ObjectReference target, Word metaDataA, Word metaDataB);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Atomically write a reference field of an object or array and return
&lt;br&gt;@@ -53,8 +62,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract ObjectReference referenceAtomicWrite(ObjectReference ref, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+ &amp;nbsp;public abstract ObjectReference objectReferenceAtomicWrite(ObjectReference ref, ObjectReference target, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Attempt an atomic compare and exchange in a write barrier sequence.
&lt;br&gt;@@ -67,23 +75,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract boolean referenceTryCompareAndSwap(ObjectReference ref, ObjectReference old, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+ &amp;nbsp;public abstract boolean objectReferenceTryCompareAndSwap(ObjectReference ref, ObjectReference old, ObjectReference target, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;- &amp;nbsp; * @param metaDataA Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;- &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;- &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;- &amp;nbsp; * @return the read value
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract ObjectReference referenceRead(ObjectReference ref,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Perform the actual write of the write barrier, writing the value as a raw Word.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;@@ -92,8 +86,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param metaDataB Opaque, VM-specific, meta-data identifying the slot
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract void wordWrite(ObjectReference ref, Word target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+ &amp;nbsp;public abstract void wordWrite(ObjectReference ref, Word target, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Atomically write a reference field of an object or array and return
&lt;br&gt;@@ -106,8 +99,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The raw value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract Word wordAtomicWrite(ObjectReference ref, Word rawTarget,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+ &amp;nbsp;public abstract Word wordAtomicWrite(ObjectReference ref, Word rawTarget, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Attempt an atomic compare and exchange in a write barrier sequence.
&lt;br&gt;@@ -120,8 +112,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract boolean wordTryCompareAndSwap(ObjectReference ref, Word old, Word target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+ &amp;nbsp;public abstract boolean wordTryCompareAndSwap(ObjectReference ref, Word old, Word target, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Perform the actual read of the read barrier, returning the value as a raw Word.
&lt;br&gt;@@ -132,8 +123,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return the read value
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract Word wordRead(ObjectReference ref,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;+ &amp;nbsp;public abstract Word wordRead(ObjectReference ref, Word metaDataA, Word metaDataB, int mode);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Sets an element of an object array without invoking any write
&lt;br&gt;@@ -145,6 +135,5 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param index the index of the element to set
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param value the new value for the element
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public abstract void referenceArrayStoreNoGCBarrier(Object [] dst, int index, Object value);
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp;public abstract void objectArrayStoreNoGCBarrier(Object [] dst, int index, Object value);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/Services.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/Services.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/Services.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -337,8 +337,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static void setArrayUninterruptible(Object[] dst, int index, Object value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (VM.runningVM) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (Barriers.NEEDS_REFERENCE_ASTORE_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.referenceArrayWrite(dst, index, value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (Barriers.NEEDS_OBJECT_ASTORE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectArrayWrite(dst, index, value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(dst, Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS), value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMArray.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMArray.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMArray.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -1025,9 +1025,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset dstOffset = Offset.fromIntZeroExtend(dstIdx &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int bytes = len &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (!NEEDS_REFERENCE_ALOAD_BARRIER &amp;&amp; ((src != dst) || loToHi)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!NEEDS_REFERENCE_ASTORE_BARRIER ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;!Barriers.referenceBulkCopy(src, srcOffset, dst, dstOffset, bytes)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!NEEDS_OBJECT_ALOAD_BARRIER &amp;&amp; ((src != dst) || loToHi)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!NEEDS_OBJECT_ASTORE_BARRIER ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;!Barriers.objectBulkCopy(src, srcOffset, dst, dstOffset, bytes)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Memory.alignedWordCopy(Magic.objectAsAddress(dst).plus(dstOffset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.objectAsAddress(src).plus(srcOffset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bytes);
&lt;br&gt;@@ -1046,13 +1046,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// perform the copy
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (len-- != 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object value;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETFIELD_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = Barriers.referenceArrayRead(src, srcOffset.toInt() &amp;gt;&amp;gt; LOG_BYTES_IN_ADDRESS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = Barriers.objectArrayRead(src, srcOffset.toInt() &amp;gt;&amp;gt; LOG_BYTES_IN_ADDRESS);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = Magic.getObjectAtOffset(src, srcOffset);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTFIELD_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.referenceArrayWrite(dst, dstOffset.toInt() &amp;gt;&amp;gt; LOG_BYTES_IN_ADDRESS, value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectArrayWrite(dst, dstOffset.toInt() &amp;gt;&amp;gt; LOG_BYTES_IN_ADDRESS, value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(dst, dstOffset, value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMField.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMField.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/classloader/RVMField.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -295,14 +295,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public Object getObjectValueUnchecked(Object obj) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (isStatic()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETSTATIC_BARRIER &amp;&amp; !isUntraced()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Barriers.referenceNonHeapRead(getOffset(), getId());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETSTATIC_BARRIER &amp;&amp; !isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Barriers.objectStaticRead(getOffset(), getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Statics.getSlotContentsAsObject(getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETFIELD_BARRIER &amp;&amp; !isUntraced()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Barriers.referenceFieldRead(obj, getOffset(), getId());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER &amp;&amp; !isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Barriers.objectFieldRead(obj, getOffset(), getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Magic.getObjectAtOffset(obj, getOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -390,14 +390,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void setObjectValueUnchecked(Object obj, Object ref) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (isStatic()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTSTATIC_BARRIER &amp;&amp; !isUntraced()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.referenceNonHeapWrite(ref, getOffset(), getId());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTSTATIC_BARRIER &amp;&amp; !isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectStaticWrite(ref, getOffset(), getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Statics.setSlotContents(getOffset(), ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTFIELD_BARRIER &amp;&amp; !isUntraced()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.referenceFieldWrite(obj, ref, getOffset(), getId());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER &amp;&amp; !isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectFieldWrite(obj, ref, getOffset(), getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(obj, getOffset(), ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/Barriers.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -52,7 +52,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 4);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;genNullCheck(asm, T0);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceFieldWriteBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectFieldWriteBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -69,7 +69,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 4);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;genNullCheck(asm, T0);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceFieldWriteBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectFieldWriteBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutstaticBarrier(Assembler asm, GPR reg, int locationMetadata) {
&lt;br&gt;@@ -78,7 +78,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(reg); // offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 3);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceNonHeapWriteBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectNonHeapWriteBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compilePutstaticBarrierImm(Assembler asm, Offset fieldOffset, int locationMetadata) {
&lt;br&gt;@@ -86,14 +86,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(fieldOffset.toInt());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 3);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceNonHeapWriteBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectNonHeapWriteBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;static void compileArrayLoadBarrier(Assembler asm, boolean pushResult) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// on entry java stack contains ...|target_array_ref|array_index|
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// SP -&amp;gt; index, SP+4 -&amp;gt; target_ref
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 2);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceArrayReadBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectArrayReadBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (pushResult) asm.emitPUSH_Reg(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -104,7 +104,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 3);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;genNullCheck(asm, T0);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceFieldReadBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectFieldReadBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -113,7 +113,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 3);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;genNullCheck(asm, T0);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceFieldReadBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectFieldReadBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -121,7 +121,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(reg);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 2);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceNonHeapReadBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectNonHeapReadBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -129,7 +129,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(fieldOffset.toInt());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(locationMetadata);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;BaselineCompilerImpl.genParameterRegisterLoad(asm, 2);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.referenceNonHeapReadBarrierMethod.getOffset()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.objectNonHeapReadBarrierMethod.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(T0);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -576,7 +576,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPOP_Reg(T0); // T0 is array index
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPOP_Reg(T1); // T1 is array ref
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;genBoundsCheck(asm, T0, T1); // T0 is index, T1 is address of array
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_ALOAD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// rewind 2 args on stack
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(T1); // T1 is array ref
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Reg(T0); // T0 is array index
&lt;br&gt;@@ -2582,7 +2582,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected final void emit_unresolved_getstatic(FieldReference fieldRef) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;emitDynamicLinkingSequence(asm, T0, fieldRef, true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETSTATIC_BARRIER &amp;&amp; !fieldRef.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETSTATIC_BARRIER &amp;&amp; !fieldRef.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileGetstaticBarrier(asm, T0, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -2616,7 +2616,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected final void emit_resolved_getstatic(FieldReference fieldRef) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RVMField field = fieldRef.peekResolvedField();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset fieldOffset = field.getOffset();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETSTATIC_BARRIER &amp;&amp; !fieldRef.getFieldContentsType().isPrimitiveType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETSTATIC_BARRIER &amp;&amp; !fieldRef.getFieldContentsType().isPrimitiveType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileGetstaticBarrierImm(asm, fieldOffset, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -2648,7 +2648,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected final void emit_unresolved_putstatic(FieldReference fieldRef) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;emitDynamicLinkingSequence(asm, T0, fieldRef, true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTSTATIC_BARRIER &amp;&amp; fieldRef.getFieldContentsType().isReferenceType()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTSTATIC_BARRIER &amp;&amp; fieldRef.getFieldContentsType().isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compilePutstaticBarrier(asm, T0, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fieldRef.getSize() &amp;lt;= BYTES_IN_INT) { // field is one word
&lt;br&gt;@@ -2681,7 +2681,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected final void emit_resolved_putstatic(FieldReference fieldRef) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RVMField field = fieldRef.peekResolvedField();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset fieldOffset = field.getOffset();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTSTATIC_BARRIER &amp;&amp; field.isReferenceType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTSTATIC_BARRIER &amp;&amp; field.isReferenceType() &amp;&amp; !field.isUntraced()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compilePutstaticBarrierImm(asm, fieldOffset, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (field.getSize() &amp;lt;= BYTES_IN_INT) { // field is one word
&lt;br&gt;@@ -2716,7 +2716,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;emitDynamicLinkingSequence(asm, T0, fieldRef, true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (fieldType.isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 32/64bit reference load
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileGetfieldBarrier(asm, T0, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPOP_Reg(S0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// S0 is object reference
&lt;br&gt;@@ -2785,7 +2785,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset fieldOffset = field.getOffset();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (field.isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 32/64bit reference load
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETFIELD_BARRIER &amp;&amp; !field.isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER &amp;&amp; !field.isUntraced()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileGetfieldBarrierImm(asm, fieldOffset, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPOP_Reg(T0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // T0 is object reference
&lt;br&gt;@@ -2855,7 +2855,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;emitDynamicLinkingSequence(asm, T0, fieldRef, true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (fieldType.isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 32/64bit reference store
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compilePutfieldBarrier(asm, T0, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPOP_Reg(T1); &amp;nbsp;// T1 is the value to be stored
&lt;br&gt;@@ -2926,7 +2926,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Offset fieldOffset = field.getOffset();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (field.isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 32/64bit reference store
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTFIELD_BARRIER &amp;&amp; !field.isUntraced()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER &amp;&amp; !field.isUntraced()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compilePutfieldBarrierImm(asm, fieldOffset, fieldRef.getId());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPOP_Reg(T0); &amp;nbsp;// T0 is the value to be stored
&lt;br&gt;@@ -3791,7 +3791,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!VM.runningTool &amp;&amp; ((BaselineCompiledMethod) compiledMethod).hasCounterArray()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// use (nonvolatile) EBX to hold base of this method's counter array
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_ALOAD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Abs(Magic.getTocPointer().plus(Entrypoints.edgeCountersField.getOffset()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asm.emitPUSH_Imm(getEdgeCounterIndex());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.compileArrayLoadBarrier(asm, false);
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -372,8 +372,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case REF_ASTORE_opcode: {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_ASTORE_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.referenceArrayWriteBarrierMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_ASTORE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectArrayWriteBarrierMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Instruction wb =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Call.create3(CALL,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; null,
&lt;br&gt;@@ -395,8 +395,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case REF_ALOAD_opcode: {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_ALOAD_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.referenceArrayReadBarrierMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_ALOAD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectArrayReadBarrierMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Instruction rb =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Call.create2(CALL,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ALoad.getClearResult(inst),
&lt;br&gt;@@ -415,13 +415,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case PUTFIELD_opcode: {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTFIELD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LocationOperand loc = PutField.getLocation(inst);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FieldReference fieldRef = loc.getFieldRef();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!fieldRef.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMField field = fieldRef.peekResolvedField();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (field == null || !field.isUntraced()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.referenceFieldWriteBarrierMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectFieldWriteBarrierMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Instruction wb =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Call.create4(CALL,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; null,
&lt;br&gt;@@ -446,13 +446,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case GETFIELD_opcode: {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETFIELD_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LocationOperand loc = GetField.getLocation(inst);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FieldReference fieldRef = loc.getFieldRef();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (GetField.getResult(inst).getType().isReferenceType()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMField field = fieldRef.peekResolvedField();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (field == null || !field.isUntraced()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.referenceFieldReadBarrierMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectFieldReadBarrierMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Instruction rb =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Call.create3(CALL,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetField.getClearResult(inst),
&lt;br&gt;@@ -474,11 +474,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case PUTSTATIC_opcode: {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_PUTSTATIC_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_PUTSTATIC_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LocationOperand loc = PutStatic.getLocation(inst);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FieldReference field = loc.getFieldRef();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!field.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.referenceNonHeapWriteBarrierMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectNonHeapWriteBarrierMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Instruction wb =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Call.create3(CALL,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; null,
&lt;br&gt;@@ -500,11 +500,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case GETSTATIC_opcode: {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GETSTATIC_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GETSTATIC_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LocationOperand loc = GetStatic.getLocation(inst);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FieldReference field = loc.getFieldRef();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!field.getFieldContentsType().isPrimitiveType()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.referenceNonHeapReadBarrierMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RVMMethod target = Entrypoints.objectNonHeapReadBarrierMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Instruction rb =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Call.create2(CALL,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetStatic.getClearResult(inst),
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -44,30 +44,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the garbage collector requires write barriers on reference putfield, arraystore or modifycheck */
&lt;br&gt;- &amp;nbsp;private static final boolean NEEDS_REFERENCE_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsReferenceWriteBarrier();
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_OBJECT_GC_WRITE_BARRIER &amp;nbsp; &amp;nbsp; = Selected.Constraints.get().needsObjectReferenceWriteBarrier();
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires write barriers on reference putfield */
&lt;br&gt;- &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_REFERENCE_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_REFERENCE_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_OBJECT_PUTFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_OBJECT_GC_WRITE_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires write barriers on reference arraystore */
&lt;br&gt;- &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_REFERENCE_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_REFERENCE_GC_WRITE_BARRIER;
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_OBJECT_ASTORE_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; = NEEDS_OBJECT_GC_WRITE_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the garbage collector requires read barriers on reference getfield or arrayload */
&lt;br&gt;- &amp;nbsp;private static final boolean NEEDS_REFERENCE_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsReferenceReadBarrier();
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_OBJECT_GC_READ_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp;= Selected.Constraints.get().needsObjectReferenceReadBarrier();
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on reference getfield */
&lt;br&gt;- &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_REFERENCE_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_REFERENCE_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_OBJECT_GETFIELD_BARRIER &amp;nbsp; &amp;nbsp; = NEEDS_OBJECT_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** True if the VM requires read barriers on reference arrayload */
&lt;br&gt;- &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_REFERENCE_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_REFERENCE_GC_READ_BARRIER;
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_OBJECT_ALOAD_BARRIER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NEEDS_OBJECT_GC_READ_BARRIER;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** True if the selected plan requires write barriers on reference putstatic */
&lt;br&gt;- &amp;nbsp;private static final boolean NEEDS_REFERENCE_GC_PUTSTATIC_BARRIER = Selected.Constraints.get().needsReferenceStaticWriteBarrier();
&lt;br&gt;- &amp;nbsp;/** True if the selected plan requires write barriers on reference putstatic */
&lt;br&gt;- &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_REFERENCE_PUTSTATIC_BARRIER &amp;nbsp; &amp;nbsp;= NEEDS_REFERENCE_GC_PUTSTATIC_BARRIER;
&lt;br&gt;- &amp;nbsp;/** True if the selected plan requires read barriers on reference getstatic */
&lt;br&gt;- &amp;nbsp;private static final boolean NEEDS_REFERENCE_GC_GETSTATIC_BARRIER = Selected.Constraints.get().needsReferenceStaticReadBarrier();
&lt;br&gt;- &amp;nbsp;/** True if the selected plan requires read barriers on reference getstatic */
&lt;br&gt;- &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_REFERENCE_GETSTATIC_BARRIER &amp;nbsp; &amp;nbsp;= NEEDS_REFERENCE_GC_GETSTATIC_BARRIER;
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for writes of references into fields of instances (ie putfield).
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into fields of instances (ie putfield).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref the object which is the subject of the putfield
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param value the new value for the field
&lt;br&gt;@@ -76,10 +66,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void referenceFieldWrite(Object ref, Object value, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void objectFieldWrite(Object ref, Object value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().referenceWrite(src,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().objectReferenceWrite(src,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src.toAddress().plus(offset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference.fromObject(value),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;@@ -90,7 +80,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for writes of references into arrays (ie astore).
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects into arrays (ie astore).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref the array which is the subject of the astore
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param index the index into the array where the new reference
&lt;br&gt;@@ -100,11 +90,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void referenceArrayWrite(Object ref, int index, Object value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GC_WRITE_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void objectArrayWrite(Object ref, int index, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().referenceWrite(array,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().objectReferenceWrite(array,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array.toAddress().plus(offset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference.fromObject(value),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;@@ -115,7 +105,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for loads of references from fields of instances (ie getfield).
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of instances (ie getfield).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref the object which is the subject of the getfield
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param offset the offset of the field to be read
&lt;br&gt;@@ -124,10 +114,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static Object referenceFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static Object objectFieldRead(Object ref, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().referenceRead(src,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().objectReferenceRead(src,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src.toAddress().plus(offset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.fromIntZeroExtend(locationMetadata),
&lt;br&gt;@@ -138,7 +128,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for loads of references from fields of arrays (ie aload).
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from fields of arrays (ie aload).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref the array containing the reference.
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param index the index into the array were the reference resides.
&lt;br&gt;@@ -146,11 +136,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static Object referenceArrayRead(Object ref, int index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static Object objectArrayRead(Object ref, int index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference array = ObjectReference.fromObject(ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Offset offset = Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; MemoryManagerConstants.LOG_BYTES_IN_ADDRESS);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().referenceRead(array,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().objectReferenceRead(array,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array.toAddress().plus(offset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.zero(), // don't know metadata
&lt;br&gt;@@ -161,7 +151,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for a copy (i.e. in an array copy).
&lt;br&gt;+ &amp;nbsp; * Barrier for a bulk copy of objects (i.e. in an array copy).
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param src &amp;nbsp; &amp;nbsp; &amp;nbsp; The source object
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param srcOffset The offset of the first source address, in
&lt;br&gt;@@ -176,9 +166,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * left to the caller (always false in this case).
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean referenceBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GC_WRITE_BARRIER || NEEDS_REFERENCE_GC_READ_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().referenceBulkCopy(ObjectReference.fromObject(src),
&lt;br&gt;+ &amp;nbsp;public static boolean objectBulkCopy(Object src, Offset srcOffset, Object tgt, Offset tgtOffset, int bytes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().objectReferenceBulkCopy(ObjectReference.fromObject(src),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;srcOffset,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference.fromObject(tgt),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tgtOffset,
&lt;br&gt;@@ -188,48 +178,58 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/** True if the selected plan requires write barriers on reference putstatic */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_OBJECT_GC_PUTSTATIC_BARRIER = Selected.Constraints.get().needsObjectReferenceNonHeapWriteBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the selected plan requires write barriers on reference putstatic */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_OBJECT_PUTSTATIC_BARRIER &amp;nbsp; &amp;nbsp;= NEEDS_OBJECT_GC_PUTSTATIC_BARRIER;
&lt;br&gt;+ &amp;nbsp;/** True if the selected plan requires read barriers on reference getstatic */
&lt;br&gt;+ &amp;nbsp;private static final boolean NEEDS_OBJECT_GC_GETSTATIC_BARRIER = Selected.Constraints.get().needsObjectReferenceNonHeapReadBarrier();
&lt;br&gt;+ &amp;nbsp;/** True if the selected plan requires read barriers on reference getstatic */
&lt;br&gt;+ &amp;nbsp;public static final boolean &amp;nbsp;NEEDS_OBJECT_GETSTATIC_BARRIER &amp;nbsp; &amp;nbsp;= NEEDS_OBJECT_GC_GETSTATIC_BARRIER;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for loads of references from non-heap locations (ie getstatic)
&lt;br&gt;+ &amp;nbsp; * Barrier for writes of objects from statics (eg putstatic)
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param value the new value to be stored
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;- &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;- &amp;nbsp; * @return the value read from the field
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static Object referenceNonHeapRead(Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GC_GETSTATIC_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static void objectStaticWrite(Object value, Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_PUTSTATIC_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(Magic.getJTOC());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().referenceNonHeapRead(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src.toAddress().plus(offset),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().objectReferenceNonHeapWrite(src.toAddress().plus(offset),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference.fromObject(value),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.fromIntZeroExtend(locationMetadata)).toObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.fromIntZeroExtend(locationMetadata));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Barrier for writes of references to non-heap locations (eg statics)
&lt;br&gt;+ &amp;nbsp; * Barrier for loads of objects from statics (ie getstatic)
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param value the new value to be stored
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param offset the offset of the field to be modified
&lt;br&gt;- &amp;nbsp; * @param locationMetadata an int that encodes the source location being modified
&lt;br&gt;+ &amp;nbsp; * @param locationMetadata an int that encodes the source location being read
&lt;br&gt;+ &amp;nbsp; * @return the value read from the field
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Entrypoint
&lt;br&gt;- &amp;nbsp;public static void referenceNonHeapWrite(Object value, Offset offset, int locationMetadata) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GC_PUTSTATIC_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static Object objectStaticRead(Offset offset, int locationMetadata) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_GETSTATIC_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(Magic.getJTOC());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Selected.Mutator.get().referenceNonHeapWrite(src.toAddress().plus(offset),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference.fromObject(value),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().objectReferenceNonHeapRead(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src.toAddress().plus(offset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset.toWord(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.fromIntZeroExtend(locationMetadata));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Word.fromIntZeroExtend(locationMetadata)).toObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (VM.VERIFY_ASSERTIONS)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.assertions._assert(false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Barrier for conditional compare and exchange of reference fields.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;@@ -239,10 +239,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param value the new value for the field
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public static boolean referenceTryCompareAndSwap(Object ref, Offset offset, Object old, Object value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (NEEDS_REFERENCE_GC_WRITE_BARRIER || NEEDS_REFERENCE_GC_READ_BARRIER) {
&lt;br&gt;+ &amp;nbsp;public static boolean objectTryCompareAndSwap(Object ref, Offset offset, Object old, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (NEEDS_OBJECT_GC_WRITE_BARRIER || NEEDS_OBJECT_GC_READ_BARRIER) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference src = ObjectReference.fromObject(ref);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().referenceTryCompareAndSwap(src,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Selected.Mutator.get().objectReferenceTryCompareAndSwap(src,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src.toAddress().plus(offset),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference.fromObject(old),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ObjectReference.fromObject(value),
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -106,7 +106,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Interruptible
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static void init() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(!Selected.Constraints.get().needsReferenceStaticReadBarrier());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.VerifyAssertions) VM._assert(!Selected.Constraints.get().needsObjectReferenceNonHeapReadBarrier());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;CollectorThread.init();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;org.jikesrvm.mm.mmtk.Collection.init();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/osr/ObjectHolder.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/osr/ObjectHolder.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/osr/ObjectHolder.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -93,8 +93,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.sysWriteln(&amp;quot;ObjectHolder cleanRefs&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/* refs[h] = null; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (Barriers.NEEDS_REFERENCE_ASTORE_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.referenceArrayWrite(refs, h, null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (Barriers.NEEDS_OBJECT_ASTORE_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectArrayWrite(refs, h, null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(refs, Offset.fromIntSignExtend(h &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS), null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Entrypoints.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -263,20 +263,21 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final RVMField synchronizedCounterField =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getField(org.jikesrvm.mm.mmtk.SynchronizedCounter.class, &amp;quot;count&amp;quot;, int.class);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;public static final NormalMethod referenceArrayWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;referenceArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;ILjava/lang/Object;)V&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final NormalMethod referenceFieldWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;referenceFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final NormalMethod referenceNonHeapWriteBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;referenceNonHeapWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final NormalMethod objectArrayWriteBarrierMethod =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectArrayWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;ILjava/lang/Object;)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final NormalMethod objectFieldWriteBarrierMethod =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectFieldWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;public static final NormalMethod referenceArrayReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;referenceArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final NormalMethod referenceFieldReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;referenceFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;- &amp;nbsp;public static final NormalMethod referenceNonHeapReadBarrierMethod =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;referenceNonHeapRead&amp;quot;, &amp;quot;(Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final NormalMethod objectArrayReadBarrierMethod =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectArrayRead&amp;quot;, &amp;quot;(Ljava/lang/Object;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final NormalMethod objectFieldReadBarrierMethod =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectFieldRead&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;public static final NormalMethod objectNonHeapWriteBarrierMethod =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectStaticWrite&amp;quot;, &amp;quot;(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V&amp;quot;);
&lt;br&gt;+ &amp;nbsp;public static final NormalMethod objectNonHeapReadBarrierMethod =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.Barriers.class, &amp;quot;objectStaticRead&amp;quot;, &amp;quot;(Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;&amp;quot;);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final NormalMethod modifyCheckMethod =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getMethod(org.jikesrvm.mm.mminterface.MemoryManager.class, &amp;quot;modifyCheck&amp;quot;, &amp;quot;(Ljava/lang/Object;)V&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Statics.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Statics.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/runtime/Statics.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -617,8 +617,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// happen as the fault would only ever occur when not running the
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// VM. We suppress the warning as we know the error can't happen.
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (VM.runningVM &amp;&amp; Barriers.NEEDS_REFERENCE_PUTSTATIC_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.referenceNonHeapWrite(object, offset, 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (VM.runningVM &amp;&amp; Barriers.NEEDS_OBJECT_PUTSTATIC_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Barriers.objectStaticWrite(object, offset, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setSlotContents(offset, Magic.objectAsAddress(object).toWord());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/rvm/src/org/jikesrvm/scheduler/Synchronization.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/rvm/src/org/jikesrvm/scheduler/Synchronization.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;+++ rvmroot/trunk/rvm/src/org/jikesrvm/scheduler/Synchronization.java	2009-09-18 03:57:39 UTC (rev 15782)
&lt;br&gt;@@ -93,8 +93,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static boolean tryCompareAndSwap(Object base, Offset offset, Object testValue, Object newValue) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (Barriers.NEEDS_REFERENCE_PUTFIELD_BARRIER) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return Barriers.referenceTryCompareAndSwap(base, offset, testValue, newValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (Barriers.NEEDS_OBJECT_PUTFIELD_BARRIER) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return Barriers.objectTryCompareAndSwap(base, offset, testValue, newValue);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object oldValue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry&amp;reg; Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9&amp;#45;12, 2009. Register now&amp;#33;
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconf&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25502772&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15782--rvmroot-trunk-tp25502772p25502772.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25502124</id>
	<title>SF.net SVN: jikesrvm:[15781] rvmroot/trunk/MMTk/src/org/mmtk/plan/ generational/Gen.java</title>
	<published>2009-09-17T19:15:19Z</published>
	<updated>2009-09-17T19:15:19Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15781
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15781&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15781&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-18 02:15:19 +0000 (Fri, 18 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Undo unintended change folded into r15772, which was supposed to be a semantic no-op
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/Gen.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/Gen.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/Gen.java	2009-09-16 12:13:01 UTC (rev 15780)
&lt;br&gt;+++ rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/Gen.java	2009-09-18 02:15:19 UTC (rev 15781)
&lt;br&gt;@@ -56,7 +56,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;protected static final float MATURE_FRACTION = 0.5f; // est yield
&lt;br&gt;&amp;nbsp; &amp;nbsp;private static final float WORST_CASE_COPY_EXPANSION = 1.5f; // worst case for addition of one word overhead due to address based hashing
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean IGNORE_REMSETS = false;
&lt;br&gt;- &amp;nbsp;public static final boolean USE_STATIC_WRITE_BARRIER = true;
&lt;br&gt;+ &amp;nbsp;public static final boolean USE_STATIC_WRITE_BARRIER = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean USE_OBJECT_BARRIER_FOR_AASTORE = false; // choose between slot and object barriers
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean USE_OBJECT_BARRIER_FOR_PUTFIELD = false; // choose between slot and object barriers
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final boolean USE_OBJECT_BARRIER = USE_OBJECT_BARRIER_FOR_AASTORE || USE_OBJECT_BARRIER_FOR_PUTFIELD;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;Come build with us! The BlackBerry&amp;reg; Developer Conference in SF, CA
&lt;br&gt;is the only developer event you need to attend this year. Jumpstart your
&lt;br&gt;developing skills, take BlackBerry mobile applications to market and stay 
&lt;br&gt;ahead of the curve. Join us from November 9&amp;#45;12, 2009. Register now&amp;#33;
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/devconf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/devconf&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Jikesrvm-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25502124&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jikesrvm-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SF.net-SVN%3A-jikesrvm%3A-15781--rvmroot-trunk-MMTk-src-org-mmtk-plan--generational-Gen.java-tp25502124p25502124.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25477588</id>
	<title>SF.net SVN: jikesrvm:[15780] rvmroot/trunk</title>
	<published>2009-09-16T05:13:01Z</published>
	<updated>2009-09-16T05:13:01Z</updated>
	<author>
		<name>steveb-oss</name>
	</author>
	<content type="html">Revision: 15780
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15780&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15780&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; steveb-oss
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2009-09-16 12:13:01 +0000 (Wed, 16 Sep 2009)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;Another step towards RVM-845
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/Mutator.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/PlanConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/generational/GenConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/poisoned/PoisonedConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/refcount/RCBaseConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/semispace/gctrace/GCTraceConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyimmix/StickyImmixConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/MMTk/src/org/mmtk/plan/stickyms/StickyMSConstraints.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/Barriers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; rvmroot/trunk/rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java
&lt;br&gt;&lt;br&gt;Modified: rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java
&lt;br&gt;===================================================================
&lt;br&gt;--- rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java	2009-09-09 16:10:08 UTC (rev 15779)
&lt;br&gt;+++ rvmroot/trunk/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Barriers.java	2009-09-16 12:13:01 UTC (rev 15780)
&lt;br&gt;@@ -24,16 +24,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Perform the actual write of the write barrier.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param location The index of the FieldReference
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceWrite(ObjectReference ref, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word offset, Word location, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(ref.toObject(), offset.toOffset(), target.toObject(), location.toInt());
&lt;br&gt;+ &amp;nbsp;public final void referenceWrite(ObjectReference objref, ObjectReference target, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Magic.setObjectAtOffset(objref.toObject(), offset.toOffset(), target.toObject(), location.toInt());
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -46,16 +45,50 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final void referenceWrite(Address slot, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word unusedA, Word unusedB) {
&lt;br&gt;+ &amp;nbsp;public final void referenceWrite(Address slot, ObjectReference target, Word unusedA, Word unusedB) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;slot.store(target);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Perform the actual read of the read barrier.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;+ &amp;nbsp; * @param location The index of the FieldReference
&lt;br&gt;+ &amp;nbsp; * @param mode The context in which the write is occurring
&lt;br&gt;+ &amp;nbsp; * @return the read value
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Inline
&lt;br&gt;+ &amp;nbsp;public final ObjectReference referenceRead(ObjectReference objref, Word offset, Word location, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ObjectReference.fromObject(Magic.getObjectAtOffset(objref.toObject(), offset.toOffset(), location.toInt()));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Sets an element of an object array without invoking any write
&lt;br&gt;+ &amp;nbsp; * barrier. &amp;nbsp;This method is called by the Map class to ensure
&lt;br&gt;+ &amp;nbsp; * potentially-allocation-triggering write barriers do not occur in
&lt;br&gt;+ &amp;nbsp; * allocation slow path code.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param dst the destination array
&lt;br&gt;+ &amp;nbsp; * @param index the index of the element to set
&lt;br&gt;+ &amp;nbsp; * @param value the new value for the element
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@UninterruptibleNoWarn
&lt;br&gt;+ &amp;nbsp;public final void referenceArrayStoreNoGCBarrier(Object[] dst, int index, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (org.jikesrvm.VM.runningVM) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Address base = ObjectReference.fromObject(dst).toAddress();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;Address slot = base.plus(Offset.fromIntZeroExtend(index &amp;lt;&amp;lt; LOG_BYTES_IN_ADDRESS));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;VM.activePlan.global().storeObjectReference(slot, ObjectReference.fromObject(value));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;dst[index] = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Atomically write a reference field of an object or array and return
&lt;br&gt;&amp;nbsp; &amp;nbsp; * the old value of the reference field.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param unused Unused
&lt;br&gt;@@ -63,9 +96,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return The value that was replaced by the write.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final ObjectReference referenceAtomicWrite(ObjectReference ref, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word offset, Word unused, int mode) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;Object obj = ref.toObject();
&lt;br&gt;+ &amp;nbsp;public final ObjectReference referenceAtomicWrite(ObjectReference objref, ObjectReference target, Word offset, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Object obj = objref.toObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object newObject = target.toObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object oldObject;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;@@ -77,7 +109,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Attempt an atomic compare and exchange in a write barrier sequence.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param ref The object that has the reference field
&lt;br&gt;+ &amp;nbsp; * @param objref The object that has the reference field
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param old The old reference to be swapped out
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param target The value that the slot will be updated to
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param offset The offset from the ref
&lt;br&gt;@@ -86,32 +118,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @return True if the compare and swap was successful
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;@Inline
&lt;br&gt;- &amp;nbsp;public final boolean referenceTryCompareAndSwap(ObjectReference ref, ObjectReference old, ObjectReference target,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Word offset, Word unused, int mode) {
&lt;br&gt;+ &amp;nbsp;public final boolean referenceTryCompareAndSwap(ObjectReference objref, ObjectReference old, ObjectReference target, Word offset, Word unused, int mode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object oldValue;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;do {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;