Index: build/configs/BaseAdaptiveGenMS_airavat.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_airavat.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_airavat.properties	(revision 282)
@@ -0,0 +1,20 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
+config.include.airavat.enabled=true
\ No newline at end of file
Index: build/configs/FastAdaptiveGenMS_airavat.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_airavat.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_airavat.properties	(revision 282)
@@ -0,0 +1,23 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
+config.include.airavat.enabled=true
\ No newline at end of file
Index: build/configs/FullAdaptiveGenMS_difcNoBarriers.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoSubsetChecks.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoSubsetChecks.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoSubsetChecks.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-subset-checks=true
Index: build/configs/FastAdaptiveGenMS_difcDynamicBarriers.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcDynamicBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcDynamicBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
Index: build/configs/FullAdaptiveGenMS_difc.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difc.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difc.properties	(revision 281)
@@ -0,0 +1,20 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
Index: build/configs/FastAdaptiveGenMS_difcNoLRENoIB.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoLRENoIB.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoLRENoIB.properties	(revision 281)
@@ -0,0 +1,23 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseAdaptiveGenMS_difcDynamicBarriersLibraries.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcDynamicBarriersLibraries.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcDynamicBarriersLibraries.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/create-configs.sh
===================================================================
--- build/configs/create-configs.sh	(revision 0)
+++ build/configs/create-configs.sh	(revision 281)
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+# DIFC: build-time options
+
+for i in {BaseBase,BaseAdaptive,FullAdaptive,FastAdaptive}{GenMS,MarkSweep}.properties
+do
+  OUT=`echo $i | sed s/.properties/_difcNoBarriers.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difc.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcLibraries.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.libraries=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcVerbose.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.verbose=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcProfile.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.profile=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoOptBarriers.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-opt-barriers=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoRedundancyElimination.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-redundancy-elimination=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoLateRedundancyElimination.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-late-redundancy-elimination=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoLRENoIB.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-late-redundancy-elimination=true >> $OUT
+  echo config.include.difc.no-inlined-barriers=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoReadOrWriteBarriers.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-read-or-write-barriers=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoRWBarrierContents.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-rw-barrier-contents=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoStaticOrAllocBarriers.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-static-or-alloc-barriers=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoInlinedBarriers.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-inlined-barriers=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoSlowPath.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-slow-path=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcNoSubsetChecks.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.no-subset-checks=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcDynamicBarriers.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.dynamic-barriers=true >> $OUT
+
+  OUT=`echo $i | sed s/.properties/_difcDynamicBarriersLibraries.properties/`
+  cp $i $OUT
+  echo config.include.difc.enabled=true >> $OUT
+  echo config.include.difc.barriers=true >> $OUT
+  echo config.include.difc.libraries=true >> $OUT
+
+done

Property changes on: build/configs/create-configs.sh
___________________________________________________________________
Name: svn:executable
   + *

Index: build/configs/FastAdaptiveGenMS_difcNoSlowPath.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoSlowPath.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoSlowPath.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-slow-path=true
Index: build/configs/FullAdaptiveMarkSweep_difcVerbose.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcVerbose.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcVerbose.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/FastAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/FullAdaptiveMarkSweep_difcDynamicBarriers.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcDynamicBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcDynamicBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
Index: build/configs/FullAdaptiveMarkSweep_difc.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difc.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difc.properties	(revision 281)
@@ -0,0 +1,20 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
Index: build/configs/BaseAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/BaseBaseGenMS_difcNoLRENoIB.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoLRENoIB.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoLRENoIB.properties	(revision 281)
@@ -0,0 +1,17 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseBaseGenMS_difcNoLateRedundancyElimination.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoLateRedundancyElimination.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoLateRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoOptBarriers.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoOptBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoOptBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-opt-barriers=true
Index: build/configs/FastAdaptiveGenMS_difcNoSubsetChecks.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoSubsetChecks.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoSubsetChecks.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-subset-checks=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoRedundancyElimination.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoRedundancyElimination.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-redundancy-elimination=true
Index: build/configs/FullAdaptiveGenMS_difcNoSubsetChecks.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoSubsetChecks.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoSubsetChecks.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-subset-checks=true
Index: build/configs/BaseBaseGenMS_airavat.properties
===================================================================
--- build/configs/BaseBaseGenMS_airavat.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_airavat.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.airavat.enabled=true
\ No newline at end of file
Index: build/configs/BaseAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-static-or-alloc-barriers=true
Index: build/configs/BaseBaseMarkSweep_difc.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difc.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difc.properties	(revision 281)
@@ -0,0 +1,15 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoSlowPath.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoSlowPath.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoSlowPath.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-slow-path=true
Index: build/configs/BaseAdaptiveGenMS_difcNoLRENoIB.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoLRENoIB.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoLRENoIB.properties	(revision 281)
@@ -0,0 +1,20 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseAdaptiveGenMS_difcNoOptBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoOptBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoOptBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-opt-barriers=true
Index: build/configs/FastAdaptiveGenMS_difcNoRWBarrierContents.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoRWBarrierContents.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoRWBarrierContents.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-rw-barrier-contents=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoInlinedBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoInlinedBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoInlinedBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoLRENoIB.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoLRENoIB.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoLRENoIB.properties	(revision 281)
@@ -0,0 +1,23 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseBaseMarkSweep_difcNoSlowPath.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoSlowPath.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoSlowPath.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-slow-path=true
Index: build/configs/BaseAdaptiveGenMS_difcProfile.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcProfile.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcProfile.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.profile=true
Index: build/configs/BaseAdaptiveMarkSweep_difcLibraries.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcLibraries.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcLibraries.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoOptBarriers.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoOptBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoOptBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-opt-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcNoInlinedBarriers.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoInlinedBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoInlinedBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcLibraries.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcLibraries.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcLibraries.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/BaseAdaptiveGenMS_difcNoBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoBarriers.properties	(revision 281)
@@ -0,0 +1,17 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
Index: build/configs/FullAdaptiveGenMS_difcNoReadOrWriteBarriers.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoReadOrWriteBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoReadOrWriteBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-read-or-write-barriers=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoSubsetChecks.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoSubsetChecks.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoSubsetChecks.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-subset-checks=true
Index: build/configs/FastAdaptiveMarkSweep_difcProfile.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcProfile.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcProfile.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.profile=true
Index: build/configs/BaseBaseMarkSweep_difcNoRWBarrierContents.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoRWBarrierContents.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoRWBarrierContents.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-rw-barrier-contents=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoBarriers.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoBarriers.properties	(revision 281)
@@ -0,0 +1,20 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
Index: build/configs/BaseAdaptiveGenMS_difc.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difc.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difc.properties	(revision 281)
@@ -0,0 +1,18 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoBarriers.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
Index: build/configs/FastAdaptiveGenMS_difcProfile.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcProfile.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcProfile.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.profile=true
Index: build/configs/BaseBaseMarkSweep_difcNoRedundancyElimination.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoRedundancyElimination.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-redundancy-elimination=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoRWBarrierContents.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoRWBarrierContents.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoRWBarrierContents.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-rw-barrier-contents=true
Index: build/configs/FastAdaptiveMarkSweep_difc.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difc.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difc.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
Index: build/configs/BaseBaseGenMS_difcDynamicBarriersLibraries.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcDynamicBarriersLibraries.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcDynamicBarriersLibraries.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/BaseBaseMarkSweep_difcNoLRENoIB.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoLRENoIB.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoLRENoIB.properties	(revision 281)
@@ -0,0 +1,17 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseAdaptiveMarkSweep_difcVerbose.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcVerbose.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcVerbose.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/BaseBaseMarkSweep_difcNoOptBarriers.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoOptBarriers.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoOptBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-opt-barriers=true
Index: build/configs/BaseBaseMarkSweep_difcNoStaticOrAllocBarriers.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoStaticOrAllocBarriers.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoStaticOrAllocBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-static-or-alloc-barriers=true
Index: build/configs/FastAdaptiveGenMS_difcNoInlinedBarriers.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoInlinedBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoInlinedBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseBaseGenMS_difcNoRedundancyElimination.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoRedundancyElimination.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-redundancy-elimination=true
Index: build/configs/FastAdaptiveGenMS_difcLibraries.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcLibraries.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcLibraries.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/FullAdaptiveGenMS_difcNoRWBarrierContents.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoRWBarrierContents.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoRWBarrierContents.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-rw-barrier-contents=true
Index: build/configs/BaseAdaptiveMarkSweep_difcDynamicBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcDynamicBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcDynamicBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
Index: build/configs/BaseAdaptiveMarkSweep_difc.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difc.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difc.properties	(revision 281)
@@ -0,0 +1,18 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
Index: build/configs/BaseBaseGenMS_difcNoStaticOrAllocBarriers.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoStaticOrAllocBarriers.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoStaticOrAllocBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-static-or-alloc-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcNoRedundancyElimination.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoRedundancyElimination.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-redundancy-elimination=true
Index: build/configs/BaseBaseGenMS_difcNoSlowPath.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoSlowPath.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoSlowPath.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-slow-path=true
Index: build/configs/FullAdaptiveMarkSweep_difcProfile.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcProfile.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcProfile.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.profile=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoOptBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoOptBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoOptBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-opt-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-static-or-alloc-barriers=true
Index: build/configs/BaseAdaptiveGenMS_difcNoSubsetChecks.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoSubsetChecks.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoSubsetChecks.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-subset-checks=true
Index: build/configs/BaseBaseGenMS_difcNoInlinedBarriers.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoInlinedBarriers.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoInlinedBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseBaseGenMS_difcLibraries.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcLibraries.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcLibraries.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/FastAdaptiveGenMS_difcNoBarriers.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoBarriers.properties	(revision 281)
@@ -0,0 +1,20 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-read-or-write-barriers=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoSubsetChecks.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoSubsetChecks.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoSubsetChecks.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-subset-checks=true
Index: build/configs/FastAdaptiveGenMS_difcDynamicBarriersLibraries.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcDynamicBarriersLibraries.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcDynamicBarriersLibraries.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/BaseBaseGenMS_difcNoSubsetChecks.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoSubsetChecks.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoSubsetChecks.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-subset-checks=true
Index: build/configs/BaseBaseMarkSweep_difcVerbose.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcVerbose.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcVerbose.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/BaseAdaptiveGenMS_difcNoInlinedBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoInlinedBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoInlinedBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/FastAdaptiveGenMS_difcNoLateRedundancyElimination.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoLateRedundancyElimination.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoLateRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
Index: build/configs/BaseAdaptiveGenMS_difcLibraries.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcLibraries.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcLibraries.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/FastAdaptiveGenMS_difcNoOptBarriers.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoOptBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoOptBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-opt-barriers=true
Index: build/configs/BaseAdaptiveGenMS_difcNoReadOrWriteBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoReadOrWriteBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoReadOrWriteBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-read-or-write-barriers=true
Index: build/configs/BaseBaseMarkSweep_difcDynamicBarriers.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcDynamicBarriers.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcDynamicBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoInlinedBarriers.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoInlinedBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoInlinedBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseBaseGenMS_difcVerbose.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcVerbose.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcVerbose.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/FastAdaptiveMarkSweep_difcLibraries.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcLibraries.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcLibraries.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-read-or-write-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcNoSlowPath.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoSlowPath.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoSlowPath.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-slow-path=true
Index: build/configs/BaseBaseMarkSweep_difcNoLateRedundancyElimination.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoLateRedundancyElimination.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoLateRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoBarriers.properties	(revision 281)
@@ -0,0 +1,17 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
Index: build/configs/BaseBaseGenMS_difcDynamicBarriers.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcDynamicBarriers.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcDynamicBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
Index: build/configs/BaseBaseGenMS_difc.properties
===================================================================
--- build/configs/BaseBaseGenMS_difc.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difc.properties	(revision 281)
@@ -0,0 +1,15 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
Index: build/configs/FullAdaptiveGenMS_difcVerbose.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcVerbose.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcVerbose.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoRWBarrierContents.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoRWBarrierContents.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoRWBarrierContents.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-rw-barrier-contents=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoLRENoIB.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoLRENoIB.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoLRENoIB.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
Index: build/configs/BaseBaseGenMS_difcNoOptBarriers.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoOptBarriers.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoOptBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-opt-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcDynamicBarriers.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcDynamicBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcDynamicBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
Index: build/configs/BaseBaseMarkSweep_difcNoBarriers.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoBarriers.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoBarriers.properties	(revision 281)
@@ -0,0 +1,14 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
Index: build/configs/BaseAdaptiveGenMS_difcNoRWBarrierContents.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoRWBarrierContents.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoRWBarrierContents.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-rw-barrier-contents=true
Index: build/configs/BaseBaseMarkSweep_difcNoInlinedBarriers.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoInlinedBarriers.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoInlinedBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseBaseMarkSweep_difcLibraries.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcLibraries.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcLibraries.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/BaseBaseMarkSweep_difcNoReadOrWriteBarriers.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoReadOrWriteBarriers.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoReadOrWriteBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-read-or-write-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcNoLateRedundancyElimination.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoLateRedundancyElimination.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoLateRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
Index: build/configs/BaseAdaptiveGenMS_difcNoRedundancyElimination.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoRedundancyElimination.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-redundancy-elimination=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoRWBarrierContents.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoRWBarrierContents.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoRWBarrierContents.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-rw-barrier-contents=true
Index: build/configs/BaseAdaptiveMarkSweep_difcProfile.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcProfile.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcProfile.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.profile=true
Index: build/configs/BaseAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-static-or-alloc-barriers=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoRedundancyElimination.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoRedundancyElimination.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-redundancy-elimination=true
Index: build/configs/FastAdaptiveGenMS_difc.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difc.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difc.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-static-or-alloc-barriers=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoReadOrWriteBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-read-or-write-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcDynamicBarriersLibraries.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcDynamicBarriersLibraries.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcDynamicBarriersLibraries.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/FastAdaptiveGenMS_difcNoRedundancyElimination.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoRedundancyElimination.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-redundancy-elimination=true
Index: build/configs/FastAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoStaticOrAllocBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-static-or-alloc-barriers=true
Index: build/configs/BaseBaseGenMS_difcNoBarriers.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoBarriers.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoBarriers.properties	(revision 281)
@@ -0,0 +1,14 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
Index: build/configs/BaseBaseMarkSweep_difcNoSubsetChecks.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcNoSubsetChecks.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcNoSubsetChecks.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-subset-checks=true
Index: build/configs/BaseBaseGenMS_difcNoRWBarrierContents.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoRWBarrierContents.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoRWBarrierContents.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-rw-barrier-contents=true
Index: build/configs/FullAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcDynamicBarriersLibraries.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/BaseAdaptiveGenMS_difcNoSlowPath.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoSlowPath.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoSlowPath.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-slow-path=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoRedundancyElimination.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoRedundancyElimination.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-redundancy-elimination=true
Index: build/configs/FastAdaptiveGenMS_difcNoReadOrWriteBarriers.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcNoReadOrWriteBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcNoReadOrWriteBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-read-or-write-barriers=true
Index: build/configs/BaseBaseMarkSweep_difcProfile.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcProfile.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcProfile.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.profile=true
Index: build/configs/BaseAdaptiveGenMS_difcVerbose.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcVerbose.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcVerbose.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/FastAdaptiveMarkSweep_difcNoSlowPath.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcNoSlowPath.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcNoSlowPath.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-slow-path=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoStaticOrAllocBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-static-or-alloc-barriers=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoSlowPath.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoSlowPath.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoSlowPath.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-slow-path=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoLRENoIB.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoLRENoIB.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoLRENoIB.properties	(revision 281)
@@ -0,0 +1,20 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/BaseBaseMarkSweep_difcDynamicBarriersLibraries.properties
===================================================================
--- build/configs/BaseBaseMarkSweep_difcDynamicBarriersLibraries.properties	(revision 0)
+++ build/configs/BaseBaseMarkSweep_difcDynamicBarriersLibraries.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/BaseAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties
===================================================================
--- build/configs/BaseAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties	(revision 0)
+++ build/configs/BaseAdaptiveMarkSweep_difcNoLateRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
Index: build/configs/BaseBaseGenMS_difcProfile.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcProfile.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcProfile.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.profile=true
Index: build/configs/FastAdaptiveMarkSweep_difcVerbose.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcVerbose.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcVerbose.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/BaseAdaptiveGenMS_difcDynamicBarriers.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcDynamicBarriers.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcDynamicBarriers.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcNoLRENoIB.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoLRENoIB.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoLRENoIB.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/FullAdaptiveGenMS_difcNoOptBarriers.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcNoOptBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcNoOptBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-opt-barriers=true
Index: build/configs/FastAdaptiveMarkSweep_difcDynamicBarriers.properties
===================================================================
--- build/configs/FastAdaptiveMarkSweep_difcDynamicBarriers.properties	(revision 0)
+++ build/configs/FastAdaptiveMarkSweep_difcDynamicBarriers.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.dynamic-barriers=true
Index: build/configs/FullAdaptiveMarkSweep_difcNoInlinedBarriers.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcNoInlinedBarriers.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcNoInlinedBarriers.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-inlined-barriers=true
Index: build/configs/FastAdaptiveGenMS_difcVerbose.properties
===================================================================
--- build/configs/FastAdaptiveGenMS_difcVerbose.properties	(revision 0)
+++ build/configs/FastAdaptiveGenMS_difcVerbose.properties	(revision 281)
@@ -0,0 +1,22 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.assertions=none
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/BaseAdaptiveGenMS_difcNoLateRedundancyElimination.properties
===================================================================
--- build/configs/BaseAdaptiveGenMS_difcNoLateRedundancyElimination.properties	(revision 0)
+++ build/configs/BaseAdaptiveGenMS_difcNoLateRedundancyElimination.properties	(revision 281)
@@ -0,0 +1,19 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.runtime.compiler=opt
+config.default-heapsize.initial=50
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-late-redundancy-elimination=true
Index: build/configs/FullAdaptiveGenMS_difcProfile.properties
===================================================================
--- build/configs/FullAdaptiveGenMS_difcProfile.properties	(revision 0)
+++ build/configs/FullAdaptiveGenMS_difcProfile.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.profile=true
Index: build/configs/FullAdaptiveMarkSweep_difcLibraries.properties
===================================================================
--- build/configs/FullAdaptiveMarkSweep_difcLibraries.properties	(revision 0)
+++ build/configs/FullAdaptiveMarkSweep_difcLibraries.properties	(revision 281)
@@ -0,0 +1,21 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.marksweep.MS
+config.include.aos=true
+config.default-heapsize.initial=50
+config.runtime.compiler=opt
+config.bootimage.compiler=opt
+config.bootimage.compiler.args=-X:bc:O2
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.libraries=true
Index: build/configs/BaseBaseGenMS_difcNoReadOrWriteBarriers.properties
===================================================================
--- build/configs/BaseBaseGenMS_difcNoReadOrWriteBarriers.properties	(revision 0)
+++ build/configs/BaseBaseGenMS_difcNoReadOrWriteBarriers.properties	(revision 281)
@@ -0,0 +1,16 @@
+#
+#  This file is part of the Jikes RVM project (http://jikesrvm.org).
+#
+#  This file is licensed to You under the Common Public License (CPL);
+#  You may not use this file except in compliance with the License. You
+#  may obtain a copy of the License at
+#
+#      http://www.opensource.org/licenses/cpl1.0.php
+#
+#  See the COPYRIGHT.txt file distributed with this work for information
+#  regarding copyright ownership.
+#
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.no-read-or-write-barriers=true
Index: build/configs/prototype.properties
===================================================================
--- build/configs/prototype.properties	(revision 4)
+++ build/configs/prototype.properties	(working copy)
@@ -10,4 +10,8 @@
 #  See the COPYRIGHT.txt file distributed with this work for information
 #  regarding copyright ownership.
 #
-config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
\ No newline at end of file
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+# DIFC: full DIFC with verbosity
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/config.properties.defaults
===================================================================
--- build/configs/config.properties.defaults	(revision 4)
+++ build/configs/config.properties.defaults	(working copy)
@@ -25,3 +25,20 @@
 config.bootimage.compiler.args=
 config.stress-gc-interval=0
 config.alignment-checking=false
+# DIFC: build-time parameters
+config.include.difc.enabled=false
+config.include.difc.barriers=false
+config.include.difc.verbose=false
+config.include.difc.profile=false
+config.include.difc.no-opt-barriers=false
+config.include.difc.no-redundancy-elimination=false
+config.include.difc.no-late-redundancy-elimination=false
+config.include.difc.no-read-or-write-barriers=false
+config.include.difc.no-rw-barrier-contents=false
+config.include.difc.no-static-or-alloc-barriers=false
+config.include.difc.no-inlined-barriers=false
+config.include.difc.no-slow-path=false
+config.include.difc.no-subset-checks=false
+config.include.difc.dynamic-barriers=false
+config.include.difc.libraries=false
+config.include.airavat.enabled=false
Index: build/configs/development.properties
===================================================================
--- build/configs/development.properties	(revision 4)
+++ build/configs/development.properties	(working copy)
@@ -16,3 +16,7 @@
 config.bootimage.compiler.args=-X:bc:O2
 config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
 config.default-heapsize.initial=50
+# DIFC: full DIFC with verbosity
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/prototype-opt.properties
===================================================================
--- build/configs/prototype-opt.properties	(revision 4)
+++ build/configs/prototype-opt.properties	(working copy)
@@ -13,4 +13,8 @@
 config.include.aos=true
 config.default-heapsize.initial=50
 config.runtime.compiler=opt
-config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
\ No newline at end of file
+config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
+# DIFC: full DIFC with verbosity
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/configs/production.properties
===================================================================
--- build/configs/production.properties	(revision 4)
+++ build/configs/production.properties	(working copy)
@@ -17,3 +17,7 @@
 config.bootimage.compiler.args=-X:bc:O2
 config.mmtk.plan=org.mmtk.plan.generational.marksweep.GenMS
 config.default-heapsize.initial=50
+# DIFC: full DIFC with verbosity
+config.include.difc.enabled=true
+config.include.difc.barriers=true
+config.include.difc.verbose=true
Index: build/components/classpath.xml
===================================================================
--- build/components/classpath.xml	(revision 4)
+++ build/components/classpath.xml	(working copy)
@@ -232,7 +232,6 @@
       <env key="JAVAC" value="${components.dir}/ecj/3.2/ecj-3.2/ecj" />
       <arg value="--enable-jni"/>
       <arg value="--disable-plugin"/>
-      <arg value="--disable-gconf-peer"/>
       <arg line="${cp.enable.gtk-peer}${cp.enable.portable-native-sync}${cp.disable.alsa}${cp.cppflags}"/>
     </exec>
     <exec executable="${make.exe}" failonerror="true" dir="${classpath.dir}">
Index: build/primordials/RVM.txt
===================================================================
--- build/primordials/RVM.txt	(revision 4)
+++ build/primordials/RVM.txt	(working copy)
@@ -80,3 +80,6 @@
 
 [Lorg/vmmagic/pragma/Inline$When;
 Lsun/misc/Unsafe;
+
+# DIFC: interface between application and Jikes
+Lorg/jikesrvm/scheduler/DIFC;
Index: rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java
===================================================================
--- rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java	(revision 4)
+++ rvm/src/org/jikesrvm/mm/mminterface/MemoryManager.java	(working copy)
@@ -18,6 +18,8 @@
 import org.jikesrvm.ArchitectureSpecific.CodeArray;
 import org.jikesrvm.VM;
 import org.jikesrvm.HeapLayoutConstants;
+import org.jikesrvm.classloader.Atom;
+import org.jikesrvm.classloader.NormalMethod;
 import org.jikesrvm.classloader.RVMArray;
 import org.jikesrvm.classloader.RVMClass;
 import org.jikesrvm.classloader.RVMMethod;
@@ -38,7 +40,12 @@
 import org.jikesrvm.options.OptionSet;
 import org.jikesrvm.runtime.BootRecord;
 import org.jikesrvm.runtime.Magic;
+import org.jikesrvm.scheduler.DIFC;
+import org.jikesrvm.scheduler.LabelSet;
+import org.jikesrvm.scheduler.Processor;
 import org.jikesrvm.scheduler.ProcessorTable;
+import org.jikesrvm.scheduler.greenthreads.GreenProcessor;
+import org.jikesrvm.scheduler.greenthreads.GreenThread;
 import org.mmtk.plan.Plan;
 import org.mmtk.policy.Space;
 import org.mmtk.utility.Constants;
@@ -520,6 +527,24 @@
     return Plan.getAllocationSite(compileTime);
   }
 
+  // DIFC: specify to allocator whether to allocate labeled object
+  // (if we're using dynamic barriers, then LABELED actually means
+  // to do a dynamic check of whether we're in a secure region
+  
+  public static final int LABELED = -2; // -1 is taken by DEFAULT_SITE :)
+  
+  @Inline
+  public static int getDIFCAllocationSite(boolean compileTime, NormalMethod method) {
+    if (VM.difcEnabled) {
+      if (DIFC.addBarriers(method)) {
+        if (DIFC.dynamicBarriers || method.staticallyInSecureRegion) {
+          return LABELED;
+        }
+      }
+    }
+    return getAllocationSite(compileTime);
+  }
+  
   /**
    * Returns the appropriate allocation scheme/area for the given
    * type.  This form is deprecated.  Without the RVMMethod argument,
@@ -647,6 +672,12 @@
   @Inline
   public static Object allocateScalar(int size, TIB tib, int allocator, int align, int offset, int site) {
     Selected.Mutator mutator = Selected.Mutator.get();
+
+    // DIFC: decide whether to allocate a labeled object
+    if (allocLabeled(site)) {
+      allocator = Plan.ALLOC_LABELED;
+    }
+    
     allocator = mutator.checkAllocator(org.jikesrvm.runtime.Memory.alignUp(size, MIN_ALIGNMENT), align, allocator);
     Address region = allocateSpace(mutator, size, align, offset, allocator, site);
     Object result = ObjectModel.initializeScalar(region, tib, size);
@@ -654,6 +685,42 @@
     return result;
   }
 
+  // DIFC: decide whether to allocate a labeled object
+  @Inline
+  private static boolean allocLabeled(int site) {
+    //decide whether we are using Airavat or Laminar
+    if (DIFC.enabled && VM.difcBarriers && site == LABELED) {
+      if(DIFC.isAiravat)
+        return allocAiravatLabeled(site);
+      else 
+        return allocLaminarLabeled(site);
+      }
+    return false;
+  }
+  
+  @Inline
+  private static boolean allocLaminarLabeled(int site) {
+    // if using dynamic barriers, make dynamic decision; otherwise static decision
+    boolean inSR;
+    if (DIFC.dynamicBarriers) {
+      inSR = Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inSecureRegion;
+    } else {
+      inSR = true;
+    }
+    if (inSR) {
+      return DIFC.shouldAllocLabeledObjectInSR();
+    }
+    return false;
+  }
+
+  @Inline
+  private static boolean allocAiravatLabeled(int site) {
+    if (DIFC.dynamicBarriers) {
+      return Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion;
+    }
+    return true;
+  }
+
   /**
    * Allocate an array object. This is the interruptible component, including throwing
    * an OutOfMemoryError for arrays that are too large.
@@ -713,6 +780,12 @@
   private static Object allocateArrayInternal(int numElements, int size, TIB tib, int allocator,
                                               int align, int offset, int site) {
     Selected.Mutator mutator = Selected.Mutator.get();
+
+    // DIFC: decide whether to allocate a labeled object
+    if (allocLabeled(site)) {
+      allocator = Plan.ALLOC_LABELED;
+    }
+    
     allocator = mutator.checkAllocator(org.jikesrvm.runtime.Memory.alignUp(size, MIN_ALIGNMENT), align, allocator);
     Address region = allocateSpace(mutator, size, align, offset, allocator, site);
     Object result = ObjectModel.initializeArray(region, tib, numElements, size);
@@ -1094,7 +1167,41 @@
   public static boolean isImmortal(Object obj) {
     return Space.isImmortal(ObjectReference.fromObject(obj));
   }
+  
+  /**
+   * DIFC: check if an object is in the labeled space
+   */
+  @Inline
+  public static boolean isLabeled(Object obj) {
+    final Word value = ObjectReference.fromObject(obj).toAddress().toWord();
+    final Word start = JavaHeader.minimumObjectRef(Plan.labeledSpace.getStart()).toWord();
+    final Word unsignedOffset = value.minus(start);
+    final Word extent = Plan.labeledSpace.getExtent().toWord();
+    return unsignedOffset.LT(extent);
+    
+    // this is too hard for the opt compiler to optimize really well, apparently
+    //return Space.isInSpace(Plan.LABELED, ObjectReference.fromObject(obj));
+  }
 
+  @Inline
+  public static boolean isLabeled(Address address) {
+    final Word value = address.toWord();
+    final Word start = Plan.labeledSpace.getStart().toWord();
+    final Word unsignedOffset = value.minus(start);
+    final Word extent = Plan.labeledSpace.getExtent().toWord();
+    return unsignedOffset.LT(extent);
+
+    // this is too hard for the opt compiler to optimize really well, apparently
+    //return Space.isInSpace(Plan.LABELED, address);
+  }
+  
+  // DIFC: used in read and write barriers so they don't inline so much that the opt compiler gets overwhelmed
+  @Inline
+  public static final Word labeledStart() { return Plan.labeledSpace.getStart().toWord(); }
+  @Inline
+  public static final Word labeledExtent() { return Plan.labeledSpace.getExtent().toWord(); }
+  
+  
   /***********************************************************************
    *
    * Finalizers
Index: rvm/src/org/jikesrvm/scheduler/DIFC.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/DIFC.java	(revision 0)
+++ rvm/src/org/jikesrvm/scheduler/DIFC.java	(revision 291)
@@ -0,0 +1,657 @@
+//DIFC: Interface between application and Jikes
+//We also put other DIFC code here for convenience
+package org.jikesrvm.scheduler;
+
+import java.lang.reflect.Method;
+
+import org.jikesrvm.Callbacks;
+import org.jikesrvm.Constants;
+import org.jikesrvm.VM;
+import org.jikesrvm.Callbacks.ExitMonitor;
+import org.jikesrvm.classloader.Atom;
+import org.jikesrvm.classloader.FieldReference;
+import org.jikesrvm.classloader.MemberReference;
+import org.jikesrvm.classloader.NormalMethod;
+import org.jikesrvm.compilers.opt.inlining.InlineSequence;
+import org.jikesrvm.compilers.opt.ir.Instruction;
+import org.jikesrvm.mm.mminterface.MemoryManager;
+import org.jikesrvm.objectmodel.ObjectModel;
+import org.jikesrvm.runtime.Entrypoints;
+import org.jikesrvm.runtime.Magic;
+import org.jikesrvm.runtime.RuntimeEntrypoints;
+import org.jikesrvm.scheduler.greenthreads.GreenProcessor;
+import org.jikesrvm.scheduler.greenthreads.GreenThread;
+import org.jikesrvm.util.StringUtilities;
+import org.mmtk.plan.Plan;
+import org.vmmagic.pragma.Entrypoint;
+import org.vmmagic.pragma.Inline;
+import org.vmmagic.pragma.NoBoundsCheck;
+import org.vmmagic.pragma.NoInline;
+import org.vmmagic.pragma.NoNullCheck;
+import org.vmmagic.pragma.NoSideEffects;
+import org.vmmagic.pragma.Uninterruptible;
+import org.vmmagic.pragma.UninterruptibleNoWarn;
+import org.vmmagic.unboxed.Address;
+import org.vmmagic.unboxed.ObjectReference;
+import org.vmmagic.unboxed.Offset;
+import org.vmmagic.unboxed.Word;
+
+import static org.jikesrvm.runtime.SysCall.sysCall;
+
+public final class DIFC {
+
+  public static final boolean enabled = VM.difcEnabled;
+  public static final int verbosity = (VM.difcVerbose ? 2 : 1);
+  /*Label type used in object-label map*/
+  public static final int SECRECY=0, INTEGRITY=1;
+  /*Lets us know when boot is complete*/
+  private static boolean BOOT_COMPLETE=false;
+  /* Value of cycles when we start */
+  private static long startCycles;
+  public static long totalCyclesInSecureRegions;
+  
+  /*Airavat: added*/ 
+  public static final boolean isAiravat= VM.airavatEnabled;
+  public static final long AIRAVAT_CONFIG = -10;
+  // called when the VM finishes booting (right before starting main thread)
+  public static void init() {
+    if (enabled) {
+      BOOT_COMPLETE=true;
+
+      Callbacks.addExitMonitor(new Callbacks.ExitMonitor() {
+        public void notifyExit(int value) {
+        }
+      });
+  
+    }
+  }
+
+      public static synchronized long createCapability(int type, int region){
+    return 0;
+  }
+
+  
+  
+  // Read barrier: gets executed before every object field or array slot read
+  
+  @Entrypoint @Uninterruptible
+  public static final void readBarrierDynamicDebug(Object obj) {
+  
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatReadBarrierDynamicDebug(Object obj) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatReadBarrierInsideSRDebug(obj);
+    } else {
+      airavatReadBarrierOutsideSRDebug(obj);
+    }
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void readBarrierDynamic(Object obj) {
+  
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void airavatReadBarrierDynamic(Object obj) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatReadBarrierInsideSR(obj);
+    }
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void readBarrierOutsideSRDebug(Object obj) {
+  
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatReadBarrierOutsideSRDebug(Object obj) {
+    if (VM.VerifyAssertions) { VM._assert(!Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion); }
+  }
+
+  @Entrypoint  @Inline  @UninterruptibleNoWarn
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void readBarrierOutsideSR(Object obj) {
+  
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void readBarrierInsideSRDebug(Object obj) {
+  
+  }
+  
+  @Entrypoint @Uninterruptible
+  public static final void airavatReadBarrierInsideSRDebug(Object obj) {
+    if (VM.VerifyAssertions) { VM._assert(Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion); }
+    airavatReadBarrierInsideSR(obj);
+  }
+  
+  @Entrypoint @UninterruptibleNoWarn
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void readBarrierInsideSR(Object obj) {
+  
+  }
+
+  @Entrypoint @UninterruptibleNoWarn
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static void airavatReadBarrierInsideSR(Object obj) {
+    if(!MemoryManager.isLabeled(obj))
+      throwAiravatException("Reading unlabeled object inside mapper");
+    else{
+      checkInvocationReadRule(getSecrecyLabels(obj));
+    }
+  }
+
+  @UninterruptibleNoWarn @Inline
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  private static final void readBarrierSlowPath(Object obj) {
+     }
+
+  // Write barrier: gets executed before every object field or array slot barrier
+
+  @Entrypoint @Uninterruptible
+  public static final void writeBarrierDynamicDebug(Object obj) {
+   
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatWriteBarrierDynamicDebug(Object obj) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatWriteBarrierInsideSRDebug(obj);
+    } else {
+      airavatWriteBarrierOutsideSRDebug(obj);
+    }
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void writeBarrierDynamic(Object obj) {
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void airavatWriteBarrierDynamic(Object obj) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatWriteBarrierInsideSR(obj);
+    }
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void writeBarrierOutsideSRDebug(Object obj) {
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatWriteBarrierOutsideSRDebug(Object obj) {
+    if (VM.VerifyAssertions) { VM._assert(!Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion); }
+  }
+
+  @Entrypoint @Inline @UninterruptibleNoWarn
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void writeBarrierOutsideSR(Object obj) {
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void writeBarrierInsideSRDebug(Object obj) {
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatWriteBarrierInsideSRDebug(Object obj) {
+    if (VM.VerifyAssertions) { VM._assert(Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion); }
+    airavatWriteBarrierInsideSR(obj);
+  }
+
+  @Entrypoint @UninterruptibleNoWarn
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void writeBarrierInsideSR(Object obj) {
+  }
+
+  @Entrypoint @UninterruptibleNoWarn
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public static final void airavatWriteBarrierInsideSR(Object obj) {
+    GreenThread currentThread = (GreenThread)GreenProcessor.getCurrentThread();
+    /*Airavat code*/
+      if (MemoryManager.isLabeled(obj)) {
+        checkInvocationWriteRule(getSecrecyLabels(obj));
+      }else{
+        throwAiravatException("Writing to unlabeled object");
+      }
+  }
+
+  @UninterruptibleNoWarn @Inline
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  private static final void writeBarrierSlowPath(Object obj) {
+  }
+  
+  @Entrypoint @Uninterruptible
+  public static final void staticReadBarrierDynamicDebug(int fieldID) {
+  }
+  
+  @Entrypoint @Uninterruptible
+  public static final void airavatStaticReadBarrierDynamicDebug(int fieldID) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatStaticReadBarrierInsideSRDebug(fieldID);
+    } else {
+      airavatStaticReadBarrierOutsideSRDebug(fieldID);
+    }
+  }
+  
+  @Entrypoint @Inline @Uninterruptible
+  public static final void staticReadBarrierDynamic(int fieldID) {
+  }
+  
+  @Entrypoint @Inline @Uninterruptible
+  public static final void airavatStaticReadBarrierDynamic(int fieldID) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatStaticReadBarrierInsideSR(fieldID);
+    } //else {
+      //airavatStaticReadBarrierOutsideSR(fieldID);
+    //}
+  }
+  
+  @Entrypoint @Uninterruptible
+  public static final void staticReadBarrierInsideSRDebug(int fieldID) {
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatStaticReadBarrierInsideSRDebug(int fieldID) {
+    // do nothing: there is no non-debug version of this method
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  public static final void staticReadBarrierInsideSR(int fieldID) {
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  public static final void airavatStaticReadBarrierInsideSR(int fieldID) {
+    //staticBarrierSlowPath(fieldID, false);
+    //Reads to statics are allowed since we do not allow writing to statics inside
+    //mapper invocation. Thus statics cannot store per invocation information.
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void staticReadBarrierOutsideSRDebug(int fieldID) {
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatStaticReadBarrierOutsideSRDebug(int fieldID) {
+    // do nothing: there is no non-debug version of this method
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void staticWriteBarrierDynamicDebug(int fieldID) {
+  }
+  
+  @Entrypoint @Uninterruptible
+  public static final void airavatStaticWriteBarrierDynamicDebug(int fieldID) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatStaticWriteBarrierInsideSRDebug(fieldID);
+    } else {
+      airavatStaticWriteBarrierOutsideSRDebug(fieldID);
+    }
+  }
+  
+  @Entrypoint @Inline @Uninterruptible
+  public static final void staticWriteBarrierDynamic(int fieldID) {
+  }
+  
+  @Entrypoint @Inline @Uninterruptible
+  public static final void airavatStaticWriteBarrierDynamic(int fieldID) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatStaticWriteBarrierInsideSR(fieldID);
+    } //else {
+      //airavatStaticWriteBarrierOutsideSR(fieldID);
+    //}
+  }
+  
+  @Entrypoint @Uninterruptible
+  public static final void staticWriteBarrierInsideSRDebug(int fieldID) {
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatStaticWriteBarrierInsideSRDebug(int fieldID) {
+    // do nothing: there is no non-debug version of this method
+    throwAiravatException("Writes to statics inside the mapper is not allowed");
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  public static final void staticWriteBarrierInsideSR(int fieldID) {
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  public static final void airavatStaticWriteBarrierInsideSR(int fieldID) {
+    /*we do not allow writes to statics inside the mapper*/
+    throwAiravatException("Writes to statics inside the mapper is not allowed");
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void staticWriteBarrierOutsideSRDebug(int fieldID) {
+    // do nothing: there is no non-debug version of this method
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatStaticWriteBarrierOutsideSRDebug(int fieldID) {
+    // do nothing: there is no non-debug version of this method
+  }
+
+  @Uninterruptible
+  private static final void staticBarrierSlowPath(int fieldID, boolean write) {
+    // DIFC: TODO: enforce rules on statics!!
+    if (verbosity >= 2) {
+      staticBarrierSlowPathHelper(fieldID, write);
+    }
+  }
+
+  @Uninterruptible
+  private static final void staticBarrierSlowPathHelper(int fieldID, boolean write) {
+  }
+  
+  // allocation barriers: executed between the allocation and the constructor
+  
+  @Entrypoint @Uninterruptible
+  public static final void allocBarrierDynamicDebug(Object obj) {
+  }
+  
+  @Entrypoint @Uninterruptible
+  public static final void airavatAllocBarrierDynamicDebug(Object obj) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatAllocBarrierInsideSRDebug(obj);
+    } else {
+      airavatAllocBarrierOutsideSRDebug(obj);
+    }
+  }
+  
+  @Entrypoint @Inline @Uninterruptible
+  public static final void allocBarrierDynamic(Object obj) {
+  }
+  
+  @Entrypoint @Inline @Uninterruptible
+  public static final void airavatAllocBarrierDynamic(Object obj) {
+    if (Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion) {
+      airavatAllocBarrierInsideSR(obj);
+    } 
+  }
+  
+  @Entrypoint @Uninterruptible
+  public static final void allocBarrierOutsideSRDebug(Object obj) {
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatAllocBarrierOutsideSRDebug(Object obj) {
+    // there is no non-debug version of this method
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void allocBarrierInsideSRDebug(Object obj) {
+  }
+
+  @Entrypoint @Uninterruptible
+  public static final void airavatAllocBarrierInsideSRDebug(Object obj) {
+    if (VM.VerifyAssertions) { VM._assert(Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion); }
+    airavatAllocBarrierInsideSR(obj);
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  public static final void allocBarrierInsideSR(Object obj) {
+  }
+
+  @Entrypoint @Inline @Uninterruptible
+  public static final void airavatAllocBarrierInsideSR(Object obj) {
+    // inline this common, cheaper path
+    if (MemoryManager.isLabeled(obj)) {
+      GreenThread currentThread = (GreenThread)GreenProcessor.getCurrentThread();
+      setObjectLabels(obj, currentThread.invocationAllocLabel, LabelSet.EMPTY);
+    } else{
+      VM.sysWriteln("Error: Allocating unlabeled object inside mapper invocation");
+    }
+  }
+
+  @UninterruptibleNoWarn // since it can throw an exception
+  private static final void allocBarrierSlowPath(Object obj) {
+  }
+
+  
+  @Uninterruptible
+  public static boolean shouldAllocLabeledObjectInSR() {
+      return false;
+  }
+  
+  @Uninterruptible
+  static boolean shouldAllocLabeledObjectInSRSlowPath() {
+      return true;
+  }
+  
+  // DIFC: different types of barriers
+  public static final int READ_BARRIER = 1;
+  public static final int WRITE_BARRIER = 2;
+  public static final int STATIC_READ_BARRIER = 3;
+  public static final int STATIC_WRITE_BARRIER = 4;
+  public static final int ALLOC_BARRIER = 5;
+  
+  // Specify where we want to insert barriers
+  
+  @Uninterruptible
+  public static final boolean addBarriers(NormalMethod method) {
+    // for now, just put instrumentation in the application (not the libraries)
+    if (enabled && VM.difcBarriers) {
+      Atom desc = method.getDeclaringClass().getDescriptor();
+      boolean app = !desc.isBootstrapClassDescriptor();
+      boolean lib = !desc.isRVMDescriptor();
+      // handle weird L$Proxy2; classes
+      if (desc.getBytes()[1] == '$') {
+        return false;
+      }
+      if ((app && VM.runningVM && VM.fullyBooted) || (lib && VM.difcLibraries)) {
+        return true;
+      }
+    }
+    return false;
+  }
+  
+  public static final boolean dynamicBarriers = VM.difcDynamicBarriers;
+  
+  @Uninterruptible
+  public static final NormalMethod addBarriers(NormalMethod method, int type) {
+    if (addBarriers(method)) {
+      boolean staticOrAllocBarrier =
+        (type == STATIC_READ_BARRIER) ||
+        (type == STATIC_WRITE_BARRIER) ||
+        (type == ALLOC_BARRIER);
+      boolean readOrWriteBarrier =
+        (type == READ_BARRIER ||
+         type == WRITE_BARRIER);
+      if ((!VM.difcNoStaticOrAllocBarriers || !staticOrAllocBarrier) &&
+          (!VM.difcNoReadOrWriteBarriers   || !readOrWriteBarrier)) {
+
+        if (verbosity >= 3) {
+          VM.sysWrite("Adding barrier ");
+          VM.sysWrite(type);
+          VM.sysWrite(" to ");
+          VM.sysWrite(method);
+          VM.sysWrite(" while method.inSR = ");
+          VM.sysWrite(method.staticallyInSecureRegion);
+          VM.sysWriteln();
+        }
+
+        // DIFC: TODO: had to remove this
+        //if (VM.VerifyAssertions) { VM._assert(VM.runningVM); }
+        boolean debugBarriers = VM.VerifyAssertions || /*LabelSet.PROFILE ||*/ VM.difcVerbose;
+        
+        if (isAiravat) {
+          
+          if (debugBarriers) {
+            if (dynamicBarriers) {
+              switch (type) {
+              case READ_BARRIER: return Entrypoints.airavatReadBarrierDynamicDebugMethod;
+              case WRITE_BARRIER: return Entrypoints.airavatWriteBarrierDynamicDebugMethod;
+              case STATIC_READ_BARRIER: return Entrypoints.airavatStaticReadBarrierDynamicDebugMethod;
+              case STATIC_WRITE_BARRIER: return Entrypoints.airavatStaticWriteBarrierDynamicDebugMethod;
+              case ALLOC_BARRIER: return Entrypoints.airavatAllocBarrierDynamicDebugMethod;
+              }
+            } else if (method.staticallyInSecureRegion) {
+              switch (type) {
+              case READ_BARRIER: return Entrypoints.airavatReadBarrierInsideSRDebugMethod;
+              case WRITE_BARRIER: return Entrypoints.airavatWriteBarrierInsideSRDebugMethod;
+              case STATIC_READ_BARRIER: return Entrypoints.airavatStaticReadBarrierInsideSRDebugMethod;
+              case STATIC_WRITE_BARRIER: return Entrypoints.airavatStaticWriteBarrierInsideSRDebugMethod;
+              case ALLOC_BARRIER: return Entrypoints.airavatAllocBarrierInsideSRDebugMethod;
+              }
+            } else {
+              switch (type) {
+              case READ_BARRIER: return Entrypoints.airavatReadBarrierOutsideSRDebugMethod;
+              case WRITE_BARRIER: return Entrypoints.airavatWriteBarrierOutsideSRDebugMethod;
+              case STATIC_READ_BARRIER: return Entrypoints.airavatStaticReadBarrierOutsideSRDebugMethod;
+              case STATIC_WRITE_BARRIER: return Entrypoints.airavatStaticWriteBarrierOutsideSRDebugMethod;
+              case ALLOC_BARRIER: return Entrypoints.airavatAllocBarrierOutsideSRDebugMethod;
+              }
+            }
+          } else {
+            if (dynamicBarriers) {
+              switch (type) {
+              case READ_BARRIER: return Entrypoints.airavatReadBarrierDynamicMethod;
+              case WRITE_BARRIER: return Entrypoints.airavatWriteBarrierDynamicMethod;
+              case STATIC_READ_BARRIER: return Entrypoints.airavatStaticReadBarrierDynamicMethod;
+              case STATIC_WRITE_BARRIER: return Entrypoints.airavatStaticWriteBarrierDynamicMethod;
+              case ALLOC_BARRIER: return Entrypoints.airavatAllocBarrierDynamicMethod;
+              }
+            } else if (method.staticallyInSecureRegion) {
+              switch (type) {
+              case READ_BARRIER: return Entrypoints.airavatReadBarrierInsideSRMethod;
+              case WRITE_BARRIER: return Entrypoints.airavatWriteBarrierInsideSRMethod;
+              case STATIC_READ_BARRIER: return Entrypoints.airavatStaticReadBarrierInsideSRMethod;
+              case STATIC_WRITE_BARRIER: return Entrypoints.airavatStaticWriteBarrierInsideSRMethod;
+              case ALLOC_BARRIER: return Entrypoints.airavatAllocBarrierInsideSRMethod;
+              }
+            } else {
+              switch (type) {
+              }
+            }
+            
+          }
+          
+        } 
+      }
+    }
+    return null;
+  }
+
+  /** Helper method used by the opt compiler */
+  public static final NormalMethod addBarriers(Instruction inst, int type) {
+    if (!VM.difcNoOptBarriers) {
+      InlineSequence position = inst.position;
+      if (position != null) {
+        NormalMethod method = position.getMethod();
+        if (method != null) {
+          return addBarriers(method, type);
+        }
+      }
+    }
+    return null;
+  }
+
+  
+    // offsets of the labels
+    @Uninterruptible
+    @Inline
+    public static final Address secrecyAddr(Object o) {
+      return ObjectReference.fromObject(o).toAddress().minus(20);
+    }
+    @Uninterruptible
+    @Inline
+    public static final Address integrityAddr(Object o) {
+      return ObjectReference.fromObject(o).toAddress().minus(16);
+  
+    }
+
+    // for internal use only
+    @Inline @Uninterruptible
+    private static void setObjectLabels(Object obj, LabelSet secrecyLabels, LabelSet integrityLabels) {
+      if (VM.VerifyAssertions) {
+        VM._assert(MemoryManager.isLabeled(obj));
+        VM._assert(secrecyLabels != null);
+        VM._assert(integrityLabels != null);
+      }
+      secrecyAddr(obj).store(ObjectReference.fromObject(secrecyLabels));
+      integrityAddr(obj).store(ObjectReference.fromObject(integrityLabels));
+    }
+    
+    /** Function that can be used to obtain the secrecy labels of an object */
+    @Inline
+    @Uninterruptible
+    public static LabelSet getSecrecyLabels(Object obj) {
+      //if (VM.VerifyAssertions) { VM._assert(isLabeled(obj)); }
+      Address addr = ObjectReference.fromObject(obj).toAddress();
+      LabelSet labelSet = (LabelSet)secrecyAddr(obj).loadObjectReference().toObject();
+      //if (VM.VerifyAssertions) { VM._assert(labelSet != null); }
+      return labelSet;
+    }
+
+    /** Function that can be used to obtain the secrecy labels of an object */
+    @Inline
+    @Uninterruptible
+    public static LabelSet getIntegrityLabels(Object obj) {
+      LabelSet labelSet = (LabelSet)integrityAddr(obj).loadObjectReference().toObject();
+      //if (VM.VerifyAssertions) { VM._assert(labelSet != null); }
+      return labelSet;
+    }
+
+    /*Makes the system call to set labels in the OS */
+    public static int OSpassCurrentLabels(){
+        return 0;
+    }
+
+
+   
+     @UninterruptibleNoWarn
+   private static boolean checkAllocLabels(){
+ 
+      return true;
+    }
+        
+    
+    /*Airavat code*/
+    public static void startMapInvocation(long invocation){
+      Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).invocation_number = invocation;
+      ((GreenThread)GreenProcessor.getCurrentThread()).invocationAllocLabel=LabelSet.getLabelSet(invocation);
+      Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion = true;
+    }
+    public static void endMapInvocation(){
+      Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).invocation_number = -1;
+      Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).inMapperRegion = false;
+    }
+    
+    /*Checks if the current mapper invocation can read the variable*/ 
+    public static void checkInvocationReadRule(LabelSet invocationSet){
+      long iNum=Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).invocation_number;
+      if(invocationSet.invocationLessAndNotEq(iNum, AIRAVAT_CONFIG))
+        throwAiravatException("Mapper reading variable of previous invocation ="+invocationSet.getInvocationNumber()+": current="+iNum);
+    }
+    
+    /*Checks if the current mapper invocation can read the variable*/ 
+    public static void checkInvocationWriteRule(LabelSet invocationSet){
+      long iNum=Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).invocation_number; 
+      if(invocationSet.invocationLessThan(iNum))
+        throwAiravatException("Mapper writing to variable of previous invocation ="+invocationSet.getInvocationNumber()+": current="+iNum);
+    }
+    
+    public static long getObjectInvocationNumber(Object obj){
+      if (MemoryManager.isLabeled(obj)) {
+        LabelSet val=getSecrecyLabels(obj);
+        return val.getInvocationNumber();
+      } else{
+        VM.sysWriteln("Error: Req. inv number of unlabeled object");
+        return -2;
+      }
+    }
+    
+    public static long getCurrentInvocationNumber(){
+      return Magic.processorAsGreenProcessor(Processor.getCurrentProcessor()).invocation_number;
+    }
+    
+    @UninterruptibleNoWarn
+    private static void throwAiravatException(String msg) {
+      throw new AiravatException(msg);
+    }
+}
Index: rvm/src/org/jikesrvm/scheduler/LabelSet.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/LabelSet.java	(revision 0)
+++ rvm/src/org/jikesrvm/scheduler/LabelSet.java	(revision 291)
@@ -0,0 +1,456 @@
+//DIFC: immutable, interned label sets
+package org.jikesrvm.scheduler;
+
+import org.jikesrvm.VM;
+import org.vmmagic.pragma.Inline;
+import org.vmmagic.pragma.Interruptible;
+import org.vmmagic.pragma.NoBoundsCheck;
+import org.vmmagic.pragma.NoNullCheck;
+import org.vmmagic.pragma.NoSideEffects;
+import org.vmmagic.pragma.NonMoving;
+import org.vmmagic.pragma.Uninterruptible;
+
+// non-moving because we point to it via field headers
+@NonMoving
+@Uninterruptible
+public final class LabelSet {
+  
+  public static final LabelSet EMPTY = new LabelSet(new long[0], 0);
+  
+  private final long[] labels; // guaranteed sorted
+  // package-level access since we don't want to expose to programmers
+  final int len; // use this instead of labels.length!!  (since we may want to allocate arrays bigger than the space used)
+  
+  static int newLabelSets;
+  
+  private LabelSet(long[] labels, int len) {
+    //profile("new LabelSet");
+    this.labels = labels;
+    this.len = len;
+    if (VM.VerifyAssertions) { VM._assert(len > 0 || !VM.runningVM, "Use EMPTY instead of creating new empty label set"); }
+    newLabelSets++;
+  }
+
+  // standard ways to create a new label set (the multi-label sets use
+  // union for simplicity -- consider the cases where the program
+  // passes in unsorted parameters or duplicate parameters) 
+
+  @Interruptible
+  public static LabelSet getLabelSet(long label) {
+    return new LabelSet(new long[] { label }, 1);
+  }
+
+  @Interruptible
+  public static LabelSet getLabelSet(long label1, long label2) {
+    return union(getLabelSet(label1), label2);
+  }
+  
+  @Interruptible
+  public static LabelSet getLabelSet(long label1, long label2, long label3) {
+    return union(getLabelSet(label1, label2), label3);
+  }
+  
+  // allow only package-level access since we don't want to expose to programmers
+  @Deprecated // use (final) len field instead
+  @Inline
+  int size(){ return len; }
+  
+  // EMPTY is final, so Jikes and programmers should access it directly
+  @Deprecated
+  @Inline
+  public static LabelSet getEmptyLabel(){return EMPTY;}
+  
+  // restrict accesses to package since programmers shouldn't be able to get this
+  @Inline
+  long[] getLongLabels(){return labels;}
+  
+  // DIFC: O(n) test for subset
+  // Checks if THIS is a subset of OTHER
+  @Inline
+  @NoNullCheck @NoBoundsCheck @NoSideEffects
+  public boolean isSubsetOf(LabelSet other) {
+    // short-circuit check
+    if (this == EMPTY) {
+      //profile("LabelSet.isSubsetOf", "sc1");
+      return true;
+    // comment this out since we only return false in error cases
+    /*
+    } else if (other == EMPTY) {
+      profile("LabelSet.isSubsetOf", "sc2");
+      return false; // since we know this != EMPTY
+    */
+    } else if (this == other) {
+      //profile("LabelSet.isSubsetOf", "sc1");
+      return true;
+    }
+    return isSubsetOfSlowPath(other);
+  }
+  
+  boolean isSubsetOfSlowPath(LabelSet other) { 
+    long[] labels1 = this.labels;
+    long[] labels2 = other.labels;
+    int pos1, pos2;
+    // the check here just checks if we've reached the end of this
+    for (pos1 = 0, pos2 = 0; pos1 < this.len; ) {
+      if (pos2 == other.len) {
+        //profile("LabelSet.isSubsetOf", "false1");
+        return false;
+      } else if (labels2[pos2] < labels1[pos1]) {
+        pos2++;
+      } else  if (labels2[pos2] > labels1[pos1]) {
+        //profile("LabelSet.isSubsetOf", "false2");
+        return false;
+      } else {
+        // don't include the elements that are in both
+        pos1++;
+        pos2++;
+      }
+    }
+    //profile("LabelSet.isSubsetOf", "true");
+    return true;
+    /*
+    long[] thisLabels = this.labels;
+    long[] otherLabels = other.labels;
+    if(this.len<=0) return true;
+    if(this.len>other.len) return false;
+    long thisIndex, otherIndex; 
+    for(otherIndex=0; otherIndex<other.len; otherIndex++){
+        if(thisLabels[0]==otherLabels[otherIndex]){
+            for(thisIndex=1; thisIndex<this.len &&(thisLabels[thisIndex]==otherLabels[otherIndex+thisIndex]); thisIndex++);
+            return (thisIndex==this.len);
+        }
+    }
+    return false;
+    */
+  }
+
+  /*Since l1 and l2 can have common elements, we will need to remove duplicates
+   * This function is slow if length of labels is large, hence should not be used often.
+   */
+  @Interruptible
+  @Inline
+  public static LabelSet union(LabelSet l1, LabelSet l2) {
+    // this probably happens a lot; also it catches the case where
+    // someone unions EMPTY and EMPTY, in which case we want the
+    // result to be EMPTY, not a duplicate empty label set 
+    if (l2==EMPTY) {
+      //profile("LabelSet.union1", "sc1");
+      return l1;
+    } else if (l1==EMPTY) {
+      //profile("LabelSet.union1", "sc2");
+      return l2;
+    } else if (l1 == l2) {
+      //profile("LabelSet.union1", "sc3");
+      return l1;
+    }
+    return unionSlowPath(l1, l2);
+  }
+  
+  @Interruptible
+  static LabelSet unionSlowPath(LabelSet l1, LabelSet l2) {
+    long[] labels1 = l1.labels;
+    long[] labels2 = l2.labels;
+    long[] newLabels = new long[l1.len + l2.len];
+    int newPos, pos1, pos2;
+    for (newPos = 0, pos1 = 0, pos2 = 0; pos1 < l1.len || pos2 < l2.len; newPos++) {
+      // pick the lesser (or take both if equal)
+      // if one array is exhausted, pick the other
+      if (pos1 == l1.len) {
+        newLabels[newPos] = labels2[pos2];
+        pos2++;
+      } else if (pos2 == l2.len) {
+        newLabels[newPos] = labels1[pos1];
+        pos1++;
+      } else if (labels1[pos1] < labels2[pos2]) {
+        newLabels[newPos] = labels1[pos1];
+        pos1++;
+      } else if (labels1[pos1] > labels2[pos2]) {
+        newLabels[newPos] = labels2[pos2];
+        pos2++;
+      } else {
+        newLabels[newPos] = labels1[pos1];
+        pos1++;
+        pos2++;
+      }
+    }
+    
+    // skip if an existing label will do
+    if (newPos == l1.len) {
+      //profile("LabelSet.union1", "sc4");
+      return l1;
+    } else if (newPos == l2.len) {
+      //profile("LabelSet.union1", "sc5");
+      return l2;
+    }
+    
+    //profile("LabelSet.union1", "regular");
+    return new LabelSet(newLabels, newPos);
+  }
+
+  @Interruptible
+  public static LabelSet union(LabelSet l1, long l2){
+    long[] labels1 = l1.labels;
+    long[] newLabels = new long[l1.len + 1];
+    int newPos, pos1, pos2;
+    for (newPos = 0, pos1 = 0, pos2 = 0; pos1 < l1.len || pos2 < 1; newPos++) {
+      // pick the lesser (or take both if equal)
+      // if one array is exhausted, pick the other
+      if (pos1 == l1.len) {
+        newLabels[newPos] = l2;
+        pos2++;
+      } else if (pos2 == 1) {
+        newLabels[newPos] = labels1[pos1];
+        pos1++;
+      } else if (labels1[pos1] < l2) {
+        newLabels[newPos] = labels1[pos1];
+        pos1++;
+      } else if (labels1[pos1] > l2) {
+        newLabels[newPos] = l2;
+        pos2++;
+      } else {
+        newLabels[newPos] = labels1[pos1];
+        pos1++;
+        pos2++;
+      }
+    }
+    // short-circuit checks
+    if (newPos == l1.len) {
+      //profile("LabelSet.union2", "sc1");
+      return l1;
+    }
+    //profile("LabelSet.union2", "regular");
+    return new LabelSet(newLabels, newPos);
+  }
+  
+  @Interruptible
+  @Inline
+  public static LabelSet minus(LabelSet l1, LabelSet l2){
+    // short-circuit checks
+    if (l1 == EMPTY || l2 == EMPTY) {
+      //profile("LabelSet.minus", "sc1");
+      return l1;
+    } else if (l1 == l2) {
+      //profile("LabelSet.minus", "sc2");
+      return EMPTY;
+    }
+    return minusSlowPath(l1, l2);
+  }
+  
+  @Interruptible
+  static LabelSet minusSlowPath(LabelSet l1, LabelSet l2) {
+    long[] labels1 = l1.labels;
+    long[] labels2 = l2.labels;
+    long[] newLabels = new long[l1.len]; // be conservative
+    int newPos, pos1, pos2;
+    // only need to wait until we've exhausted the first array
+    for (newPos = 0, pos1 = 0, pos2 = 0; pos1 < l1.len; ) {
+      // pick the lesser (or take both if equal)
+      // if one array is exhausted, pick the other
+      if (pos2 == l2.len || labels1[pos1] < labels2[pos2]) {
+        newLabels[newPos] = labels1[pos1];
+        newPos++;
+        pos1++;
+      } else if (labels1[pos1] > labels2[pos2]) {
+        // don't include the elements from l2
+        pos2++;
+      } else {
+        // don't include the elements that are in both
+        pos1++;
+        pos2++;
+      }
+    }
+    if (newPos == 0) {
+      //profile("LabelSet.minus", "sc4");
+      return EMPTY;
+    } else {
+      //profile("LabelSet.minus", "regular");
+      return new LabelSet(newLabels, newPos);
+    }
+  }
+  
+  /** Helper function to check if the elements of the caller are part of the first or second sets */
+  @Inline
+  public final boolean checkInUnion(LabelSet firstSet, LabelSet secondSet){
+    // short-circuit checks
+    if (this == EMPTY) {
+      //profile("LabelSet.checkInUnion", "sc1");
+      return true;
+    } else if (firstSet == EMPTY) {
+      //profile("LabelSet.checkInUnion", "sc2");
+      return this.isSubsetOf(secondSet);
+    } else if (secondSet == EMPTY) {
+      //profile("LabelSet.checkInUnion", "sc3");
+      return this.isSubsetOf(firstSet);
+    }
+    return checkInUnionSlowPath(firstSet, secondSet);
+  }
+  
+  final boolean checkInUnionSlowPath(LabelSet firstSet, LabelSet secondSet) {
+    int pos=0,pos1=0,pos2=0, incr=0;
+    boolean change=false;
+    while(pos<this.len){
+      change=false;incr=0;
+      if(pos1<firstSet.len){
+        if(this.labels[pos]==firstSet.labels[pos1]) incr=1;
+        if(firstSet.labels[pos1]<=this.labels[pos] ){
+          pos1++; change=true;
+        }
+      }
+      if(pos2<secondSet.len){
+        if(this.labels[pos]==secondSet.labels[pos2]) incr=1;
+        if(secondSet.labels[pos2]<=this.labels[pos] ){
+          pos2++; change=true;
+        }
+      }
+      /*The current value is not present and is smaller than those in the 2 sets*/
+      if(!change) {
+        //profile("LabelSet.checkInUnion", "false");
+        return false;
+      }
+      pos+=incr;
+    }
+    //profile("LabelSet.checkInUnion", "true");
+    return true;
+  }
+
+  
+  @Interruptible
+  public void printLabels(String msg){
+	  System.out.print(msg+":(");
+	  for(int i = 0; i < len; i++)
+		  System.out.print(labels[i]+",");
+	  System.out.println(") : len="+len);
+  }
+  
+  @Override
+  @Interruptible
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    String delim = "";
+    sb.append("{");
+    for(int i = 0; i < len; i++) {
+      sb.append(delim);
+      sb.append(labels[i]);
+      delim = ",";
+    }
+    sb.append("}");
+    return sb.toString();
+  }
+
+  // Allow this to be called since aggressive compiler optimizations do it
+  @Override
+  @Interruptible
+  public boolean equals(Object o) {
+    return super.equals(o);
+  }
+  
+  @Override
+  @Interruptible
+  public int hashCode() {
+    return super.hashCode();
+  }
+  
+  /*
+  public static final boolean PROFILE = VM.difcProfile;
+  
+  private static final HashMapRVM<String,HashMapRVM<String,int[]>> profileMap = new HashMapRVM<String, HashMapRVM<String,int[]>>();
+  
+  @Inline
+  public static final void profile(String op) {
+    if (PROFILE) {
+      profileHelper(op, "default");
+    }
+  }
+  
+  @Inline
+  public static final void profile(String op, String subOp) {
+    if (PROFILE) {
+      profileHelper(op, subOp);
+    }
+  }
+  
+  @NoInline
+  @UninterruptibleNoWarn
+  static void profileHelper(String op, String subOp) {
+    if (VM.runningVM) {
+      synchronized (profileMap) {
+        HashMapRVM<String, int[]> opMap = profileMap.get(op);
+        if (opMap == null) {
+          opMap = new HashMapRVM<String, int[]>();
+          profileMap.put(op, opMap);
+        }
+        int[] count = opMap.get(subOp);
+        if (count == null) {
+          count = new int[1];
+          opMap.put(subOp, count);
+        }
+        count[0]++;
+      }
+    }
+  }
+  
+  public static final class ProfileCallback implements ExitMonitor {
+  
+    public void notifyExit(int value) {
+
+      ArrayList<String> keys = new ArrayList<String>();
+      for (String op : profileMap.keys()) {
+        keys.add(op);
+      }
+      Comparator<String> comp = new Comparator<String> () {
+
+        public int compare(String o1, String o2) {
+          int count1 = getTotal(o1);
+          int count2 = getTotal(o2);
+          if (count1 < count2) {
+            return -1;
+          } else if (count1 > count2) {
+            return 1;
+          } else {
+            return 0;
+          }
+        }
+        
+      };
+      Collections.sort(keys, comp);
+      
+      for (String op : keys) {
+        HashMapRVM<String, int[]> opMap = profileMap.get(op);
+        System.out.println(op + ":  " + getTotal(op));
+        if (opMap.size() > 1) {
+          for (String subOp : opMap.keys()) {
+            int[] count = opMap.get(subOp);
+            System.out.println("  " + subOp + ":  " + count[0]);
+          }
+        }
+      }
+    }
+    
+    int getTotal(String op) {
+      int total = 0;
+      HashMapRVM<String, int[]> opMap = profileMap.get(op);
+      for (String subOp : opMap.keys()) {
+        int[] count = opMap.get(subOp);
+        total += count[0];
+      }
+      return total;
+    }
+    
+  }
+  */
+  
+  /*Airavat specific function*/
+  public boolean invocationLessThan(long v){
+    return (labels[0]<v ? true: false);
+  }
+  //Check invocation is < v and not equal to the default value c
+  public boolean invocationLessAndNotEq(long v, long c){
+    return ((labels[0]<v && labels[0]!=c) ? true: false);
+  }
+  public long getInvocationNumber(){
+    if(len>0)
+      return labels[0];
+    else
+      return -1;
+   }
+}
Index: rvm/src/org/jikesrvm/scheduler/greenthreads/GreenProcessor.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/greenthreads/GreenProcessor.java	(revision 4)
+++ rvm/src/org/jikesrvm/scheduler/greenthreads/GreenProcessor.java	(working copy)
@@ -20,6 +20,8 @@
 import org.jikesrvm.runtime.Magic;
 import static org.jikesrvm.runtime.SysCall.sysCall;
 import org.jikesrvm.runtime.Time;
+import org.jikesrvm.scheduler.DIFC;
+import org.jikesrvm.scheduler.LabelSet;
 import org.jikesrvm.scheduler.Processor;
 import org.jikesrvm.scheduler.ProcessorLock;
 import org.jikesrvm.scheduler.Scheduler;
@@ -28,7 +30,7 @@
 import org.vmmagic.pragma.Uninterruptible;
 import org.vmmagic.pragma.Unpreemptible;
 import org.vmmagic.unboxed.Offset;
-
+import org.jikesrvm.scheduler.SRState;
 /**
  * Multiplex execution of large number of Threads on small
  * number of o/s kernel threads.
@@ -149,6 +151,18 @@
   static GreenProcessor idleProcessor;
 
   /**
+   * DIFC: value of currentThread's inSecureRegion variable
+   * Also contains the capabilities that are shared by all threads
+   */
+  public boolean inSecureRegion;
+  public long startSecureRegionCycles; // value of RDTSC when we last started a SR
+  // DIFC: TODO: trying this out since we need something there on VM startup to avoid assertion failures
+  public SRState currentSRState = new SRState(LabelSet.EMPTY, LabelSet.EMPTY); //current state of the SR or the thread if outside the SR
+  /*Airavat: value of the current invocation number*/
+  public long invocation_number;
+  public boolean inMapperRegion;
+  
+  /**
    * Create data object to be associated with an o/s kernel thread
    * (aka "virtual cpu" or "pthread").
    * @param id id that will be returned by getCurrentProcessorId() for
@@ -298,6 +312,35 @@
     previousThread = (GreenThread)activeThread;
     activeThread = (GreenThread)newThread;
 
+    // DIFC: get the current thread's value of inSecureRegion; set the previous thread's
+    if (DIFC.enabled && !DIFC.isAiravat) {
+      /*TODO: reset the labels if you are inside a secure region. Use the tcb syscall*/
+      previousThread.inSecureRegion = this.inSecureRegion;
+      this.inSecureRegion = ((GreenThread)activeThread).inSecureRegion;
+      
+      previousThread.currentSRState=this.currentSRState;
+      this.currentSRState=((GreenThread)activeThread).currentSRState;
+      
+      // if we were in a secure region, but are now out, record the time
+      if (previousThread.inSecureRegion && !this.inSecureRegion) {
+        long elapsed = Magic.getTimeBase() - startSecureRegionCycles;
+        DIFC.totalCyclesInSecureRegions += elapsed;
+      // if we just started a secure region, start the time
+      } else if (!previousThread.inSecureRegion && this.inSecureRegion) {
+        startSecureRegionCycles = Magic.getTimeBase();
+      }
+    }
+    
+    /*Airavat: set the invocation number during the thread switch*/
+    if(DIFC.isAiravat && DIFC.enabled){
+      previousThread.invocation_number=this.invocation_number;
+      this.invocation_number=((GreenThread)activeThread).invocation_number;
+      previousThread.inMapperRegion = this.inMapperRegion;
+      this.inMapperRegion = ((GreenThread)activeThread).inMapperRegion;
+      //previousThread.currentSRState=this.currentSRState;
+      //this.currentSRState=((GreenThread)activeThread).currentSRState;
+    }
+    
     if (!previousThread.isDaemonThread() && idleProcessor != null && !readyQueue.isEmpty()) {
       // if we've got too much work, transfer some of it to another
       // processor that has nothing to do
Index: rvm/src/org/jikesrvm/scheduler/greenthreads/GreenThread.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/greenthreads/GreenThread.java	(revision 4)
+++ rvm/src/org/jikesrvm/scheduler/greenthreads/GreenThread.java	(working copy)
@@ -23,6 +23,9 @@
 import org.jikesrvm.runtime.Entrypoints;
 import org.jikesrvm.runtime.Magic;
 import org.jikesrvm.runtime.Time;
+import org.jikesrvm.scheduler.DIFC;
+import org.jikesrvm.scheduler.LabelSet;
+import org.jikesrvm.scheduler.SRState;
 import org.jikesrvm.scheduler.Lock;
 import org.jikesrvm.scheduler.Processor;
 import org.jikesrvm.scheduler.ProcessorLock;
@@ -91,8 +94,28 @@
    */
   public GreenProcessor processorAffinity;
 
-
   /**
+   * DIFC: whether current thread is in a secure region
+   * Capabilities are in arrays since we need to temporary
+   * store the Threads capabilities while inside a secure region
+   */
+  public boolean inSecureRegion;
+  /*Tracks whether a system call was made inside the SR. If yes, then we need to restore the 
+   * labels at the end of the SR. 
+   */
+  public boolean RESTORE_LABELS=false;
+  /* Also contains the capabilities that are shared by all threads*/
+  public static LabelSet commonPlusCapabilitySet;
+  public static LabelSet commonMinusCapabilitySet;
+  public long startSRCycles; // value from RDTSC when we started the current SR
+  /*Stack to store and restore the labels of nested SR's*/
+  public SRState currentSRState = new SRState(LabelSet.EMPTY, LabelSet.EMPTY);
+  
+  /*Airavat: include the current invocation number*/
+  public long invocation_number;
+  public boolean inMapperRegion; //airavats checks occur only when this var. is true
+  public LabelSet invocationAllocLabel = LabelSet.EMPTY;
+  /**
    * Create a thread with default stack and with the given name.
    */
   public GreenThread(String name) {
@@ -134,6 +157,19 @@
     super(stack, thread, name, daemon, system, priority);
     // for load balancing
     chosenProcessorId = (VM.runningVM ? Processor.getCurrentProcessorId() : 0);
+    
+    // DIFC: initialize stuff
+    // DIFC: TODO: can be removed because these variables are initialized where they're declared
+    /*
+    if (DIFC.enabled) {
+      inSecureRegion=false;
+      // DIFC: TODO: testing this
+      currentSRState=new SRState(LabelSet.EMPTY, LabelSet.EMPTY);
+    }
+    */
+    /*if(DIFC.isAiravat){
+      invocationAllocLabel= LabelSet.EMPTY;
+    }*/
   }
 
   /*
Index: rvm/src/org/jikesrvm/scheduler/greenthreads/FileSystem.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/greenthreads/FileSystem.java	(revision 4)
+++ rvm/src/org/jikesrvm/scheduler/greenthreads/FileSystem.java	(working copy)
@@ -24,6 +24,7 @@
 import static org.jikesrvm.runtime.SysCall.sysCall;
 import org.jikesrvm.runtime.Time;
 import org.jikesrvm.runtime.TimeoutException;
+import org.jikesrvm.scheduler.DIFC;
 import org.jikesrvm.util.StringUtilities;
 import org.vmmagic.pragma.Inline;
 
@@ -103,6 +104,9 @@
   public static int stat(String fileName, int kind) {
     // convert file name from unicode to filesystem character set
     // (assume file name is ascii, for now)
+    /*DIFC: Pass labels to the OS, check return code*/
+    DIFC.OSpassCurrentLabels();
+    //VM.sysWrite("stat");
     byte[] asciiName = StringUtilities.stringToBytesNullTerminated(fileName);
     int rc = sysCall.sysStat(asciiName, kind);
     if (VM.TraceFileSystem) VM.sysWrite("FileSystem.stat: name=" + fileName + " kind=" + kind + " rc=" + rc + "\n");
@@ -118,6 +122,10 @@
   public static int access(String fileName, int kind) {
     // convert file name from unicode to filesystem character set
     // (assume file name is ascii, for now)
+    /*DIFC: Pass labels to the OS, check return code*/
+    DIFC.OSpassCurrentLabels();
+    //VM.sysWrite("access");
+    
     byte[] asciiName = StringUtilities.stringToBytesNullTerminated(fileName);
 
     int rc = sysCall.sysAccess(asciiName, kind);
@@ -188,13 +196,16 @@
    * @param fd file descriptor
    * @return byte that was read (< -1: i/o error, -1: eof, >= 0: data)
    */
-  public static int readByte(int fd) {
+  public static int readByte(int fd){
     if (!blockingReadHack(fd)) {
       return -2;
     }
 
     // See readBytes() method for an explanation of how the read loop works.
-
+    /*DIFC: Pass labels to the OS, check return code*/
+    DIFC.OSpassCurrentLabels();
+    //VM.sysWrite("readByte");
+    
     for (; ;) {
       int b = sysCall.sysReadByte(fd);
       if (b >= -1) {
@@ -227,7 +238,10 @@
     if (!blockingWriteHack(fd)) {
       return -1;
     }
-
+    /*DIFC: Pass labels to the OS, check return code*/
+    DIFC.OSpassCurrentLabels();
+    //VM.sysWrite("writeByte");
+    
     // See writeBytes() for an explanation of how the write loop works
 
     for (; ;) {
@@ -280,7 +294,10 @@
     if (off < 0) {
       throw new IndexOutOfBoundsException();
     }
-
+    /*DIFC: Pass labels to the OS*/
+    DIFC.OSpassCurrentLabels();
+    //VM.sysWrite("readBytes*");
+    
     // trim request to fit array
     // note: this behavior is the way the JDK does it (as of version 1.1.3)
     // whereas the language spec says to throw IndexOutOfBounds exception...
@@ -378,7 +395,10 @@
     if (off < 0) {
       throw new IndexOutOfBoundsException();
     }
-
+    /*DIFC: Pass labels to the OS*/
+     DIFC.OSpassCurrentLabels();
+    //VM.sysWrite("writeBytes*");
+    
     // trim request to fit array
     // note: this behavior is the way the JDK does it (as of version 1.1.3)
     // whereas the language spec says to throw IndexOutOfBounds exception...
@@ -422,10 +442,16 @@
   }
 
   public static boolean sync(int fd) {
+    /*DIFC: Pass labels to the OS*/
+    /*TODO: not sure if we need this*/
+    //DIFC.OSpassCurrentLabels();
     return sysCall.sysSyncFile(fd) == 0;
   }
 
   public static int bytesAvailable(int fd) {
+    /*DIFC: Pass labels to the OS*/
+    /*TODO: not sure if we need this*/
+    //DIFC.OSpassCurrentLabels();
     return sysCall.sysBytesAvailable(fd);
   }
 
@@ -454,7 +480,8 @@
     if (VM.VerifyAssertions) {
       VM._assert(GreenScheduler.allProcessorsInitialized, "fd used before system is fully booted\n");
     }
-
+    /*DIFC: Pass labels to the OS*/
+    DIFC.OSpassCurrentLabels();
     int rc;
 
     // Set the file descriptor to be nonblocking.
Index: rvm/src/org/jikesrvm/scheduler/greenthreads/JikesRVMSocketImpl.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/greenthreads/JikesRVMSocketImpl.java	(revision 4)
+++ rvm/src/org/jikesrvm/scheduler/greenthreads/JikesRVMSocketImpl.java	(working copy)
@@ -627,9 +627,12 @@
       Socket.setSocketImplFactory(new SocketImplFactory() {
         public SocketImpl createSocketImpl() { return new JikesRVMSocketImpl(); }
       });
+      // DIFC: a fix of sorts to get sockets working
+      /*
       ServerSocket.setSocketFactory(new SocketImplFactory() {
         public SocketImpl createSocketImpl() { return new JikesRVMSocketImpl(); }
       });
+      */
       DatagramSocket.setDatagramSocketImplFactory(new DatagramSocketImplFactory() {
         public DatagramSocketImpl createDatagramSocketImpl() {
           throw new UnimplementedError("Need to implement JikesRVMDatagramSocketImpl");
Index: rvm/src/org/jikesrvm/scheduler/AiravatException.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/AiravatException.java	(revision 0)
+++ rvm/src/org/jikesrvm/scheduler/AiravatException.java	(revision 281)
@@ -0,0 +1,20 @@
+package org.jikesrvm.scheduler;
+
+import org.jikesrvm.VM;
+
+/*Exception class for violations of invocation-number
+ * in Airavat
+ */
+public class AiravatException extends SecurityException{
+
+
+  public AiravatException(String msg) {
+    super(msg);
+    if (DIFC.verbosity >= 3) {
+      VM.sysWrite("Creating a DIFC exception here:");
+      Scheduler.dumpStack();
+    }
+  }
+  /*Lets put the golden ratio. Is there a convention? */
+  private static final long serialVersionUID = 16180339887L;
+}
Index: rvm/src/org/jikesrvm/scheduler/DIFCException.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/DIFCException.java	(revision 0)
+++ rvm/src/org/jikesrvm/scheduler/DIFCException.java	(revision 281)
@@ -0,0 +1,21 @@
+package org.jikesrvm.scheduler;
+
+import org.jikesrvm.VM;
+
+/* DIFC
+ * This exception is thrown when ever the runtime detects
+ * a difc security violation 
+ */
+public class DIFCException extends SecurityException{
+
+  public DIFCException(String msg) {
+    super(msg);
+    // DIFC: TODO: change back to 2 or 3
+    if (DIFC.verbosity >= 1) {
+      VM.sysWrite("Creating a DIFC exception here:");
+      Scheduler.dumpStack();
+    }
+  }
+  /*Lets put the golden ratio. Is there a convention? */
+  private static final long serialVersionUID = 16180339887L;
+}
Index: rvm/src/org/jikesrvm/scheduler/SRState.java
===================================================================
--- rvm/src/org/jikesrvm/scheduler/SRState.java	(revision 0)
+++ rvm/src/org/jikesrvm/scheduler/SRState.java	(revision 281)
@@ -0,0 +1,81 @@
+package org.jikesrvm.scheduler;
+
+import org.vmmagic.pragma.Inline;
+import org.vmmagic.pragma.Uninterruptible;
+
+/*Class that holds the state of a security region, primarily the
+ * labels and capabilities. Useful in nested security regions. 
+ */
+@Uninterruptible
+public final class SRState {
+
+  LabelSet secrecySet;
+  LabelSet integritySet;
+  LabelSet plusCapabilitySet;
+  LabelSet minusCapabilitySet;
+  LabelSet secrecyAllocLabels;
+  LabelSet integrityAllocLabels;
+  boolean RESTORE_LABELS; //whether a system call was made in the SR
+  //The next and previous states: similar in functionality as in a stack
+  SRState child=null;
+  SRState parent=null;
+  
+  public SRState(){
+    clearState();
+  }
+  
+  public SRState(LabelSet secrecyAllocLabels, LabelSet integrityAllocLabels){
+    clearState();
+    this.secrecyAllocLabels = secrecyAllocLabels;
+    this.integrityAllocLabels = integrityAllocLabels;
+  }
+  
+  public SRState(LabelSet plusCapabilitySet,LabelSet minusCapabilitySet,
+                 LabelSet secrecySet, LabelSet integritySet, boolean restore,
+                 LabelSet secrecyAllocLabel, LabelSet integrityAllocLabel){
+    setState(plusCapabilitySet, minusCapabilitySet, secrecySet, integritySet, restore, secrecyAllocLabel, integrityAllocLabel);
+  }
+  
+  @Inline
+  public final void clearState() {
+    setState(LabelSet.EMPTY, LabelSet.EMPTY, LabelSet.EMPTY, LabelSet.EMPTY, false, null, null);
+  }
+  
+  @Inline
+  public final void setState(LabelSet plusCapabilitySet,LabelSet minusCapabilitySet,
+                       LabelSet secrecySet, LabelSet integritySet, boolean restore,
+                       LabelSet secrecyAllocLabel, LabelSet integrityAllocLabel){
+      
+    this.plusCapabilitySet=plusCapabilitySet;
+    this.minusCapabilitySet=minusCapabilitySet;
+    this.secrecySet=secrecySet;
+    this.integritySet=integritySet;
+    this.RESTORE_LABELS=restore;
+    this.secrecyAllocLabels=secrecyAllocLabel;
+    this.integrityAllocLabels=integrityAllocLabel;
+  }
+  @Inline
+  public LabelSet getSecrecyLabel(){return this.secrecySet;}
+  @Inline
+  public LabelSet getIntegrityLabel(){return this.integritySet;}
+  @Inline
+  public LabelSet getPlusCapability(){return this.plusCapabilitySet;}
+  @Inline
+  public LabelSet getMinusCapability(){return this.minusCapabilitySet;}
+  @Inline
+  public boolean shouldRestoreLabel(){return this.RESTORE_LABELS;}
+  @Inline
+  public LabelSet getSecrecyAllocLabel(){return this.secrecyAllocLabels;}
+  @Inline
+  public LabelSet getIntegrityAllocLabel(){return this.integrityAllocLabels;}
+
+  @Inline
+  public void setParentState(SRState p){this.parent=p;}
+  @Inline
+  public void setChildState(SRState c){this.child=c;}
+  @Inline
+  public SRState getParentState(){return this.parent;}
+  @Inline
+  public SRState getChildState(){return this.child;}
+  
+}
Index: rvm/src/org/jikesrvm/runtime/BootRecord.java
===================================================================
--- rvm/src/org/jikesrvm/runtime/BootRecord.java	(revision 4)
+++ rvm/src/org/jikesrvm/runtime/BootRecord.java	(working copy)
@@ -245,7 +245,14 @@
   public Address sysSetFdCloseOnExecIP;
 
   public Address sysAccessIP;
-
+  
+  // DIFC: system call for getting labels of a file
+  public Address sysPassLabelsIP;
+  public Address sysDropCapabilityIP;
+  public Address sysCreateAndAddLabelIP;
+  public Address sysCreateLabeledDirectoryIP;
+  public Address sysCreateLabeledFileIP;
+  public Address sysReplaceLabelsTCBIP;
   // mmap - memory mapping
   public Address sysMMapIP;
   public Address sysMMapErrnoIP;
Index: rvm/src/org/jikesrvm/runtime/RuntimeEntrypoints.java
===================================================================
--- rvm/src/org/jikesrvm/runtime/RuntimeEntrypoints.java	(revision 4)
+++ rvm/src/org/jikesrvm/runtime/RuntimeEntrypoints.java	(working copy)
@@ -444,7 +444,8 @@
    * @param type the type information for the class
    * @return the cloned object
    */
-  private static Object cloneClass2(Object obj, RVMType type) throws OutOfMemoryError {
+  // DIFC: made this public
+  public static Object cloneClass2(Object obj, RVMType type) throws OutOfMemoryError {
     RVMClass cls = type.asClass();
     Object newObj = resolvedNewScalar(cls);
     for (RVMField f : cls.getInstanceFields()) {
Index: rvm/src/org/jikesrvm/runtime/SysCall.java
===================================================================
--- rvm/src/org/jikesrvm/runtime/SysCall.java	(revision 4)
+++ rvm/src/org/jikesrvm/runtime/SysCall.java	(working copy)
@@ -144,6 +144,38 @@
   @SysCallTemplate
   public abstract int sysAccess(byte[] name, int kind);
 
+  /* DIFC: pass current labels to the OS*/
+  @SysCallTemplate
+  public abstract int sysPassLabels(long[] secrecySet, int sec_len, long[] integritySet, int int_len);
+
+  /*DIFC: unchecked replace label function*/ 
+  @SysCallTemplate
+  public abstract int sysReplaceLabelsTCB(long[] secrecySet, int sec_len, long[] integritySet, int int_len);
+
+  /* DIFC: ask the OS to drop the thread capability
+   * flag=0: drop permanently
+   * flag=1: drop temporarily
+   */
+  @SysCallTemplate
+  public abstract int sysDropCapability(long[] labels, int length, int type, int flag);
+
+  /* DIFC: ask the OS to create a new capability/label and add it to the
+   * threads capability set or the program's capability set (i.e shared by all threads)
+   * region=0: add only to the thread
+   * region=1: add to the program
+   * type=0: plusCapabilty: type=1: minusCapability: type=2: both-capability
+   */
+  @SysCallTemplate
+  public abstract int sysCreateAndAddLabel(int type, int region);
+
+  /*Custom call to create a labeled directory*/
+  @SysCallTemplate
+  public abstract int sysCreateLabeledDirectory(byte[] pname, int mode, long[] secrecySet, int sec_len, long[] integritySet, int int_len);
+
+  /*Custom call to create a labeled directory*/
+  @SysCallTemplate
+  public abstract int sysCreateLabeledFile(byte[] pname, int mode, long[] secrecySet, int sec_len, long[] integritySet, int int_len);
+
   // mmap - memory mapping
   @SysCallTemplate
   public abstract Address sysMMap(Address start, Extent length, int protection, int flags, int fd, Offset offset);
Index: rvm/src/org/jikesrvm/runtime/Entrypoints.java
===================================================================
--- rvm/src/org/jikesrvm/runtime/Entrypoints.java	(revision 4)
+++ rvm/src/org/jikesrvm/runtime/Entrypoints.java	(working copy)
@@ -19,6 +19,7 @@
 import org.jikesrvm.classloader.RVMField;
 import org.jikesrvm.classloader.RVMMethod;
 import org.jikesrvm.classloader.NormalMethod;
+import org.jikesrvm.scheduler.LabelSet;
 
 /**
  * Fields and methods of the virtual machine that are needed by
@@ -273,6 +274,151 @@
   public static final NormalMethod getstaticReadBarrierMethod =
       getMethod(org.jikesrvm.mm.mminterface.MemoryManager.class, "getstaticReadBarrier", "(Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;");
 
+  // DIFC: barriers
+
+  public static final NormalMethod difcReadBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "readBarrierInsideSR", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcReadBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "readBarrierOutsideSR", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcReadBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "readBarrierDynamic", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod difcWriteBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "writeBarrierInsideSR", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcWriteBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "writeBarrierOutsideSR", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcWriteBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "writeBarrierDynamic", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod difcStaticReadBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticReadBarrierInsideSR", "(I)V");
+  /*public static final NormalMethod difcStaticReadBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticReadBarrierOutsideSR", "(I)V");*/
+  public static final NormalMethod difcStaticReadBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticReadBarrierDynamic", "(I)V");
+  
+  public static final NormalMethod difcStaticWriteBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticWriteBarrierInsideSR", "(I)V");
+  /*public static final NormalMethod difcStaticWriteBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticWriteBarrierOutsideSR", "(I)V");*/
+  public static final NormalMethod difcStaticWriteBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticWriteBarrierDynamic", "(I)V");
+  
+  public static final NormalMethod difcAllocBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "allocBarrierInsideSR", "(Ljava/lang/Object;)V");
+  /*public static final NormalMethod difcAllocBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "allocBarrierOutsideSR", "(Ljava/lang/Object;)V");*/
+  public static final NormalMethod difcAllocBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "allocBarrierDynamic", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod difcReadBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "readBarrierInsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcReadBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "readBarrierOutsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcReadBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "readBarrierDynamicDebug", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod difcWriteBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "writeBarrierInsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcWriteBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "writeBarrierOutsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcWriteBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "writeBarrierDynamicDebug", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod difcStaticReadBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticReadBarrierInsideSRDebug", "(I)V");
+  public static final NormalMethod difcStaticReadBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticReadBarrierOutsideSRDebug", "(I)V");
+  public static final NormalMethod difcStaticReadBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticReadBarrierDynamicDebug", "(I)V");
+  
+  public static final NormalMethod difcStaticWriteBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticWriteBarrierInsideSRDebug", "(I)V");
+  public static final NormalMethod difcStaticWriteBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticWriteBarrierOutsideSRDebug", "(I)V");
+  public static final NormalMethod difcStaticWriteBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "staticWriteBarrierDynamicDebug", "(I)V");
+  
+  public static final NormalMethod difcAllocBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "allocBarrierInsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcAllocBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "allocBarrierOutsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod difcAllocBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "allocBarrierDynamicDebug", "(Ljava/lang/Object;)V");
+
+  // Airavat: barriers
+
+  public static final NormalMethod airavatReadBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatReadBarrierInsideSR", "(Ljava/lang/Object;)V");
+  /*public static final NormalMethod airavatReadBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatReadBarrierOutsideSR", "(Ljava/lang/Object;)V");*/
+  public static final NormalMethod airavatReadBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatReadBarrierDynamic", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod airavatWriteBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatWriteBarrierInsideSR", "(Ljava/lang/Object;)V");
+  /*public static final NormalMethod airavatWriteBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatWriteBarrierOutsideSR", "(Ljava/lang/Object;)V");*/
+  public static final NormalMethod airavatWriteBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatWriteBarrierDynamic", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod airavatStaticReadBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticReadBarrierInsideSR", "(I)V");
+  /*public static final NormalMethod airavatStaticReadBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticReadBarrierOutsideSR", "(I)V");*/
+  public static final NormalMethod airavatStaticReadBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticReadBarrierDynamic", "(I)V");
+  
+  public static final NormalMethod airavatStaticWriteBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticWriteBarrierInsideSR", "(I)V");
+  /*public static final NormalMethod airavatStaticWriteBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticWriteBarrierOutsideSR", "(I)V");*/
+  public static final NormalMethod airavatStaticWriteBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticWriteBarrierDynamic", "(I)V");
+  
+  public static final NormalMethod airavatAllocBarrierInsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatAllocBarrierInsideSR", "(Ljava/lang/Object;)V");
+  /*public static final NormalMethod airavatAllocBarrierOutsideSRMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatAllocBarrierOutsideSR", "(Ljava/lang/Object;)V");*/
+  public static final NormalMethod airavatAllocBarrierDynamicMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatAllocBarrierDynamic", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod airavatReadBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatReadBarrierInsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod airavatReadBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatReadBarrierOutsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod airavatReadBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatReadBarrierDynamicDebug", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod airavatWriteBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatWriteBarrierInsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod airavatWriteBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatWriteBarrierOutsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod airavatWriteBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatWriteBarrierDynamicDebug", "(Ljava/lang/Object;)V");
+  
+  public static final NormalMethod airavatStaticReadBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticReadBarrierInsideSRDebug", "(I)V");
+  public static final NormalMethod airavatStaticReadBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticReadBarrierOutsideSRDebug", "(I)V");
+  public static final NormalMethod airavatStaticReadBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticReadBarrierDynamicDebug", "(I)V");
+  
+  public static final NormalMethod airavatStaticWriteBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticWriteBarrierInsideSRDebug", "(I)V");
+  public static final NormalMethod airavatStaticWriteBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticWriteBarrierOutsideSRDebug", "(I)V");
+  public static final NormalMethod airavatStaticWriteBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatStaticWriteBarrierDynamicDebug", "(I)V");
+  
+  public static final NormalMethod airavatAllocBarrierInsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatAllocBarrierInsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod airavatAllocBarrierOutsideSRDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatAllocBarrierOutsideSRDebug", "(Ljava/lang/Object;)V");
+  public static final NormalMethod airavatAllocBarrierDynamicDebugMethod =
+    getMethod(org.jikesrvm.scheduler.DIFC.class, "airavatAllocBarrierDynamicDebug", "(Ljava/lang/Object;)V");
+
+  
   public static final NormalMethod modifyCheckMethod =
       getMethod(org.jikesrvm.mm.mminterface.MemoryManager.class, "modifyCheck", "(Ljava/lang/Object;)V");
 
Index: rvm/src/org/jikesrvm/objectmodel/JavaHeader.java
===================================================================
--- rvm/src/org/jikesrvm/objectmodel/JavaHeader.java	(revision 4)
+++ rvm/src/org/jikesrvm/objectmodel/JavaHeader.java	(working copy)
@@ -19,9 +19,11 @@
 import org.jikesrvm.classloader.RVMArray;
 import org.jikesrvm.classloader.RVMClass;
 import org.jikesrvm.classloader.RVMType;
+import org.jikesrvm.mm.mminterface.MemoryManager;
 import org.jikesrvm.mm.mminterface.MemoryManagerConstants;
 import org.jikesrvm.runtime.Magic;
 import org.jikesrvm.runtime.Memory;
+import org.jikesrvm.scheduler.DIFC;
 import org.jikesrvm.scheduler.Lock;
 import org.jikesrvm.scheduler.ThinLock;
 import org.jikesrvm.scheduler.RVMThread;
@@ -300,7 +302,16 @@
         }
       }
     }
-
+    
+    // DIFC: add 8 bytes
+    // DIFC: TODO: don't hard-code 8
+    if (DIFC.enabled &&
+        VM.difcBarriers &&
+        !VM.difcNoStaticOrAllocBarriers &&
+        MemoryManager.isLabeled(start)) {
+      return start.plus(OBJECT_REF_OFFSET).plus(8).toObjectReference();
+    }
+    
     return start.plus(OBJECT_REF_OFFSET).toObjectReference();
   }
 
Index: rvm/src/org/jikesrvm/classloader/Atom.java
===================================================================
--- rvm/src/org/jikesrvm/classloader/Atom.java	(revision 4)
+++ rvm/src/org/jikesrvm/classloader/Atom.java	(working copy)
@@ -756,6 +756,8 @@
    * (ie a class that must be loaded by the bootstrap class loader)
    */
   @Pure
+  // DIFC: made uninterruptible
+  @Uninterruptible
   public boolean isBootstrapClassDescriptor() {
     non_bootstrap_outer:
     for (final byte[] test : NON_BOOTSTRAP_CLASS_PREFIX_SET) {
@@ -786,6 +788,8 @@
    * it might make it impossible to recompile.
    */
   @Pure
+  // DIFC: made uninterruptible
+  @Uninterruptible
   public boolean isRVMDescriptor() {
     outer:
     for (final byte[] test : RVM_CLASS_PREFIXES) {
Index: rvm/src/org/jikesrvm/classloader/RVMMethod.java
===================================================================
--- rvm/src/org/jikesrvm/classloader/RVMMethod.java	(revision 4)
+++ rvm/src/org/jikesrvm/classloader/RVMMethod.java	(working copy)
@@ -617,6 +617,11 @@
     return hasPureAnnotation();
   }
 
+  /** DIFC: method has no side effects? */
+  public final boolean hasNoSideEffects() {
+    return hasNoSideEffectsAnnotation();
+  }
+
   /**
    * Has this method been marked as forbidden to inline?
    * ie., it is marked with the <CODE>NoInline</CODE> annotation or
Index: rvm/src/org/jikesrvm/classloader/AnnotatedElement.java
===================================================================
--- rvm/src/org/jikesrvm/classloader/AnnotatedElement.java	(revision 4)
+++ rvm/src/org/jikesrvm/classloader/AnnotatedElement.java	(working copy)
@@ -305,6 +305,13 @@
   }
 
   /**
+   * DIFC: Return true if this element has a NoSideEffects annotation.
+   */
+  public final boolean hasNoSideEffectsAnnotation() {
+    return isAnnotationPresent(org.vmmagic.pragma.NoSideEffects.class);
+  }
+
+  /**
    * Return true if this element has a NoNullCheck annotation.
    * @see org.vmmagic.pragma.NoNullCheck
    */
Index: rvm/src/org/jikesrvm/classloader/NormalMethod.java
===================================================================
--- rvm/src/org/jikesrvm/classloader/NormalMethod.java	(revision 4)
+++ rvm/src/org/jikesrvm/classloader/NormalMethod.java	(working copy)
@@ -121,6 +121,9 @@
    */
   private final int[] lineNumberMap;
 
+  /** DIFC: does this method execute when we're in a secure region? */
+  public boolean staticallyInSecureRegion;
+  
   // Extra fields for on-stack replacement
   /** Possible OSR bytecode array consisting of prologue and original bytecodes */
   private static final HashMapRVM<NormalMethod, byte[]> synthesizedBytecodes =
Index: rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java
===================================================================
--- rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java	(revision 4)
+++ rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompilerImpl.java	(working copy)
@@ -48,6 +48,7 @@
 import org.jikesrvm.runtime.RuntimeEntrypoints;
 import org.jikesrvm.runtime.Statics;
 import org.jikesrvm.runtime.Magic;
+import org.jikesrvm.scheduler.DIFC;
 import org.jikesrvm.scheduler.RVMThread;
 import org.vmmagic.pragma.Inline;
 import org.vmmagic.pragma.Uninterruptible;
@@ -463,11 +464,26 @@
   * array loads
   */
 
+  /** DIFC: helper method for all types of array stores */
+  @Inline
+  private final void insertDIFCReadBarrier() {
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.READ_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_RegDisp(SP, ONE_SLOT); // push object ref
+      //asm.emitPUSH_RegDisp(SP, ONE_SLOT); // push index (which is now one lower)
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+  }
+  
   /**
    * Emit code to load from an int array
    */
   @Override
   protected final void emit_iaload() {
+    // DIFC: insert read barrier
+    insertDIFCReadBarrier();
+    
     asm.emitPOP_Reg(T0); // T0 is array index
     asm.emitPOP_Reg(S0); // S0 is array ref
     if (generateBoundsChecks) genBoundsCheck(asm, T0, S0); // T0 is index, S0 is address of array
@@ -480,6 +496,9 @@
    */
   @Override
   protected final void emit_faload() {
+    // DIFC: insert read barrier
+    insertDIFCReadBarrier();
+    
     // identical to iaload - code replicated for BaseBase compiler performance
     asm.emitPOP_Reg(T0); // T0 is array index
     asm.emitPOP_Reg(S0); // S0 is array ref
@@ -493,6 +512,9 @@
    */
   @Override
   protected final void emit_aaload() {
+    // DIFC: insert read barrier
+    insertDIFCReadBarrier();
+    
     // identical to iaload - code replicated for BaseBase compiler performance
     asm.emitPOP_Reg(T0); // T0 is array index
     asm.emitPOP_Reg(S0); // S0 is array ref
@@ -510,6 +532,9 @@
    */
   @Override
   protected final void emit_caload() {
+    // DIFC: insert read barrier
+    insertDIFCReadBarrier();
+    
     asm.emitPOP_Reg(T0); // T0 is array index
     asm.emitPOP_Reg(S0); // S0 is array ref
     if (generateBoundsChecks) genBoundsCheck(asm, T0, S0); // T0 is index, S0 is address of array
@@ -523,6 +548,9 @@
    */
   @Override
   protected final void emit_saload() {
+    // DIFC: insert read barrier
+    insertDIFCReadBarrier();
+    
     asm.emitPOP_Reg(T0); // T0 is array index
     asm.emitPOP_Reg(S0); // S0 is array ref
     if (generateBoundsChecks) genBoundsCheck(asm, T0, S0); // T0 is index, S0 is address of array
@@ -536,6 +564,9 @@
    */
   @Override
   protected final void emit_baload() {
+    // DIFC: insert read barrier
+    insertDIFCReadBarrier();
+    
     asm.emitPOP_Reg(T0); // T0 is array index
     asm.emitPOP_Reg(S0); // S0 is array ref
     if (generateBoundsChecks) genBoundsCheck(asm, T0, S0); // T0 is index, S0 is address of array
@@ -549,6 +580,9 @@
    */
   @Override
   protected final void emit_laload() {
+    // DIFC: insert read barrier
+    insertDIFCReadBarrier();
+    
     asm.emitPOP_Reg(T0); // T0 is array index
     asm.emitPOP_Reg(S0); // S0 is array ref
     if (SSE2_BASE) {
@@ -569,6 +603,9 @@
    */
   @Override
   protected final void emit_daload() {
+    // DIFC: insert read barrier
+    insertDIFCReadBarrier();
+    
     // identical to laload - code replicated for BaseBase compiler performance
     asm.emitPOP_Reg(T0); // T0 is array index
     asm.emitPOP_Reg(S0); // S0 is array ref
@@ -589,11 +626,26 @@
   * array stores
   */
 
+  /** DIFC: helper method for all types of array stores */
+  @Inline
+  private final void insertDIFCWriteBarrier(Offset numSlots) {
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.WRITE_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_RegDisp(SP, numSlots); // push object ref
+      //asm.emitPUSH_RegDisp(SP, numSlots); // push index (which is now one lower)
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+  }
+  
   /**
    * Emit code to store to an int array
    */
   @Override
   protected final void emit_iastore() {
+    // DIFC: insert write barrier
+    insertDIFCWriteBarrier(TWO_SLOTS);
+    
     Barriers.compileModifyCheck(asm, 8);
     asm.emitPOP_Reg(T1); // T1 is the value
     asm.emitPOP_Reg(T0); // T0 is array index
@@ -607,6 +659,9 @@
    */
   @Override
   protected final void emit_fastore() {
+    // DIFC: insert write barrier
+    insertDIFCWriteBarrier(TWO_SLOTS);
+    
     // identical to iastore - code replicated for BaseBase compiler performance
     Barriers.compileModifyCheck(asm, 8);
     asm.emitPOP_Reg(T1); // T1 is the value
@@ -622,6 +677,9 @@
    */
   @Override
   protected final void emit_aastore() {
+    // DIFC: insert write barrier
+    insertDIFCWriteBarrier(TWO_SLOTS);
+    
     Barriers.compileModifyCheck(asm, 8);
     asm.emitPUSH_RegDisp(SP, TWO_SLOTS); // duplicate array ref
     asm.emitPUSH_RegDisp(SP, ONE_SLOT);  // duplicate object value
@@ -647,6 +705,9 @@
    */
   @Override
   protected final void emit_castore() {
+    // DIFC: insert write barrier
+    insertDIFCWriteBarrier(TWO_SLOTS);
+    
     Barriers.compileModifyCheck(asm, 8);
     asm.emitPOP_Reg(T1); // T1 is the value
     asm.emitPOP_Reg(T0); // T0 is array index
@@ -661,6 +722,9 @@
    */
   @Override
   protected final void emit_sastore() {
+    // DIFC: insert write barrier
+    insertDIFCWriteBarrier(TWO_SLOTS);
+    
     // identical to castore - code replicated for BaseBase compiler performance
     Barriers.compileModifyCheck(asm, 8);
     asm.emitPOP_Reg(T1); // T1 is the value
@@ -676,6 +740,9 @@
    */
   @Override
   protected final void emit_bastore() {
+    // DIFC: insert write barrier
+    insertDIFCWriteBarrier(TWO_SLOTS);
+    
     Barriers.compileModifyCheck(asm, 8);
     asm.emitPOP_Reg(T1); // T1 is the value
     asm.emitPOP_Reg(T0); // T0 is array index
@@ -689,6 +756,9 @@
    */
   @Override
   protected final void emit_lastore() {
+    // DIFC: insert write barrier
+    insertDIFCWriteBarrier(THREE_SLOTS);
+    
     Barriers.compileModifyCheck(asm, 12);
     if (SSE2_BASE) {
       asm.emitMOVQ_Reg_RegInd(XMM0,SP);            // XMM0 is the value
@@ -718,6 +788,9 @@
    */
   @Override
   protected final void emit_dastore() {
+    // DIFC: insert write barrier
+    insertDIFCWriteBarrier(THREE_SLOTS);
+
     // identical to lastore - code replicated for BaseBase compiler performance
     Barriers.compileModifyCheck(asm, 12);
     if (SSE2_BASE) {
@@ -2390,6 +2463,15 @@
    */
   @Override
   protected final void emit_unresolved_getstatic(FieldReference fieldRef) {
+
+    // DIFC: static read barrier
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.STATIC_READ_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_Imm(fieldRef.getId()); // field ref ID
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+    
     emitDynamicLinkingSequence(asm, T0, fieldRef, true);
     if (MemoryManagerConstants.NEEDS_GETSTATIC_READ_BARRIER && !fieldRef.getFieldContentsType().isPrimitiveType()) {
       Barriers.compileGetstaticBarrier(asm, T0, fieldRef.getId());
@@ -2413,6 +2495,15 @@
   protected final void emit_resolved_getstatic(FieldReference fieldRef) {
     RVMField field = fieldRef.peekResolvedField();
     Offset fieldOffset = field.getOffset();
+    
+    // DIFC: static read barrier
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.STATIC_READ_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_Imm(fieldRef.getId()); // field ref ID
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+    
     if (MemoryManagerConstants.NEEDS_GETSTATIC_READ_BARRIER && !fieldRef.getFieldContentsType().isPrimitiveType() && !field.isUntraced()) {
       Barriers.compileGetstaticBarrierImm(asm, fieldOffset, fieldRef.getId());
       return;
@@ -2432,6 +2523,15 @@
    */
   @Override
   protected final void emit_unresolved_putstatic(FieldReference fieldRef) {
+    
+    // DIFC: static write barrier
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.STATIC_WRITE_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_Imm(fieldRef.getId()); // field ref ID
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+    
     emitDynamicLinkingSequence(asm, T0, fieldRef, true);
     if (MemoryManagerConstants.NEEDS_PUTSTATIC_WRITE_BARRIER && fieldRef.getFieldContentsType().isReferenceType()) {
       Barriers.compilePutstaticBarrier(asm, T0, fieldRef.getId());
@@ -2456,6 +2556,15 @@
   protected final void emit_resolved_putstatic(FieldReference fieldRef) {
     RVMField field = fieldRef.peekResolvedField();
     Offset fieldOffset = field.getOffset();
+    
+    // DIFC: static write barrier
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.STATIC_WRITE_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_Imm(fieldRef.getId()); // field ref ID
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+    
     if (MemoryManagerConstants.NEEDS_PUTSTATIC_WRITE_BARRIER && field.isReferenceType() && !field.isUntraced()) {
       Barriers.compilePutstaticBarrierImm(asm, fieldOffset, fieldRef.getId());
       asm.emitADD_Reg_Imm(SP, WORDSIZE);
@@ -2477,7 +2586,18 @@
   @Override
   protected final void emit_unresolved_getfield(FieldReference fieldRef) {
     TypeReference fieldType = fieldRef.getFieldContentsType();
+    
+    // DIFC: insert read barrier
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.READ_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_RegInd(SP);
+      //asm.emitPUSH_Imm(fieldRef.getId());
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+
     emitDynamicLinkingSequence(asm, T0, fieldRef, true);
+
     if (fieldType.isReferenceType()) {
       // 32bit reference load
       if (MemoryManagerConstants.NEEDS_READ_BARRIER) {
@@ -2538,6 +2658,16 @@
     TypeReference fieldType = fieldRef.getFieldContentsType();
     RVMField field = fieldRef.peekResolvedField();
     Offset fieldOffset = field.getOffset();
+    
+    // DIFC: insert read barrier
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.READ_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_RegInd(SP);
+      //asm.emitPUSH_Imm(fieldRef.getId());
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+    
     if (field.isReferenceType()) {
       // 32bit reference load
       if (MemoryManagerConstants.NEEDS_READ_BARRIER && !field.isUntraced()) {
@@ -2596,6 +2726,20 @@
   @Override
   protected final void emit_unresolved_putfield(FieldReference fieldRef) {
     TypeReference fieldType = fieldRef.getFieldContentsType();
+    
+    // DIFC: insert write barrier
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.WRITE_BARRIER);
+    if (barrierMethod != null) {
+      if (fieldRef.getSize() == BYTES_IN_LONG) {
+        asm.emitPUSH_RegDisp(SP, TWO_SLOTS);
+      } else {
+        asm.emitPUSH_RegDisp(SP, ONE_SLOT);
+      }
+      //asm.emitPUSH_Imm(fieldRef.getId());
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+    
     emitDynamicLinkingSequence(asm, T0, fieldRef, true);
     if (fieldType.isReferenceType()) {
       // 32bit reference store
@@ -2651,6 +2795,20 @@
   protected final void emit_resolved_putfield(FieldReference fieldRef) {
     RVMField field = fieldRef.peekResolvedField();
     Offset fieldOffset = field.getOffset();
+    
+    // DIFC: insert write barrier
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.WRITE_BARRIER);
+    if (barrierMethod != null) {
+      if (field.getSize() == BYTES_IN_LONG) {
+        asm.emitPUSH_RegDisp(SP, TWO_SLOTS);
+      } else {
+        asm.emitPUSH_RegDisp(SP, ONE_SLOT);
+      }
+      //asm.emitPUSH_Imm(fieldRef.getId());
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+    
     Barriers.compileModifyCheck(asm, 4);
     if (field.isReferenceType()) {
       // 32bit reference store
@@ -2919,6 +3077,17 @@
   * other object model functions
   */
 
+  /** DIFC: helper method for adding allocation barriers */
+  @Inline
+  private final void difcAllocationBarrierHelper() {
+    NormalMethod barrierMethod = DIFC.addBarriers(method, DIFC.ALLOC_BARRIER);
+    if (barrierMethod != null) {
+      asm.emitPUSH_Reg(T0); // push object ref
+      genParameterRegisterLoad(asm, 1);
+      asm.emitCALL_Abs(Magic.getTocPointer().plus(barrierMethod.getOffset()));
+    }
+  }
+
   /**
    * Emit code to allocate a scalar object
    * @param typeRef the RVMClass to instantiate
@@ -2930,7 +3099,9 @@
     int whichAllocator = MemoryManager.pickAllocator(typeRef, method);
     int align = ObjectModel.getAlignment(typeRef, false);
     int offset = ObjectModel.getOffsetForAlignment(typeRef, false);
-    int site = MemoryManager.getAllocationSite(true);
+    // DIFC: allocate labeled object if in secure region
+    int site = MemoryManager.getDIFCAllocationSite(true, method);
+    //int site = MemoryManager.getAllocationSite(true);
     asm.emitPUSH_Imm(instanceSize);
     asm.emitPUSH_Abs(Magic.getTocPointer().plus(tibOffset));       // put tib on stack
     asm.emitPUSH_Imm(typeRef.hasFinalizer() ? 1 : 0); // does the class have a finalizer?
@@ -2941,6 +3112,9 @@
     genParameterRegisterLoad(asm, 7);                  // pass 7 parameter words
     asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.resolvedNewScalarMethod.getOffset()));
     asm.emitPUSH_Reg(T0);
+    
+    // DIFC: allocation barrier
+    difcAllocationBarrierHelper();
   }
 
   /**
@@ -2949,12 +3123,17 @@
    */
   @Override
   protected final void emit_unresolved_new(TypeReference typeRef) {
-    int site = MemoryManager.getAllocationSite(true);
+    // DIFC: allocate labeled object if in secure region
+    int site = MemoryManager.getDIFCAllocationSite(true, method);
+    //int site = MemoryManager.getAllocationSite(true);
     asm.emitPUSH_Imm(typeRef.getId());
     asm.emitPUSH_Imm(site);                 // site
     genParameterRegisterLoad(asm, 2);            // pass 2 parameter words
     asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.unresolvedNewScalarMethod.getOffset()));
     asm.emitPUSH_Reg(T0);
+    
+    // DIFC: allocation barrier
+    difcAllocationBarrierHelper();
   }
 
   /**
@@ -2967,7 +3146,9 @@
     Offset tibOffset = array.getTibOffset();
     int headerSize = ObjectModel.computeHeaderSize(array);
     int whichAllocator = MemoryManager.pickAllocator(array, method);
-    int site = MemoryManager.getAllocationSite(true);
+    // DIFC: allocate labeled object if in secure region
+    int site = MemoryManager.getDIFCAllocationSite(true, method);
+    //int site = MemoryManager.getAllocationSite(true);
     int align = ObjectModel.getAlignment(array);
     int offset = ObjectModel.getOffsetForAlignment(array, false);
     // count is already on stack- nothing required
@@ -2981,6 +3162,9 @@
     genParameterRegisterLoad(asm, 8);             // pass 8 parameter words
     asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.resolvedNewArrayMethod.getOffset()));
     asm.emitPUSH_Reg(T0);
+    
+    // DIFC: allocation barrier
+    difcAllocationBarrierHelper();
   }
 
   /**
@@ -2989,13 +3173,18 @@
    */
   @Override
   protected final void emit_unresolved_newarray(TypeReference tRef) {
-    int site = MemoryManager.getAllocationSite(true);
+    // DIFC: allocate labeled object if in secure region
+    int site = MemoryManager.getDIFCAllocationSite(true, method);
+    //int site = MemoryManager.getAllocationSite(true);
     // count is already on stack- nothing required
     asm.emitPUSH_Imm(tRef.getId());
     asm.emitPUSH_Imm(site);                 // site
     genParameterRegisterLoad(asm, 3);            // pass 3 parameter words
     asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.unresolvedNewArrayMethod.getOffset()));
     asm.emitPUSH_Reg(T0);
+    
+    // DIFC: allocation barrier
+    difcAllocationBarrierHelper();
   }
 
   /**
@@ -3023,6 +3212,9 @@
       asm.emitPOP_Reg(S0); // clear stack of dimensions (todo use and add immediate to do this)
     }
     asm.emitPUSH_Reg(T0);                       // push array ref on stack
+    
+    // DIFC: allocation barrier
+    difcAllocationBarrierHelper();
   }
 
   /**
Index: rvm/src/org/jikesrvm/compilers/opt/Simplifier.java
===================================================================
--- rvm/src/org/jikesrvm/compilers/opt/Simplifier.java	(revision 4)
+++ rvm/src/org/jikesrvm/compilers/opt/Simplifier.java	(working copy)
@@ -3233,7 +3233,8 @@
           }
         }
       }
-      if (methOp.hasPreciseTarget() && methOp.getTarget().isPure()) {
+      // DIFC: also for methods without side effects
+      if (methOp.hasPreciseTarget() && (methOp.getTarget().isPure() || methOp.getTarget().hasNoSideEffects())) {
         // Look for a precise method call to a pure method with all constant arguments
         RVMMethod method = methOp.getTarget();
         int n = Call.getNumberOfParams(s);
Index: rvm/src/org/jikesrvm/compilers/opt/driver/OptimizationPlanner.java
===================================================================
--- rvm/src/org/jikesrvm/compilers/opt/driver/OptimizationPlanner.java	(revision 4)
+++ rvm/src/org/jikesrvm/compilers/opt/driver/OptimizationPlanner.java	(working copy)
@@ -45,6 +45,7 @@
 import org.jikesrvm.compilers.opt.escape.EscapeTransformations;
 import org.jikesrvm.compilers.opt.hir2lir.ConvertHIRtoLIR;
 import org.jikesrvm.compilers.opt.hir2lir.ExpandRuntimeServices;
+import org.jikesrvm.compilers.opt.hir2lir.RemoveRedundantDIFCBarriers;
 import org.jikesrvm.compilers.opt.regalloc.CoalesceMoves;
 import org.jikesrvm.compilers.opt.ssa.GCP;
 import org.jikesrvm.compilers.opt.ssa.LeaveSSA;
@@ -459,6 +460,13 @@
       // Convert high level place holder instructions into actual instrumentation
       addComponent(p, new LowerInstrumentation());
     }
+    
+    // DIFC: do redundant barrier elimination again
+    if (VM.difcBarriers &&
+        !VM.difcNoRedundancyElimination &&
+        !VM.difcNoLateRedundancyElimination) {
+      addComponent(p, new RemoveRedundantDIFCBarriers());
+    }
   }
 
   // Helper functions for constructing the masterPlan.
Index: rvm/src/org/jikesrvm/compilers/opt/escape/SimpleEscape.java
===================================================================
--- rvm/src/org/jikesrvm/compilers/opt/escape/SimpleEscape.java	(revision 4)
+++ rvm/src/org/jikesrvm/compilers/opt/escape/SimpleEscape.java	(working copy)
@@ -485,7 +485,8 @@
           return true;
         }
         // pure methods don't let object escape
-        if (mop.getTarget().isPure()) {
+        // DIFC: also for methods without side effects
+        if (mop.getTarget().isPure() || mop.getTarget().hasNoSideEffects()) {
           return false;
         }
         // try to get a method summary for the called method
Index: rvm/src/org/jikesrvm/compilers/opt/ir/Instruction.java
===================================================================
--- rvm/src/org/jikesrvm/compilers/opt/ir/Instruction.java	(revision 4)
+++ rvm/src/org/jikesrvm/compilers/opt/ir/Instruction.java	(working copy)
@@ -876,6 +876,9 @@
   public boolean isPureCall() {
     if (operator.isCall()) {
       MethodOperand methOp = Call.getMethod(this);
+      // DIFC: we DON'T include methods without side effects, since these method are called
+      // in order to do optimizations to methods that can be evaluated once
+      // (which doesn't apply to DIFC instrumentation)
       if (methOp != null && methOp.hasPreciseTarget() && methOp.getTarget().isPure()) {
         return true;
       }
@@ -892,7 +895,8 @@
   public boolean isNonPureCall() {
     if (operator.isCall()) {
       MethodOperand methOp = Call.getMethod(this);
-      boolean isPure = methOp != null && methOp.hasPreciseTarget() && methOp.getTarget().isPure();
+      // DIFC: also for methods without side effects
+      boolean isPure = methOp != null && methOp.hasPreciseTarget() && (methOp.getTarget().isPure() || methOp.getTarget().hasNoSideEffects());
       return !isPure;
     }
     return false;
Index: rvm/src/org/jikesrvm/compilers/opt/hir2lir/RemoveRedundantDIFCBarriers.java
===================================================================
--- rvm/src/org/jikesrvm/compilers/opt/hir2lir/RemoveRedundantDIFCBarriers.java	(revision 0)
+++ rvm/src/org/jikesrvm/compilers/opt/hir2lir/RemoveRedundantDIFCBarriers.java	(revision 281)
@@ -0,0 +1,239 @@
+/*
+ *  This file is part of the Jikes RVM project (http://jikesrvm.org).
+ *
+ *  This file is licensed to You under the Common Public License (CPL);
+ *  You may not use this file except in compliance with the License. You
+ *  may obtain a copy of the License at
+ *
+ *      http://www.opensource.org/licenses/cpl1.0.php
+ *
+ *  See the COPYRIGHT.txt file distributed with this work for information
+ *  regarding copyright ownership.
+ */
+package org.jikesrvm.compilers.opt.hir2lir;
+
+import java.lang.reflect.Constructor;
+import java.util.HashSet;
+
+import org.jikesrvm.VM;
+import org.jikesrvm.classloader.NormalMethod;
+import org.jikesrvm.classloader.RVMMethod;
+import org.jikesrvm.compilers.opt.OptOptions;
+import org.jikesrvm.compilers.opt.Simple;
+import org.jikesrvm.compilers.opt.controlflow.BranchOptimizations;
+import org.jikesrvm.compilers.opt.driver.CompilerPhase;
+import org.jikesrvm.compilers.opt.inlining.InlineSequence;
+import org.jikesrvm.compilers.opt.ir.BasicBlock;
+import org.jikesrvm.compilers.opt.ir.BasicBlockEnumeration;
+import org.jikesrvm.compilers.opt.ir.Call;
+import org.jikesrvm.compilers.opt.ir.IR;
+import org.jikesrvm.compilers.opt.ir.Instruction;
+import org.jikesrvm.compilers.opt.ir.Move;
+import org.jikesrvm.compilers.opt.ir.OperandEnumeration;
+import org.jikesrvm.compilers.opt.ir.Register;
+import org.jikesrvm.compilers.opt.ir.operand.MethodOperand;
+import org.jikesrvm.compilers.opt.ir.operand.Operand;
+import org.jikesrvm.runtime.Entrypoints;
+import org.jikesrvm.scheduler.DIFC;
+import org.jikesrvm.util.HashSetRVM;
+
+public final class RemoveRedundantDIFCBarriers extends CompilerPhase {
+
+  /**
+   * Constructor for this compiler phase
+   */
+  private static final Constructor<CompilerPhase> constructor =
+      getCompilerPhaseConstructor(RemoveRedundantDIFCBarriers.class);
+
+  /**
+   * Get a constructor object for this compiler phase
+   * @return compiler phase constructor
+   */
+  public Constructor<CompilerPhase> getClassConstructor() {
+    return constructor;
+  }
+
+  public boolean shouldPerform(OptOptions options) {
+    return true;
+  }
+
+  public String getName() {
+    return "Remove Redundant DIFC Barriers";
+  }
+
+  public void reportAdditionalStats() {
+    VM.sysWrite("  ");
+    VM.sysWrite(container.counter1 / container.counter2 * 100, 2);
+    VM.sysWrite("% Infrequent RS calls");
+  }
+
+  /**
+   * Remove redundant barriers if possible.
+   */
+  public void perform(IR ir) {
+    // DIFC: redundant barrier elimination
+    HashSetRVM<Instruction> fullRedInsts = null;
+    HashSetRVM<Instruction> fullRedReads = computeRedundantBarriers(ir, true);
+    HashSetRVM<Instruction> fullRedWrites = computeRedundantBarriers(ir, false);
+    fullRedInsts = fullRedReads;
+    fullRedInsts.addAll(fullRedWrites);
+
+    boolean didSomething = false;
+    for (Instruction inst : fullRedInsts) {
+      
+      if (DIFC.verbosity >= 2) {
+        NormalMethod method = inst.position.getMethod();
+        int line = method.getLineNumberForBCIndex(inst.bcIndex);
+        System.out.println("[redundant late] " + method.getDeclaringClass() + "." + method.getName()  + " : " + line);
+        InlineSequence position = inst.position;
+        while (position.caller != null) {
+          NormalMethod caller = position.caller.getMethod();
+          int callerLine = caller.getLineNumberForBCIndex(position.bcIndex);
+          System.out.println("     " + caller.getDeclaringClass() + "." + caller.getName()  + " : " + callerLine);
+          position = position.caller;
+        }
+        System.out.println("  " + inst);
+      }
+      
+      // remove the instruction!
+      inst.remove();
+      
+      didSomething = true;
+    }
+    
+    // If we actually removed something, clean up the mess
+    if (didSomething) {
+      branchOpts.perform(ir, true);
+      _os.perform(ir);
+    }
+  }
+
+  private final Simple _os = new Simple(1, false, false, false);
+  private final BranchOptimizations branchOpts = new BranchOptimizations(-1, true, true);
+
+  // DIFC: redundant barrier elimination when the barriers are already inserted
+  static final HashSetRVM<Instruction> computeRedundantBarriers(IR ir, boolean reads) {
+    // first set all the scratch objects to empty sets
+    for (BasicBlock bb = ir.lastBasicBlockInCodeOrder();
+    bb != null;
+    bb = bb.prevBasicBlockInCodeOrder()) {
+      bb.scratchObject = new HashSet<Register>();
+    }
+    ir.cfg.exit().scratchObject = new HashSet<Register>();
+
+    HashSetRVM<Instruction> fullRedInsts = new HashSetRVM<Instruction>(); 
+
+    // do data-flow
+    HashSet<Register> thisFullRedSet = new HashSet<Register>();
+    boolean changed;
+    do {
+      changed = false;
+      for (BasicBlock bb = ir.firstBasicBlockInCodeOrder();
+      bb != null;
+      bb = bb.nextBasicBlockInCodeOrder()) {
+        // compute redundant variables for the bottom of the block
+        // and merge with redundant variables
+        thisFullRedSet.clear();
+        boolean first = true;
+        for (BasicBlockEnumeration e = bb.getIn(); e.hasMoreElements(); ) {
+          BasicBlock predBB = e.next();
+          HashSet<Register> predFullRedSet = (HashSet<Register>)predBB.scratchObject;
+          if (first) {
+            thisFullRedSet.addAll(predFullRedSet);
+            first = false;
+          } else {
+            thisFullRedSet.retainAll(predFullRedSet); // intersection
+          }
+        }
+
+        // propagate info from top to bottom of block
+        for (Instruction i = bb.firstInstruction(); !i.isBbLast(); i = i.nextInstructionInCodeOrder()) {
+          // first look at RHS (since we're going forward)
+          Operand useOperand = null;
+          boolean isUse = false;
+          if (Call.conforms(i)) {
+            MethodOperand methodOperand = Call.getMethod(i);
+            if (methodOperand != null) {
+              RVMMethod target = methodOperand.getTarget();
+              boolean isAlloc = false;
+              if (target == Entrypoints.difcAllocBarrierDynamicMethod ||
+                  target == Entrypoints.difcAllocBarrierInsideSRMethod) {
+                isAlloc = true;
+              } else if (reads &&
+                         (target == Entrypoints.difcReadBarrierDynamicMethod ||
+                          target == Entrypoints.difcReadBarrierInsideSRMethod ||
+                          target == Entrypoints.difcReadBarrierOutsideSRMethod)) {
+                isUse = true;
+              } else if (!reads &&
+                         (target == Entrypoints.difcWriteBarrierDynamicMethod ||
+                          target == Entrypoints.difcWriteBarrierInsideSRMethod ||
+                          target == Entrypoints.difcWriteBarrierOutsideSRMethod)) {
+                isUse = true;
+              }
+              
+              if (isAlloc || isUse) {
+                useOperand = Call.getParam(i, 0);
+              }
+            }
+          }
+          if (useOperand != null) {
+            //if (VM.VerifyAssertions) { VM._assert(useOperand.isRegister() || useOperand.isConstant()); }
+            if (useOperand.isRegister()) {
+              Register useReg = useOperand.asRegister().register;
+              if (thisFullRedSet.contains(useReg) && isUse) {
+                fullRedInsts.add(i);
+              }
+              thisFullRedSet.add(useReg);
+            } else if (useOperand.isConstant()) {
+              fullRedInsts.add(i);
+            } else {
+              System.out.println("Weird operand: " + useOperand);
+              VM._assert(false);
+            }
+          }
+          // now look at LHS
+          if (Move.conforms(i)) {
+            Operand srcOperand = Move.getVal(i);
+            if (srcOperand.isRegister()) {
+              Register useReg = srcOperand.asRegister().register;
+              Register defReg = Move.getResult(i).register;
+              if (thisFullRedSet.contains(useReg)) {
+                thisFullRedSet.add(defReg);
+              }
+            }
+          } else {
+            // look at other defs
+            for (OperandEnumeration e = i.getDefs(); e.hasMoreElements(); ) {
+              Operand defOperand = e.next();
+              if (defOperand.isRegister()) {
+                Register defReg = defOperand.asRegister().register;
+                thisFullRedSet.remove(defReg);
+              }
+            }
+          }
+        }
+
+        // compare what we've computed with what was already there
+        HashSet<Register> oldFullRedSet = (HashSet<Register>)bb.scratchObject;
+        if (!oldFullRedSet.equals(thisFullRedSet)) {
+          if (VM.VerifyAssertions) { VM._assert(thisFullRedSet.containsAll(oldFullRedSet)); }
+          oldFullRedSet.clear();
+          oldFullRedSet.addAll(thisFullRedSet);
+          changed = true;
+        }
+      }
+    } while (changed);
+
+    // clear the scratch objects
+    for (BasicBlock bb = ir.lastBasicBlockInCodeOrder();
+    bb != null;
+    bb = bb.prevBasicBlockInCodeOrder()) {
+      bb.scratchObject = null;
+    }
+    ir.cfg.exit().scratchObject = null;
+    
+    return fullRedInsts;
+  }
+
+  
+}
Index: rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java
===================================================================
--- rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java	(revision 4)
+++ rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java	(working copy)
@@ -32,9 +32,27 @@
 import static org.jikesrvm.compilers.opt.ir.Operators.REF_ASTORE_opcode;
 import static org.jikesrvm.compilers.opt.ir.Operators.REF_MOVE;
 
+// DIFC: need extra import statics
+import static org.jikesrvm.compilers.opt.ir.Operators.INT_ALOAD_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.LONG_ALOAD_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.FLOAT_ALOAD_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.DOUBLE_ALOAD_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.UBYTE_ALOAD_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.BYTE_ALOAD_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.USHORT_ALOAD_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.SHORT_ALOAD_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.INT_ASTORE_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.LONG_ASTORE_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.FLOAT_ASTORE_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.DOUBLE_ASTORE_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.BYTE_ASTORE_opcode;
+import static org.jikesrvm.compilers.opt.ir.Operators.SHORT_ASTORE_opcode;
+
 import java.lang.reflect.Constructor;
+import java.util.HashSet;
 
 import org.jikesrvm.VM;
+import org.jikesrvm.classloader.NormalMethod;
 import org.jikesrvm.classloader.RVMArray;
 import org.jikesrvm.classloader.RVMClass;
 import org.jikesrvm.classloader.RVMField;
@@ -47,10 +65,13 @@
 import org.jikesrvm.compilers.opt.controlflow.BranchOptimizations;
 import org.jikesrvm.compilers.opt.driver.CompilerPhase;
 import org.jikesrvm.compilers.opt.inlining.InlineDecision;
+import org.jikesrvm.compilers.opt.inlining.InlineSequence;
 import org.jikesrvm.compilers.opt.inlining.Inliner;
 import org.jikesrvm.compilers.opt.ir.ALoad;
 import org.jikesrvm.compilers.opt.ir.AStore;
 import org.jikesrvm.compilers.opt.ir.Athrow;
+import org.jikesrvm.compilers.opt.ir.BasicBlock;
+import org.jikesrvm.compilers.opt.ir.BasicBlockEnumeration;
 import org.jikesrvm.compilers.opt.ir.Call;
 import org.jikesrvm.compilers.opt.ir.GetField;
 import org.jikesrvm.compilers.opt.ir.GetStatic;
@@ -62,8 +83,10 @@
 import org.jikesrvm.compilers.opt.ir.Move;
 import org.jikesrvm.compilers.opt.ir.New;
 import org.jikesrvm.compilers.opt.ir.NewArray;
+import org.jikesrvm.compilers.opt.ir.OperandEnumeration;
 import org.jikesrvm.compilers.opt.ir.PutField;
 import org.jikesrvm.compilers.opt.ir.PutStatic;
+import org.jikesrvm.compilers.opt.ir.Register;
 import org.jikesrvm.compilers.opt.ir.operand.IntConstantOperand;
 import org.jikesrvm.compilers.opt.ir.operand.LocationOperand;
 import org.jikesrvm.compilers.opt.ir.operand.MethodOperand;
@@ -74,6 +97,8 @@
 import org.jikesrvm.mm.mminterface.MemoryManager;
 import org.jikesrvm.objectmodel.ObjectModel;
 import org.jikesrvm.runtime.Entrypoints;
+import org.jikesrvm.scheduler.DIFC;
+import org.jikesrvm.util.HashSetRVM;
 
 /**
  * As part of the expansion of HIR into LIR, this compile phase
@@ -126,6 +151,19 @@
   public void perform(IR ir) {
     ir.gc.resync(); // resync generation context -- yuck...
 
+    // DIFC: don't add a barrier for the same instruction twice, which seems to be
+    // happening occasionally when inlining reorders the code (?)
+    HashSetRVM<Instruction> instsProcessedByDIFC = new HashSetRVM<Instruction>();
+
+    // DIFC: redundant barrier elimination
+    HashSetRVM<Instruction> fullRedInsts = null;
+    if (VM.difcBarriers) {
+      HashSetRVM<Instruction> fullRedReads = computeRedundantReadBarriers(ir, true);
+      HashSetRVM<Instruction> fullRedWrites = computeRedundantReadBarriers(ir, false);
+      fullRedInsts = fullRedReads;
+      fullRedInsts.addAll(fullRedWrites);
+    }
+
     Instruction next;
     for (Instruction inst = ir.firstInstructionInCodeOrder(); inst != null; inst = next) {
       next = inst.nextInstructionInCodeOrder();
@@ -148,7 +186,9 @@
             inst.insertBefore(Move.create(REF_MOVE, tmp, tib));
             tib = tmp.copyRO();
           }
-          IntConstantOperand site = IRTools.IC(MemoryManager.getAllocationSite(true));
+          // DIFC: allocate labeled object if in secure region
+          IntConstantOperand site = IRTools.IC(MemoryManager.getDIFCAllocationSite(true, inst.position.method));
+          //IntConstantOperand site = IRTools.IC(MemoryManager.getAllocationSite(true));
           RVMMethod target = Entrypoints.resolvedNewScalarMethod;
           Call.mutate7(inst,
                        CALL,
@@ -163,6 +203,10 @@
                        offset,
                        site);
           next = inst.prevInstructionInCodeOrder();
+          
+          // DIFC: allocation barrier
+          insertAllocBarrier(inst, ir, instsProcessedByDIFC, fullRedInsts);
+          
           if (ir.options.INLINE_NEW) {
             if (inst.getBasicBlock().getInfrequent()) container.counter1++;
             container.counter2++;
@@ -176,7 +220,9 @@
         case NEW_UNRESOLVED_opcode: {
           int typeRefId = New.getType(inst).getTypeRef().getId();
           RVMMethod target = Entrypoints.unresolvedNewScalarMethod;
-          IntConstantOperand site = IRTools.IC(MemoryManager.getAllocationSite(true));
+          // DIFC: allocate labeled object if in secure region
+          IntConstantOperand site = IRTools.IC(MemoryManager.getDIFCAllocationSite(true, inst.position.method));
+          //IntConstantOperand site = IRTools.IC(MemoryManager.getAllocationSite(true));
           Call.mutate2(inst,
                        CALL,
                        New.getClearResult(inst),
@@ -184,6 +230,12 @@
                        MethodOperand.STATIC(target),
                        IRTools.IC(typeRefId),
                        site);
+          
+          // DIFC: allocation barrier
+          boolean inserted = insertAllocBarrier(inst, ir, instsProcessedByDIFC, fullRedInsts);
+          if (inserted) {
+            next = inst;
+          }
         }
         break;
 
@@ -205,7 +257,9 @@
             inst.insertBefore(Move.create(REF_MOVE, tmp, tib));
             tib = tmp.copyRO();
           }
-          IntConstantOperand site = IRTools.IC(MemoryManager.getAllocationSite(true));
+          // DIFC: allocate labeled object if in secure region
+          IntConstantOperand site = IRTools.IC(MemoryManager.getDIFCAllocationSite(true, inst.position.method));
+          //IntConstantOperand site = IRTools.IC(MemoryManager.getAllocationSite(true));
           RVMMethod target = Entrypoints.resolvedNewArrayMethod;
           Call.mutate8(inst,
                        CALL,
@@ -221,6 +275,10 @@
                        offset,
                        site);
           next = inst.prevInstructionInCodeOrder();
+          
+          // DIFC: allocation barrier
+          insertAllocBarrier(inst, ir, instsProcessedByDIFC, fullRedInsts);
+
           if (inline && ir.options.INLINE_NEW) {
             if (inst.getBasicBlock().getInfrequent()) container.counter1++;
             container.counter2++;
@@ -235,7 +293,9 @@
           int typeRefId = NewArray.getType(inst).getTypeRef().getId();
           Operand numberElements = NewArray.getClearSize(inst);
           RVMMethod target = Entrypoints.unresolvedNewArrayMethod;
-          IntConstantOperand site = IRTools.IC(MemoryManager.getAllocationSite(true));
+          // DIFC: allocate labeled object if in secure region
+          IntConstantOperand site = IRTools.IC(MemoryManager.getDIFCAllocationSite(true, inst.position.method));
+          //IntConstantOperand site = IRTools.IC(MemoryManager.getAllocationSite(true));
           Call.mutate3(inst,
                        CALL,
                        NewArray.getClearResult(inst),
@@ -244,6 +304,12 @@
                        numberElements,
                        IRTools.IC(typeRefId),
                        site);
+          
+          // DIFC: allocation barrier
+          boolean inserted = insertAllocBarrier(inst, ir, instsProcessedByDIFC, fullRedInsts);
+          if (inserted) {
+            next = inst;
+          }
         }
         break;
 
@@ -290,6 +356,12 @@
                          dimArray.copyD2U(),
                          IRTools.IC(typeRefId));
           }
+          
+          // DIFC: allocation barrier
+          boolean inserted = insertAllocBarrier(inst, ir, instsProcessedByDIFC, fullRedInsts);
+          if (inserted && dimensions == 2) {
+            next = inst;
+          }
         }
         break;
 
@@ -371,50 +443,120 @@
         }
         break;
 
-        case REF_ASTORE_opcode: {
-          if (MemoryManagerConstants.NEEDS_WRITE_BARRIER) {
-            RVMMethod target = Entrypoints.arrayStoreWriteBarrierMethod;
-            Instruction wb =
-                Call.create3(CALL,
-                             null,
-                             IRTools.AC(target.getOffset()),
-                             MethodOperand.STATIC(target),
-                             AStore.getClearGuard(inst),
-                             AStore.getArray(inst).copy(),
-                             AStore.getIndex(inst).copy(),
-                             AStore.getValue(inst).copy());
-            wb.bcIndex = RUNTIME_SERVICES_BCI;
-            wb.position = inst.position;
-            inst.replace(wb);
-            next = wb.prevInstructionInCodeOrder();
-            if (ir.options.INLINE_WRITE_BARRIER) {
-              inline(wb, ir, true);
+        // DIFC: array write barriers
+        case INT_ASTORE_opcode:
+        case LONG_ASTORE_opcode:
+        case FLOAT_ASTORE_opcode:
+        case DOUBLE_ASTORE_opcode:
+        case REF_ASTORE_opcode:
+        case BYTE_ASTORE_opcode:
+        case SHORT_ASTORE_opcode: {
+          NormalMethod barrierMethod = DIFC.addBarriers(inst, DIFC.WRITE_BARRIER);
+          Instruction beforeDIFCBarrier = null;
+          if (barrierMethod != null &&
+              !instsProcessedByDIFC.contains(inst) &&
+              !redundant(inst, fullRedInsts)) {
+            instsProcessedByDIFC.add(inst);
+            Instruction barrier =
+              Call.create1(CALL,
+                           null,
+                           IRTools.AC(barrierMethod.getOffset()),
+                           MethodOperand.STATIC(barrierMethod),
+                           AStore.getArray(inst).copy()/*,
+                           AStore.getIndex(inst).copy()*/);
+            beforeDIFCBarrier = insertAndMaybeInline(barrier, inst, ir, true);
+          }
+          if (opcode == REF_ASTORE_opcode) {
+            if (MemoryManagerConstants.NEEDS_WRITE_BARRIER) {
+              RVMMethod target = Entrypoints.arrayStoreWriteBarrierMethod;
+              Instruction wb =
+                  Call.create3(CALL,
+                               null,
+                               IRTools.AC(target.getOffset()),
+                               MethodOperand.STATIC(target),
+                               AStore.getClearGuard(inst),
+                               AStore.getArray(inst).copy(),
+                               AStore.getIndex(inst).copy(),
+                               AStore.getValue(inst).copy());
+              wb.bcIndex = RUNTIME_SERVICES_BCI;
+              wb.position = inst.position;
+              inst.replace(wb);
+              next = wb.prevInstructionInCodeOrder();
+              if (ir.options.INLINE_WRITE_BARRIER) {
+                inline(wb, ir, true);
+              }
             }
           }
+          if (beforeDIFCBarrier != null) {
+            next = beforeDIFCBarrier;
+          }
         }
         break;
 
-        case REF_ALOAD_opcode: {
-          if (MemoryManagerConstants.NEEDS_READ_BARRIER) {
-            RVMMethod target = Entrypoints.arrayLoadReadBarrierMethod;
-            Instruction rb =
-              Call.create2(CALL,
-                           ALoad.getClearResult(inst),
-                           IRTools.AC(target.getOffset()),
-                           MethodOperand.STATIC(target),
-                           ALoad.getClearGuard(inst),
-                           ALoad.getArray(inst).copy(),
-                           ALoad.getIndex(inst).copy());
-            rb.bcIndex = RUNTIME_SERVICES_BCI;
-            rb.position = inst.position;
-            inst.replace(rb);
-            next = rb.prevInstructionInCodeOrder();
-            inline(rb, ir, true);
+        // DIFC: array read barriers
+        case INT_ALOAD_opcode:
+        case LONG_ALOAD_opcode:
+        case FLOAT_ALOAD_opcode:
+        case DOUBLE_ALOAD_opcode:
+        case REF_ALOAD_opcode:
+        case UBYTE_ALOAD_opcode:
+        case BYTE_ALOAD_opcode:
+        case USHORT_ALOAD_opcode:
+        case SHORT_ALOAD_opcode: {
+          NormalMethod barrierMethod = DIFC.addBarriers(inst, DIFC.READ_BARRIER);
+          Instruction beforeDIFCBarrier = null;
+          if (barrierMethod != null &&
+              !instsProcessedByDIFC.contains(inst) &&
+              !redundant(inst, fullRedInsts)) {
+            instsProcessedByDIFC.add(inst);
+            Instruction barrier =
+              Call.create1(CALL,
+                           null,
+                           IRTools.AC(barrierMethod.getOffset()),
+                           MethodOperand.STATIC(barrierMethod),
+                           ALoad.getArray(inst).copy());
+            beforeDIFCBarrier = insertAndMaybeInline(barrier, inst, ir, true);
           }
+          if (opcode == REF_ALOAD_opcode) {
+            if (MemoryManagerConstants.NEEDS_READ_BARRIER) {
+              RVMMethod target = Entrypoints.arrayLoadReadBarrierMethod;
+              Instruction rb =
+                Call.create2(CALL,
+                    ALoad.getClearResult(inst),
+                    IRTools.AC(target.getOffset()),
+                    MethodOperand.STATIC(target),
+                    ALoad.getClearGuard(inst),
+                    ALoad.getArray(inst).copy(),
+                    ALoad.getIndex(inst).copy());
+              rb.bcIndex = RUNTIME_SERVICES_BCI;
+              rb.position = inst.position;
+              inst.replace(rb);
+              next = rb.prevInstructionInCodeOrder();
+              inline(rb, ir, true);
+            }
+          }
+          if (beforeDIFCBarrier != null) {
+            next = beforeDIFCBarrier;
+          }
         }
         break;
 
         case PUTFIELD_opcode: {
+          // DIFC: field write barriers
+          NormalMethod barrierMethod = DIFC.addBarriers(inst, DIFC.WRITE_BARRIER);
+          Instruction beforeDIFCBarrier = null;
+          if (barrierMethod != null &&
+              !instsProcessedByDIFC.contains(inst) &&
+              !redundant(inst, fullRedInsts)) {
+            instsProcessedByDIFC.add(inst);
+            Instruction barrier =
+              Call.create1(CALL,
+                           null,
+                           IRTools.AC(barrierMethod.getOffset()),
+                           MethodOperand.STATIC(barrierMethod),
+                           PutField.getRef(inst).copy());
+            beforeDIFCBarrier = insertAndMaybeInline(barrier, inst, ir, true);
+          }
           if (MemoryManagerConstants.NEEDS_WRITE_BARRIER) {
             LocationOperand loc = PutField.getLocation(inst);
             FieldReference fieldRef = loc.getFieldRef();
@@ -442,10 +584,28 @@
               }
             }
           }
+          if (beforeDIFCBarrier != null) {
+            next = beforeDIFCBarrier;
+          }
         }
         break;
 
         case GETFIELD_opcode: {
+          // DIFC: field read barriers
+          NormalMethod barrierMethod = DIFC.addBarriers(inst, DIFC.READ_BARRIER);
+          Instruction beforeDIFCBarrier = null;
+          if (barrierMethod != null &&
+              !instsProcessedByDIFC.contains(inst) &&
+              !redundant(inst, fullRedInsts)) {
+            instsProcessedByDIFC.add(inst);
+            Instruction barrier =
+              Call.create1(CALL,
+                           null,
+                           IRTools.AC(barrierMethod.getOffset()),
+                           MethodOperand.STATIC(barrierMethod),
+                           GetField.getRef(inst).copy());
+            beforeDIFCBarrier = insertAndMaybeInline(barrier, inst, ir, true);
+          }
           if (MemoryManagerConstants.NEEDS_READ_BARRIER) {
             LocationOperand loc = GetField.getLocation(inst);
             FieldReference fieldRef = loc.getFieldRef();
@@ -470,10 +630,28 @@
               }
             }
           }
+          if (beforeDIFCBarrier != null) {
+            next = beforeDIFCBarrier;
+          }
         }
         break;
 
         case PUTSTATIC_opcode: {
+          // DIFC: static write barrier
+          NormalMethod barrierMethod = DIFC.addBarriers(inst, DIFC.STATIC_WRITE_BARRIER);
+          Instruction beforeDIFCBarrier = null;
+          if (barrierMethod != null &&
+              !instsProcessedByDIFC.contains(inst) &&
+              !redundant(inst, fullRedInsts)) {
+            instsProcessedByDIFC.add(inst);
+            Instruction barrier =
+              Call.create1(CALL,
+                           null,
+                           IRTools.AC(barrierMethod.getOffset()),
+                           MethodOperand.STATIC(barrierMethod),
+                           IRTools.IC(PutStatic.getLocation(inst).getFieldRef().getId()));
+            beforeDIFCBarrier = insertAndMaybeInline(barrier, inst, ir, true);
+          }
           if (MemoryManagerConstants.NEEDS_PUTSTATIC_WRITE_BARRIER) {
             LocationOperand loc = PutStatic.getLocation(inst);
             FieldReference field = loc.getFieldRef();
@@ -496,10 +674,28 @@
               }
             }
           }
+          if (beforeDIFCBarrier != null) {
+            next = beforeDIFCBarrier;
+          }
         }
         break;
 
         case GETSTATIC_opcode: {
+          // DIFC: static read barrier
+          NormalMethod barrierMethod = DIFC.addBarriers(inst, DIFC.STATIC_READ_BARRIER);
+          Instruction beforeDIFCBarrier = null;
+          if (barrierMethod != null &&
+              !instsProcessedByDIFC.contains(inst) &&
+              !redundant(inst, fullRedInsts)) {
+            instsProcessedByDIFC.add(inst);
+            Instruction barrier =
+              Call.create1(CALL,
+                           null,
+                           IRTools.AC(barrierMethod.getOffset()),
+                           MethodOperand.STATIC(barrierMethod),
+                           IRTools.IC(GetStatic.getLocation(inst).getFieldRef().getId()));
+            beforeDIFCBarrier = insertAndMaybeInline(barrier, inst, ir, true);
+          }
           if (MemoryManagerConstants.NEEDS_GETSTATIC_READ_BARRIER) {
             LocationOperand loc = GetStatic.getLocation(inst);
             FieldReference field = loc.getFieldRef();
@@ -519,6 +715,9 @@
               inline(rb, ir, true);
             }
           }
+          if (beforeDIFCBarrier != null) {
+            next = beforeDIFCBarrier;
+          }
         }
         break;
 
@@ -537,6 +736,72 @@
   }
 
   /**
+   * DIFC: helper method for inserting allocation barriers
+   */
+  private boolean insertAllocBarrier(Instruction inst, IR ir, HashSetRVM<Instruction> instsProcessedByDIFC, HashSetRVM<Instruction> fullRedInsts) {
+    NormalMethod barrierMethod = DIFC.addBarriers(inst, DIFC.ALLOC_BARRIER);
+    if (barrierMethod != null &&
+        !instsProcessedByDIFC.contains(inst) &&
+        !redundant(inst, fullRedInsts)) {
+      instsProcessedByDIFC.add(inst);
+      Instruction barrier =
+        Call.create1(CALL,
+                     null,
+                     IRTools.AC(barrierMethod.getOffset()),
+                     MethodOperand.STATIC(barrierMethod),
+                     Call.getResult(inst).copy());
+      insertAndMaybeInline(barrier, inst, ir, false);
+      return true;
+    }
+    return false;
+  }
+
+  private Instruction insertAndMaybeInline(Instruction barrier, Instruction inst, IR ir, boolean before) {
+    barrier.bcIndex = RUNTIME_SERVICES_BCI;
+    barrier.position = inst.position;
+    Instruction next = null;
+    if (before) {
+      inst.insertBefore(barrier);
+      next = barrier.prevInstructionInCodeOrder();
+    } else {
+      inst.insertAfter(barrier);
+      // don't need to change next
+    }
+    // only inline into hot basic blocks
+    if (!inst.getBasicBlock().getInfrequent() && !VM.difcNoInlinedBarriers) {
+      // only inline stuff barriers that might be outside security regions 
+      if ((inst.position != null &&
+           !inst.position.getMethod().staticallyInSecureRegion) ||
+          VM.difcDynamicBarriers) {
+        inline(barrier, ir, true);
+      }
+    }
+    return next;
+  }
+  
+  private boolean redundant(Instruction inst, HashSetRVM<Instruction> fullRedInsts) {
+    if (VM.difcNoRedundancyElimination) {
+      return false;
+    }
+    boolean isRedundant = fullRedInsts.contains(inst);
+    
+    if (DIFC.verbosity >= 2) {
+      NormalMethod method = inst.position.getMethod();
+      int line = method.getLineNumberForBCIndex(inst.bcIndex);
+      System.out.println("[" + isRedundant + "] " + method.getDeclaringClass() + "." + method.getName()  + " : " + line);
+      InlineSequence position = inst.position;
+      while (position.caller != null) {
+        NormalMethod caller = position.caller.getMethod();
+        int callerLine = caller.getLineNumberForBCIndex(position.bcIndex);
+        System.out.println("     " + caller.getDeclaringClass() + "." + caller.getName()  + " : " + callerLine);
+        position = position.caller;
+      }
+      System.out.println("  " + inst);
+    }
+    return isRedundant;
+  }
+  
+  /**
    * Inline a call instruction
    */
   private void inline(Instruction inst, IR ir) {
@@ -577,4 +842,119 @@
   //private final AddressConstantOperand IRTools.AC(Address x) { return IRTools.IRTools.AC(x); }
   //private final AddressConstantOperand IRTools.AC(Offset x) { return IRTools.IRTools.AC(x); }
 
+  // DIFC: awesome redundant barrier elimination
+  static final HashSetRVM<Instruction> computeRedundantReadBarriers(IR ir, boolean reads) {
+    // first set all the scratch objects to empty sets
+    for (BasicBlock bb = ir.lastBasicBlockInCodeOrder();
+    bb != null;
+    bb = bb.prevBasicBlockInCodeOrder()) {
+      bb.scratchObject = new HashSet<Register>();
+    }
+    ir.cfg.exit().scratchObject = new HashSet<Register>();
+
+    HashSetRVM<Instruction> fullRedInsts = new HashSetRVM<Instruction>(); 
+
+    // do data-flow
+    HashSet<Register> thisFullRedSet = new HashSet<Register>();
+    boolean changed;
+    do {
+      changed = false;
+      for (BasicBlock bb = ir.firstBasicBlockInCodeOrder();
+      bb != null;
+      bb = bb.nextBasicBlockInCodeOrder()) {
+        // compute redundant variables for the bottom of the block
+        // and merge with redundant variables
+        thisFullRedSet.clear();
+        boolean first = true;
+        for (BasicBlockEnumeration e = bb.getIn(); e.hasMoreElements(); ) {
+          BasicBlock predBB = e.next();
+          HashSet<Register> predFullRedSet = (HashSet<Register>)predBB.scratchObject;
+          if (first) {
+            thisFullRedSet.addAll(predFullRedSet);
+            first = false;
+          } else {
+            thisFullRedSet.retainAll(predFullRedSet); // intersection
+          }
+        }
+
+        // propagate info from top to bottom of block
+        for (Instruction i = bb.firstInstruction(); !i.isBbLast(); i = i.nextInstructionInCodeOrder()) {
+          // first look at RHS (since we're going forward)
+          Operand useOperand = null;
+          if (New.conforms(i)) {
+            useOperand = New.getResult(i);
+          } else if (NewArray.conforms(i)) {
+            useOperand = NewArray.getResult(i);
+          } else if (reads && GetField.conforms(i)) {
+            useOperand = GetField.getRef(i);
+          } else if (reads && ALoad.conforms(i)) {
+            useOperand = ALoad.getArray(i);
+          } else if (!reads && PutField.conforms(i)) {
+            useOperand = PutField.getRef(i);
+          } else if (!reads && AStore.conforms(i)) {
+            useOperand = AStore.getArray(i);
+          }
+          if (useOperand != null) {
+            //if (VM.VerifyAssertions) { VM._assert(useOperand.isRegister() || useOperand.isConstant()); }
+            if (useOperand.isRegister()) {
+              Register useReg = useOperand.asRegister().register;
+              if (thisFullRedSet.contains(useReg)) {
+                fullRedInsts.add(i);
+              }
+              thisFullRedSet.add(useReg);
+            } else if (useOperand.isConstant()) {
+              fullRedInsts.add(i);
+            } else {
+              System.out.println("Weird operand: " + useOperand);
+              VM._assert(false);
+            }
+          }
+          // now look at LHS
+          if (Move.conforms(i)) {
+            Operand srcOperand = Move.getVal(i);
+            if (srcOperand.isRegister()) {
+              Register useReg = srcOperand.asRegister().register;
+              Register defReg = Move.getResult(i).register;
+              if (thisFullRedSet.contains(useReg)) {
+                thisFullRedSet.add(defReg);
+              }
+            }
+          } else {
+            // look at other defs
+            for (OperandEnumeration e = i.getDefs(); e.hasMoreElements(); ) {
+              Operand defOperand = e.next();
+              if (defOperand.isRegister()) {
+                Register defReg = defOperand.asRegister().register;
+                thisFullRedSet.remove(defReg);
+              }
+            }
+          }
+        }
+
+        // compare what we've computed with what was already there
+        HashSet<Register> oldFullRedSet = (HashSet<Register>)bb.scratchObject;
+        if (!oldFullRedSet.equals(thisFullRedSet)) {
+          if (VM.VerifyAssertions) { VM._assert(thisFullRedSet.containsAll(oldFullRedSet)); }
+          oldFullRedSet.clear();
+          oldFullRedSet.addAll(thisFullRedSet);
+          changed = true;
+        }
+      }
+    } while (changed);
+
+    // print graph
+    //genGraph(ir, "redComp", partRedInsts, fullRedInsts, needsBarrierMap, true);
+
+    // clear the scratch objects
+    for (BasicBlock bb = ir.lastBasicBlockInCodeOrder();
+    bb != null;
+    bb = bb.prevBasicBlockInCodeOrder()) {
+      bb.scratchObject = null;
+    }
+    ir.cfg.exit().scratchObject = null;
+    
+    return fullRedInsts;
+  }
+
+  
 }
Index: rvm/src/org/jikesrvm/compilers/common/RuntimeCompiler.java
===================================================================
--- rvm/src/org/jikesrvm/compilers/common/RuntimeCompiler.java	(revision 4)
+++ rvm/src/org/jikesrvm/compilers/common/RuntimeCompiler.java	(working copy)
@@ -39,7 +39,11 @@
 import org.jikesrvm.compilers.opt.driver.OptimizationPlanner;
 import org.jikesrvm.compilers.opt.driver.OptimizingCompiler;
 import org.jikesrvm.runtime.Time;
+import org.jikesrvm.scheduler.DIFC;
 import org.jikesrvm.scheduler.Scheduler;
+import org.jikesrvm.scheduler.greenthreads.GreenProcessor;
+import org.vmmagic.pragma.Inline;
+import org.vmmagic.pragma.SecureMethod;
 
 /**
  * Harness to select which compiler to dynamically
@@ -638,6 +642,26 @@
    * @return its compiled method.
    */
   public static CompiledMethod compile(NormalMethod method) {
+    
+    // DIFC: if invoked from a secure region or marked @SecureMethod, then mark this method accordingly
+    if (DIFC.enabled) {
+      if (DIFC.dynamicBarriers && DIFC.addBarriers(method)) {
+        if (DIFC.verbosity >= 2) {
+          VM.sysWrite("Method ");
+          VM.sysWrite(method);
+          VM.sysWriteln(" will be compiled with DYNAMIC BARRIERS");
+        }
+      } else if (method.getAnnotation(SecureMethod.class) != null ||
+                 GreenProcessor.getCurrentProcessor().inSecureRegion && DIFC.addBarriers(method)) {
+        if (DIFC.verbosity >= 2) {
+          VM.sysWrite("Method ");
+          VM.sysWrite(method);
+          VM.sysWriteln(" will be compiled as INSIDE a SR");
+        }
+        method.staticallyInSecureRegion = true;
+      }
+    }
+
     if (VM.BuildForAdaptiveSystem) {
       CompiledMethod cm;
       if (!Controller.enabled) {
Index: rvm/src/org/jikesrvm/VM.java
===================================================================
--- rvm/src/org/jikesrvm/VM.java	(revision 4)
+++ rvm/src/org/jikesrvm/VM.java	(working copy)
@@ -38,6 +38,8 @@
 import org.jikesrvm.runtime.SysCall;
 
 import static org.jikesrvm.runtime.SysCall.sysCall;
+
+import org.jikesrvm.scheduler.DIFC;
 import org.jikesrvm.scheduler.Lock;
 import org.jikesrvm.scheduler.MainThread;
 import org.jikesrvm.scheduler.Processor;
@@ -491,6 +493,9 @@
       SysCall.sysCall.sysEnableAlignmentChecking();
     }
 
+    // DIFC: initialize here
+    DIFC.init();
+    
     // Schedule "main" thread for execution.
     if (verboseBoot >= 2) VM.sysWriteln("Creating main thread");
     // Create main thread.
Index: rvm/src/Dummy.java
===================================================================
--- rvm/src/Dummy.java	(revision 4)
+++ rvm/src/Dummy.java	(working copy)
@@ -39,4 +39,6 @@
   static org.vmmagic.unboxed.WordArray x;
   static org.vmmagic.unboxed.OffsetArray y;
   static org.vmmagic.unboxed.ExtentArray z;
+  // DIFC: make sure DIFC class gets put in boot image
+  static org.jikesrvm.scheduler.DIFC zz;
 }
Index: rvm/src-generated/vm-configuration/Configuration.template
===================================================================
--- rvm/src-generated/vm-configuration/Configuration.template	(revision 4)
+++ rvm/src-generated/vm-configuration/Configuration.template	(working copy)
@@ -119,4 +119,24 @@
    * run Jikes with only one processor (-X:processors=1).
    */
   public static final boolean AlignmentChecking = @_RVM_WITH_ALIGNMENT_CHECKING_@;
+  
+  // DIFC: build-time flags
+  public static final boolean difcEnabled = @_RVM_WITH_DIFC_ENABLED_@;
+  public static final boolean difcBarriers = @_RVM_WITH_DIFC_BARRIERS_@;
+  public static final boolean difcVerbose = @_RVM_WITH_DIFC_VERBOSE_@;
+  public static final boolean difcProfile = @_RVM_WITH_DIFC_PROFILE_@;
+  public static final boolean difcNoOptBarriers = @_RVM_WITH_DIFC_NO_OPT_BARRIERS_@;
+  public static final boolean difcNoRedundancyElimination = @_RVM_WITH_DIFC_NO_REDUNDANCY_ELIMINATION_@;
+  public static final boolean difcNoLateRedundancyElimination = @_RVM_WITH_DIFC_NO_LATE_REDUNDANCY_ELIMINATION_@;
+  public static final boolean difcNoReadOrWriteBarriers = @_RVM_WITH_DIFC_NO_READ_OR_WRITE_BARRIERS_@;
+  public static final boolean difcNoRWBarrierContents = @_RVM_WITH_DIFC_NO_RW_BARRIER_CONTENTS_@;
+  public static final boolean difcNoStaticOrAllocBarriers = @_RVM_WITH_DIFC_NO_STATIC_OR_ALLOC_BARRIERS_@;
+  public static final boolean difcNoInlinedBarriers = @_RVM_WITH_DIFC_NO_INLINED_BARRIERS_@;
+  public static final boolean difcNoSlowPath = @_RVM_WITH_DIFC_NO_SLOW_PATH_@;
+  public static final boolean difcNoSubsetChecks = @_RVM_WITH_DIFC_NO_SUBSET_CHECKS_@;
+  public static final boolean difcDynamicBarriers = @_RVM_WITH_DIFC_DYNAMIC_BARRIERS_@;
+  public static final boolean difcLibraries = @_RVM_WITH_DIFC_LIBRARIES_@;
+  
+  //Airavat
+  public static final boolean airavatEnabled = @_RVM_WITH_AIRAVAT_ENABLED_@;
 }
Index: rvm/src-generated/options/BooleanOptions.aos.dat
===================================================================
--- rvm/src-generated/options/BooleanOptions.aos.dat	(revision 4)
+++ rvm/src-generated/options/BooleanOptions.aos.dat	(working copy)
@@ -61,3 +61,6 @@
 DISABLE_RECOMPILE_ALL_METHODS -1 false
 Disable the ability for an app to request all methods to be recompiled
 
+# DIFC: stop AOS when harness starts?
+HARNESS_STOPS_CONTROLLER -1 false
+Stop AOS when the harness starts
Index: common/vmmagic/src/org/vmmagic/pragma/NoSideEffects.java
===================================================================
--- common/vmmagic/src/org/vmmagic/pragma/NoSideEffects.java	(revision 0)
+++ common/vmmagic/src/org/vmmagic/pragma/NoSideEffects.java	(revision 281)
@@ -0,0 +1,28 @@
+/*
+ *  This file is part of the Jikes RVM project (http://jikesrvm.org).
+ *
+ *  This file is licensed to You under the Common Public License (CPL);
+ *  You may not use this file except in compliance with the License. You
+ *  may obtain a copy of the License at
+ *
+ *      http://www.opensource.org/licenses/cpl1.0.php
+ *
+ *  See the COPYRIGHT.txt file distributed with this work for information
+ *  regarding copyright ownership.
+ */
+package org.vmmagic.pragma;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.ElementType;
+import org.vmmagic.Pragma;
+
+/**
+ * This pragma is used to indicate a method has no side effects, but it
+ * can't necessarily be run at compile time.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+@Pragma
+public @interface NoSideEffects { /* annotation has no value */ }
Index: common/vmmagic/src/org/vmmagic/pragma/SecureMethod.java
===================================================================
--- common/vmmagic/src/org/vmmagic/pragma/SecureMethod.java	(revision 0)
+++ common/vmmagic/src/org/vmmagic/pragma/SecureMethod.java	(revision 281)
@@ -0,0 +1,18 @@
+package org.vmmagic.pragma;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.ElementType;
+
+import org.vmmagic.Pragma;
+
+/**
+ * DIFC: used to tell the runtime that the given method begins with
+ * a call to startSecureRegion and ends with a call to endSecureRegion
+ * (possibly with a value returned after endSecureRegion)
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Pragma
+public @interface SecureMethod { }
Index: build.xml
===================================================================
--- build.xml	(revision 4)
+++ build.xml	(working copy)
@@ -911,6 +911,24 @@
         <filter token="_PORTABLE_NATIVE_SYNC_" value="${config.portable-native-sync}"/>
         <filter token="_RVM_WITH_HARMONY_" value="${pp_RVM_WITH_HARMONY}"/>
         <filter token="_RVM_WITH_GNU_CLASSPATH_" value="${pp_RVM_WITH_GNU_CLASSPATH}"/>
+        <!-- DIFC: build-time options -->
+        <filter token="_RVM_WITH_DIFC_ENABLED_" value = "${config.include.difc.enabled}"/>
+        <filter token="_RVM_WITH_DIFC_BARRIERS_" value="${config.include.difc.barriers}"/>
+        <filter token="_RVM_WITH_DIFC_VERBOSE_" value="${config.include.difc.verbose}"/>
+        <filter token="_RVM_WITH_DIFC_PROFILE_" value="${config.include.difc.profile}"/>
+        <filter token="_RVM_WITH_DIFC_NO_OPT_BARRIERS_" value="${config.include.difc.no-opt-barriers}"/>
+        <filter token="_RVM_WITH_DIFC_NO_REDUNDANCY_ELIMINATION_" value="${config.include.difc.no-redundancy-elimination}"/>
+        <filter token="_RVM_WITH_DIFC_NO_LATE_REDUNDANCY_ELIMINATION_" value="${config.include.difc.no-late-redundancy-elimination}"/>
+        <filter token="_RVM_WITH_DIFC_NO_READ_OR_WRITE_BARRIERS_" value="${config.include.difc.no-read-or-write-barriers}"/>
+        <filter token="_RVM_WITH_DIFC_NO_RW_BARRIER_CONTENTS_" value="${config.include.difc.no-rw-barrier-contents}"/>
+        <filter token="_RVM_WITH_DIFC_NO_STATIC_OR_ALLOC_BARRIERS_" value="${config.include.difc.no-static-or-alloc-barriers}"/>
+        <filter token="_RVM_WITH_DIFC_NO_INLINED_BARRIERS_" value="${config.include.difc.no-inlined-barriers}"/>
+        <filter token="_RVM_WITH_DIFC_NO_SLOW_PATH_" value="${config.include.difc.no-slow-path}"/>
+        <filter token="_RVM_WITH_DIFC_NO_SUBSET_CHECKS_" value="${config.include.difc.no-subset-checks}"/>
+        <filter token="_RVM_WITH_DIFC_DYNAMIC_BARRIERS_" value="${config.include.difc.dynamic-barriers}"/>
+        <filter token="_RVM_WITH_DIFC_LIBRARIES_" value="${config.include.difc.libraries}"/>
+      	<!-- AIRAVAT: build-time options -->
+      	<filter token="_RVM_WITH_AIRAVAT_ENABLED_" value = "${config.include.airavat.enabled}"/>
       </filterset>
     </copy>
 
Index: tools/bootImageRunner/difc.h
===================================================================
--- tools/bootImageRunner/difc.h	(revision 0)
+++ tools/bootImageRunner/difc.h	(revision 281)
@@ -0,0 +1,94 @@
+// Standard headers for difc system calls
+
+#include <inttypes.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+typedef uint64_t label_t;
+typedef uint64_t capability_t;
+
+
+#define LABEL_LIST_BYTES 256
+#define LABEL_LIST_LABELS (LABEL_LIST_BYTES / sizeof(label_t))
+#define LABEL_LIST_MAX_ENTRIES (LABEL_LIST_BYTES / sizeof(label_t)) - 1
+
+struct label_struct {
+	label_t secList[LABEL_LIST_LABELS];
+	label_t intList[LABEL_LIST_LABELS];
+};
+
+#define __NR_alloc_label         328
+#define __NR_set_task_label      329
+#define __NR_mkdir_labeled       330
+#define __NR_drop_capabilities   331
+#define __NR_create_labeled      332
+#define __NR_set_file_label      333
+#define __NR_replace_label_tcb   334
+
+#define REGION_NONE  0
+#define REGION_SELF  1
+#define REGION_GROUP 2
+
+
+
+#define LABEL_OP_ADD     0
+#define LABEL_OP_REMOVE  1
+#define LABEL_OP_REPLACE 2
+
+#define LABEL_TYPE_SEC  0
+#define LABEL_TYPE_INT  1
+
+#define CAP_PLUS_MASK  (1<<30)
+#define CAP_MINUS_MASK (1<<31)
+
+
+// type - CAP_PLUS_MASK, CAP_MINUS_MASK, or them or'ed together  
+
+static inline label_t alloc_label(int type, int region){
+  return  syscall(__NR_alloc_label, type, region);
+}
+
+// ulabel can be a label struct, when used with LABEL_OP_REPLACE
+static inline int set_task_label(label_t label, int op, int label_type, 
+				 struct label_struct *ulabel){
+  return syscall(__NR_set_task_label, label, op, label_type, ulabel);
+}
+
+// Iterators borrowed from kernel
+#define list_for_each_label(idx, l, head)	\
+	for(idx = 1; idx <= *(head) && ({l = head[idx]; 1; }); idx++)
+
+static inline int mkdir_labeled (const char* pathname, mode_t mode, struct label_struct *label){
+  return syscall(__NR_mkdir_labeled, pathname, mode, label);
+}
+
+static inline int create_labeled (const char* pathname, mode_t mode, struct label_struct *label){
+  return syscall(__NR_create_labeled, pathname, mode, label);
+}
+
+#define CAP_OP_FLAG_PERMANENT 0
+#define CAP_OP_FLAG_TEMPORARY 1
+
+
+/* drop_capablities
+ *
+ * list - an array of capability_t's
+ * len - the length of the list in caps, not bytes
+ * type - CAP_PLUS_MASK, CAP_MINUS_MASK, or them or'ed together  
+ * flag - permanent or temporary
+ *
+ * rv: -1 on error
+ *  errno: ENOMEM (allocation for copy failed)
+ *         ENOENT (attempt to drop a cap not in the cap set)
+ */
+static inline int drop_capabilities(capability_t *list, unsigned int len, int type, int flag){
+  return syscall(__NR_drop_capabilities, list, len, type, flag);
+}
+
+static inline int set_file_label(const char *path, struct label_struct *ulabel){
+  return syscall(__NR_set_file_label, path, ulabel);
+}
+
+static inline int replace_label_tcb(struct label_struct *label){
+  return syscall(__NR_replace_label_tcb, label);
+}
Index: tools/bootImageRunner/sys.C
===================================================================
--- tools/bootImageRunner/sys.C	(revision 4)
+++ tools/bootImageRunner/sys.C	(working copy)
@@ -46,6 +46,9 @@
 #include <time.h>               // nanosleep() and other
 #include <utime.h>
 
+/*DIFC: OS header file*/
+#include "difc.h"
+
 #ifdef RVM_WITH_PERFCTR
 #  include "perfctr.h"
 #endif
@@ -499,6 +502,104 @@
     return access(name, kind);
 }
 
+/*DIFC: pass the labels to the OS*/
+extern "C" int
+sysPassLabels(long secrecySet[],int sec_len, long integritySet[], int int_len) {
+	int i;
+	errno=0;
+	struct label_struct cur_label;
+	cur_label.secList[0]=(label_t)sec_len;	
+	//(*cur_label.secList)=sec_len;
+	for(i=0;i<sec_len;i++)
+           cur_label.secList[i+1]=(label_t)secrecySet[i];
+	//(*cur_label.intList)=int_len;
+	cur_label.intList[0]=(label_t)int_len;
+	for(i=0;i<int_len;i++)
+           cur_label.intList[i+1]=(label_t)integritySet[i];
+	//printf("seclen=%d",sec_len);
+	return set_task_label(NULL, LABEL_OP_REPLACE, NULL, &cur_label);
+}
+
+/*DIFC: ask the OS to replace the labels without making checks*/
+extern "C" int
+sysReplaceLabelsTCB(long secrecySet[],int sec_len, long integritySet[], int int_len) {
+	int i;
+	errno=0;
+	struct label_struct cur_label;
+	//(*cur_label.secList)=sec_len;
+	cur_label.secList[0]=(label_t)sec_len;
+	for(i=0;i<sec_len;i++)
+           cur_label.secList[i+1]=(label_t)secrecySet[i];
+	//(*cur_label.intList)=int_len;
+	cur_label.intList[0]=(label_t)int_len;
+	for(i=0;i<int_len;i++)
+           cur_label.intList[i+1]=(label_t)integritySet[i];
+	return replace_label_tcb(&cur_label);
+}
+
+/*DIFC: Drop capability of the thread
+*flag=0->permanent drop;flag=1->temporary drop
+*type=0->plus capability;type=1->minus capability 
+*/
+
+extern "C" int
+sysDropCapability(long labels[], int length, int type, int flag) {
+   //printf("Drop capability: Type=%d : flag=%d\n",type,flag); 
+   errno=0;
+   if(type==0)
+	return drop_capabilities((capability_t *) labels, length, CAP_PLUS_MASK, flag);
+   if(type==1)
+	return drop_capabilities((capability_t *) labels, length, CAP_MINUS_MASK, flag);
+   return drop_capabilities((capability_t *) labels, length, CAP_PLUS_MASK|CAP_MINUS_MASK, flag);
+}
+
+
+/*DIFC: Create a new capability and add it to the thread
+*or the program's capability list
+*region=0: none; region=1: add only to the thread ; region=2: add to the program
+*In JAVA: PLUS_CAPABILITY=0, MINUS_CAPABILITY=1, BOTH_CAPABILITY=2
+*/
+
+extern "C" int
+sysCreateAndAddLabel(int type, int region) {
+   errno=0;
+   if(type==0)
+	return (int)alloc_label(CAP_PLUS_MASK, region);
+   if(type==1)
+	return (int)alloc_label(CAP_MINUS_MASK, region);	
+   return (int)alloc_label(CAP_PLUS_MASK|CAP_MINUS_MASK, region);
+}
+
+/*DIFC: create a labeled directory*/
+
+extern "C" int
+sysCreateLabeledDirectory(char *pname, int mode, long secrecySet[],int sec_len, long integritySet[], int int_len) {
+	errno=0;
+	int i;
+	struct label_struct dir_label;
+	(*dir_label.secList)=sec_len;
+	for(i=0;i<sec_len;i++)
+           dir_label.secList[i+1]=(label_t)secrecySet[i];
+	(*dir_label.intList)=int_len;
+	for(i=0;i<int_len;i++)
+           dir_label.intList[i+1]=(label_t)integritySet[i];
+	return mkdir_labeled(pname, mode, &dir_label);
+}
+
+/*DIFC: create a labeled file*/
+extern "C" int
+sysCreateLabeledFile(char *pname, int mode, long secrecySet[],int sec_len, long integritySet[], int int_len) {
+	errno=0;
+	int i;
+	struct label_struct dir_label;
+	(*dir_label.secList)=sec_len;
+	for(i=0;i<sec_len;i++)
+           dir_label.secList[i+1]=(label_t)secrecySet[i];
+	(*dir_label.intList)=int_len;
+	for(i=0;i<int_len;i++)
+           dir_label.intList[i+1]=(label_t)integritySet[i];
+	return create_labeled(pname, mode, &dir_label);
+}
 // How many bytes can be read from file/socket without blocking?
 // Taken:    file/socket descriptor
 // Returned: >=0: count, ThreadIOConstants_FD_INVALID: bad file descriptor,
Index: MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java
===================================================================
--- MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java	(revision 4)
+++ MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/ObjectModel.java	(working copy)
@@ -427,5 +427,16 @@
   public void dumpObject(ObjectReference object) {
     DebugUtil.dumpRef(object);
   }
+  
+  /** DIFC: secrecy label offset */
+  @Inline
+  public Address secrecyAddr(ObjectReference object) {
+    return org.jikesrvm.scheduler.DIFC.secrecyAddr(object.toObject());
+  }
+
+  /** DIFC: integrity label offset */
+  @Inline
+  public Address integrityAddr(ObjectReference object) {
+    return org.jikesrvm.scheduler.DIFC.integrityAddr(object.toObject());
+  }
 }
-
Index: MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java
===================================================================
--- MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java	(revision 4)
+++ MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java	(working copy)
@@ -14,6 +14,9 @@
 
 import org.jikesrvm.ArchitectureSpecific;
 import org.jikesrvm.VM;
+import org.jikesrvm.adaptive.controller.Controller;
+import org.jikesrvm.adaptive.util.AOSExternalOptions;
+import org.jikesrvm.adaptive.util.AOSOptions;
 import org.jikesrvm.classloader.Atom;
 import org.jikesrvm.classloader.RVMMethod;
 import org.jikesrvm.compilers.common.CompiledMethod;
@@ -324,6 +327,17 @@
     return false;
   }
 
+  /** DIFC: stop controller if requested */
+  @Interruptible
+  public void stopControllerIfRequested() {
+    if (VM.BuildForAdaptiveSystem) {
+      if (Controller.options.HARNESS_STOPS_CONTROLLER) {
+        Controller.stop();
+      }
+    }
+  }
+
+  
   /***********************************************************************
    *
    * Finalizers
Index: MMTk/src/org/mmtk/policy/MarkSweepSpace.java
===================================================================
--- MMTk/src/org/mmtk/policy/MarkSweepSpace.java	(revision 4)
+++ MMTk/src/org/mmtk/policy/MarkSweepSpace.java	(working copy)
@@ -272,7 +272,29 @@
     return object;
   }
 
+  // DIFC: TODO: might not be needed anymore
+  
   /**
+   * DIFC: special method for tracing labeled objects.
+   * Calls testAndSetLiveBitLabeled().
+   */
+  @Inline
+  public ObjectReference traceObjectLabeled(TransitiveClosure trace, ObjectReference object) {
+    if (HEADER_MARK_BITS) {
+      Word markValue = Plan.NEEDS_LOG_BIT_IN_HEADER ? markState.or(Plan.UNLOGGED_BIT) : markState;
+      if (testAndMark(object, markValue)) {
+        markBlock(object);
+        trace.processNode(object);
+      }
+    } else {
+      if (testAndSetLiveBitLabeled(object)) {
+        trace.processNode(object);
+      }
+    }
+    return object;
+  }
+
+  /**
    *
    * @param object The object in question
    * @return True if this object is known to be live (i.e. it is marked)
Index: MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java
===================================================================
--- MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java	(revision 4)
+++ MMTk/src/org/mmtk/policy/SegregatedFreeListSpace.java	(working copy)
@@ -660,6 +660,14 @@
     return setLiveBit(VM.objectModel.objectStartRef(object), true);
   }
 
+  // DIFC: TODO: might not be needed anymore
+  
+  /** DIFC: for labeled objects */
+  @Inline
+  public static boolean testAndSetLiveBitLabeled(ObjectReference object) {
+    return setLiveBit(VM.objectModel.objectStartRef(object).minus(8), true);
+  }
+
   /**
    * Set the live bit for the block containing the given object
    *
Index: MMTk/src/org/mmtk/vm/ObjectModel.java
===================================================================
--- MMTk/src/org/mmtk/vm/ObjectModel.java	(revision 4)
+++ MMTk/src/org/mmtk/vm/ObjectModel.java	(working copy)
@@ -12,6 +12,7 @@
  */
 package org.mmtk.vm;
 
+import org.vmmagic.pragma.Inline;
 import org.vmmagic.pragma.Uninterruptible;
 import org.vmmagic.unboxed.*;
 
@@ -253,4 +254,11 @@
   static Offset arrayBaseOffsetTrapdoor(ObjectModel o) {
     return o.getArrayBaseOffset();
   }
+  
+  /** DIFC: secrecy label offset */
+  public abstract Address secrecyAddr(ObjectReference object);
+
+  /** DIFC: integrity label offset */
+  public abstract Address integrityAddr(ObjectReference object);
+
 }
Index: MMTk/src/org/mmtk/vm/Collection.java
===================================================================
--- MMTk/src/org/mmtk/vm/Collection.java	(revision 4)
+++ MMTk/src/org/mmtk/vm/Collection.java	(working copy)
@@ -168,4 +168,8 @@
    * true if yielded.
    */
   public abstract boolean yieldpoint();
+  
+  /** DIFC: stop controller if requested */
+  @Interruptible
+  public abstract void stopControllerIfRequested();
 }
Index: MMTk/src/org/mmtk/plan/MutatorContext.java
===================================================================
--- MMTk/src/org/mmtk/plan/MutatorContext.java	(revision 4)
+++ MMTk/src/org/mmtk/plan/MutatorContext.java	(working copy)
@@ -12,6 +12,7 @@
  */
 package org.mmtk.plan;
 
+import org.mmtk.policy.ExplicitFreeListLocal;
 import org.mmtk.policy.MarkSweepLocal;
 import org.mmtk.policy.Space;
 import org.mmtk.policy.ImmortalLocal;
@@ -115,6 +116,10 @@
   /** Per-mutator allocator into the non moving space */
   private MarkSweepLocal nonmove = new MarkSweepLocal(Plan.nonMovingSpace);
 
+  /** DIFC: per-mutator allocator for labeled objects */
+  //private ImmortalLocal labeled = new ImmortalLocal(Plan.labeledSpace);
+  private MarkSweepLocal labeled = new MarkSweepLocal(Plan.labeledSpace);
+
   /** Per-mutator allocator into the primitive large object space */
   protected LargeObjectLocal plos = new LargeObjectLocal(Plan.ploSpace);
 
@@ -190,6 +195,9 @@
     case      Plan.ALLOC_CODE: return smcode.alloc(bytes, align, offset);
     case      Plan.ALLOC_LARGE_CODE: return lgcode.alloc(bytes, align, offset);
     case      Plan.ALLOC_NON_MOVING: return nonmove.alloc(bytes, align, offset);
+    // DIFC: label set pointers use two words before object
+    // DIFC: TODO: don't hard-code 8
+    case      Plan.ALLOC_LABELED: return labeled.alloc(bytes + 8, align, offset).plus(8);
     default:
       VM.assertions.fail("No such allocator");
       return Address.zero();
@@ -215,6 +223,8 @@
     case          Plan.ALLOC_CODE: Plan.smallCodeSpace.initializeHeader(ref, true); return;
     case    Plan.ALLOC_LARGE_CODE: Plan.largeCodeSpace.initializeHeader(ref, true); return;
     case    Plan.ALLOC_NON_MOVING: Plan.nonMovingSpace.initializeHeader(ref, true); return;
+    // DIFC: labeled objects
+    case    Plan.ALLOC_LABELED:    Plan.labeledSpace.initializeHeader(ref, true); return;
     default:
       VM.assertions.fail("No such allocator");
     }
@@ -277,6 +287,8 @@
     if (a == los)      return Plan.loSpace;
     if (a == plos)     return Plan.ploSpace;
     if (a == nonmove)  return Plan.nonMovingSpace;
+    // DIFC: labeled space
+    if (a == labeled)  return Plan.labeledSpace;
     if (Plan.USE_CODE_SPACE && a == smcode)   return Plan.smallCodeSpace;
     if (Plan.USE_CODE_SPACE && a == lgcode)   return Plan.largeCodeSpace;
 
@@ -298,6 +310,8 @@
     if (space == Plan.loSpace)        return los;
     if (space == Plan.ploSpace)       return plos;
     if (space == Plan.nonMovingSpace) return nonmove;
+    // DIFC: labeled space
+    if (space == Plan.labeledSpace) return labeled;
     if (Plan.USE_CODE_SPACE && space == Plan.smallCodeSpace) return smcode;
     if (Plan.USE_CODE_SPACE && space == Plan.largeCodeSpace) return lgcode;
 
Index: MMTk/src/org/mmtk/plan/generational/Gen.java
===================================================================
--- MMTk/src/org/mmtk/plan/generational/Gen.java	(revision 4)
+++ MMTk/src/org/mmtk/plan/generational/Gen.java	(working copy)
@@ -224,6 +224,8 @@
 
     if (loSpace.allocationFailed() ||
         nonMovingSpace.allocationFailed() ||
+        // DIFC: check labeled space
+        labeledSpace.allocationFailed() ||
         (USE_CODE_SPACE && (largeCodeSpace.allocationFailed() || smallCodeSpace.allocationFailed()))) {
       // We need space from the nursery
       return true;
Index: MMTk/src/org/mmtk/plan/generational/GenNurseryTraceLocal.java
===================================================================
--- MMTk/src/org/mmtk/plan/generational/GenNurseryTraceLocal.java	(revision 4)
+++ MMTk/src/org/mmtk/plan/generational/GenNurseryTraceLocal.java	(working copy)
@@ -65,7 +65,9 @@
       else
         return Gen.ploSpace.isLive(object);
     }
-    if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(super.isLive(object));
+    // DIFC: adding the new space exposes the incorrectness of this assertion
+    // (i've seen something like this before)
+    //if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(super.isLive(object));
     return true;
   }
 
Index: MMTk/src/org/mmtk/plan/Plan.java
===================================================================
--- MMTk/src/org/mmtk/plan/Plan.java	(revision 4)
+++ MMTk/src/org/mmtk/plan/Plan.java	(working copy)
@@ -12,6 +12,7 @@
  */
 package org.mmtk.plan;
 
+import org.mmtk.policy.ExplicitFreeListSpace;
 import org.mmtk.policy.MarkSweepSpace;
 import org.mmtk.policy.SegregatedFreeListSpace;
 import org.mmtk.policy.Space;
@@ -94,7 +95,9 @@
   public static final int ALLOC_COLD_CODE = USE_CODE_SPACE ? ALLOC_CODE : ALLOC_DEFAULT;
   public static final int ALLOC_STACK = ALLOC_LOS;
   public static final int ALLOC_IMMORTAL_STACK = ALLOC_IMMORTAL;
-  public static final int ALLOCATORS = 9;
+  // DIFC: added labeled allocator
+  public static final int ALLOC_LABELED = 9;
+  public static final int ALLOCATORS = 10;
   public static final int DEFAULT_SITE = -1;
 
   /* Miscellaneous Constants */
@@ -139,6 +142,11 @@
   /** Space used to allocate objects that cannot be moved. we do not need a large space as the LOS is non-moving. */
   public static final MarkSweepSpace nonMovingSpace = new MarkSweepSpace("non-moving", DEFAULT_POLL_FREQUENCY, VMRequest.create());
 
+  /** DIFC: labeled object space */
+  //public static final ImmortalSpace labeledSpace = new ImmortalSpace("labeled", DEFAULT_POLL_FREQUENCY, VMRequest.create(256));
+  public static final MarkSweepSpace labeledSpace = new MarkSweepSpace("labeled", DEFAULT_POLL_FREQUENCY, VMRequest.create(256));
+  //public static final MarkSweepSpace labeledSpace = new MarkSweepSpace("labeled", DEFAULT_POLL_FREQUENCY, VMRequest.create(Address.fromIntZeroExtend(0x80000000), Extent.fromIntZeroExtend(0x10000000)));
+  
   public static final MarkSweepSpace smallCodeSpace = USE_CODE_SPACE ? new MarkSweepSpace("sm-code", DEFAULT_POLL_FREQUENCY, VMRequest.create()) : null;
   public static final LargeObjectSpace largeCodeSpace = USE_CODE_SPACE ? new LargeObjectSpace("lg-code", DEFAULT_POLL_FREQUENCY, VMRequest.create()) : null;
 
@@ -150,6 +158,8 @@
   public static final int PLOS = ploSpace.getDescriptor();
   public static final int SANITY = sanitySpace.getDescriptor();
   public static final int NON_MOVING = nonMovingSpace.getDescriptor();
+  // DIFC: labeled object space
+  public static final int LABELED = labeledSpace.getDescriptor();
   public static final int SMALL_CODE = USE_CODE_SPACE ? smallCodeSpace.getDescriptor() : 0;
   public static final int LARGE_CODE = USE_CODE_SPACE ? largeCodeSpace.getDescriptor() : 0;
 
@@ -654,6 +664,9 @@
     boolean oldFullHeap = Options.fullHeapSystemGC.getValue();
     boolean oldIgnore = Options.ignoreSystemGC.getValue();
 
+    // DIFC: stop hotspot compilation if requested
+    VM.collection.stopControllerIfRequested();
+    
     // Set desired values.
     Options.fullHeapSystemGC.setValue(true);
     Options.ignoreSystemGC.setValue(false);
@@ -804,7 +817,9 @@
   public int getPagesUsed() {
     return loSpace.reservedPages() + ploSpace.reservedPages() +
            immortalSpace.reservedPages() + metaDataSpace.reservedPages() +
-           nonMovingSpace.reservedPages();
+           nonMovingSpace.reservedPages() +
+           // DIFC: add labeled space
+           labeledSpace.reservedPages();
   }
 
   /**
@@ -817,7 +832,9 @@
   public int getPagesRequired() {
     return loSpace.requiredPages() + ploSpace.requiredPages() +
       metaDataSpace.requiredPages() + immortalSpace.requiredPages() +
-      nonMovingSpace.requiredPages();
+      nonMovingSpace.requiredPages() +
+      // DIFC: add labeled space
+      labeledSpace.requiredPages();
   }
 
   /**
@@ -995,6 +1012,9 @@
       return true;
     if (Space.isInSpace(NON_MOVING, object))
       return true;
+    // DIFC: labeled objects don't move
+    if (Space.isInSpace(LABELED, object))
+      return true;
     if (USE_CODE_SPACE && Space.isInSpace(SMALL_CODE, object))
       return true;
     if (USE_CODE_SPACE && Space.isInSpace(LARGE_CODE, object))
Index: MMTk/src/org/mmtk/plan/TraceLocal.java
===================================================================
--- MMTk/src/org/mmtk/plan/TraceLocal.java	(revision 4)
+++ MMTk/src/org/mmtk/plan/TraceLocal.java	(working copy)
@@ -209,6 +209,9 @@
       return Plan.ploSpace.isLive(object);
     else if (space == Plan.nonMovingSpace)
       return Plan.nonMovingSpace.isLive(object);
+    // DIFC: labeled space
+    else if (space == Plan.labeledSpace)
+      return Plan.labeledSpace.isLive(object);
     else if (Plan.USE_CODE_SPACE && space == Plan.smallCodeSpace)
       return Plan.smallCodeSpace.isLive(object);
     else if (Plan.USE_CODE_SPACE && space == Plan.largeCodeSpace)
@@ -266,6 +269,30 @@
       return Plan.ploSpace.traceObject(this, object);
     if (Space.isInSpace(Plan.NON_MOVING, object))
       return Plan.nonMovingSpace.traceObject(this, object);
+    // DIFC: trace labeled objects; also trace the secrecy and integrity labels!
+    if (Space.isInSpace(Plan.LABELED, object)) {
+
+      // trace the object
+      ObjectReference newObject = Plan.labeledSpace.traceObjectLabeled(this, object);
+
+      // trace the secrecy label set
+      ObjectReference secrecyLabelSet = VM.objectModel.secrecyAddr(newObject).loadObjectReference();
+      if (VM.VERIFY_ASSERTIONS) {
+        VM.assertions._assert(!secrecyLabelSet.isNull());
+        VM.assertions._assert(willNotMoveInCurrentCollection(secrecyLabelSet));
+      }
+      traceObject(secrecyLabelSet);
+
+      // trace the integrity label set
+      ObjectReference integrityLabelSet = VM.objectModel.integrityAddr(newObject).loadObjectReference();
+      if (VM.VERIFY_ASSERTIONS) {
+        VM.assertions._assert(!integrityLabelSet.isNull());
+        VM.assertions._assert(willNotMoveInCurrentCollection(integrityLabelSet));
+      }
+      traceObject(integrityLabelSet);
+      
+      return newObject;
+    }
     if (Plan.USE_CODE_SPACE && Space.isInSpace(Plan.SMALL_CODE, object))
       return Plan.smallCodeSpace.traceObject(this, object);
     if (Plan.USE_CODE_SPACE && Space.isInSpace(Plan.LARGE_CODE, object))
@@ -324,6 +351,9 @@
       return true;
     if (Space.isInSpace(Plan.NON_MOVING, object))
       return true;
+    // DIFC: labeled objects don't move
+    if (Space.isInSpace(Plan.LABELED, object))
+      return true;
     if (Plan.USE_CODE_SPACE && Space.isInSpace(Plan.SMALL_CODE, object))
       return true;
     if (Plan.USE_CODE_SPACE && Space.isInSpace(Plan.LARGE_CODE, object))
Index: MMTk/src/org/mmtk/plan/Simple.java
===================================================================
--- MMTk/src/org/mmtk/plan/Simple.java	(revision 4)
+++ MMTk/src/org/mmtk/plan/Simple.java	(working copy)
@@ -220,6 +220,8 @@
       loSpace.prepare(true);
       ploSpace.prepare(true);
       nonMovingSpace.prepare(true);
+      // DIFC: labeled space
+      labeledSpace.prepare(true);
       if (USE_CODE_SPACE) {
         smallCodeSpace.prepare(true);
         largeCodeSpace.prepare(true);
@@ -239,6 +241,8 @@
       loSpace.release(true);
       ploSpace.release(true);
       nonMovingSpace.release();
+      // DIFC: labeled space
+      labeledSpace.release();
       if (USE_CODE_SPACE) {
         smallCodeSpace.release();
         largeCodeSpace.release(true);
