changeset 10951:e2ac8bf20433

Early exits from G1 Array Range barriers if length==0
author Christos Kotselidis <christos.kotselidis@oracle.com>
date Fri, 02 Aug 2013 18:08:08 +0200
parents d2187f88cdd2
children b43bc053ce8f
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java
diffstat 1 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java	Fri Aug 02 18:05:27 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java	Fri Aug 02 18:08:08 2013 +0200
@@ -219,17 +219,17 @@
 
     @Snippet
     public static void g1ArrayRangePreWriteBarrier(Object object, int startIndex, int length) {
-        Object dest = FixedValueAnchorNode.getObject(object);
         Word thread = thread();
         byte markingValue = thread.readByte(g1SATBQueueMarkingOffset());
+        // If the concurrent marker is not enabled return.
+        if (markingValue == (byte) 0 || length == 0) {
+            return;
+        }
+        Object dest = FixedValueAnchorNode.getObject(object);
         Word bufferAddress = thread.readWord(g1SATBQueueBufferOffset());
         Word indexAddress = thread.add(g1SATBQueueIndexOffset());
         Word indexValue = indexAddress.readWord(0);
 
-        // If the concurrent marker is not enabled return.
-        if (markingValue == (byte) 0) {
-            return;
-        }
         Word oop;
         final int scale = arrayIndexScale(Kind.Object);
         int header = arrayBaseOffset(Kind.Object);
@@ -253,6 +253,9 @@
 
     @Snippet
     public static void g1ArrayRangePostWriteBarrier(Object object, int startIndex, int length) {
+        if (length == 0) {
+            return;
+        }
         Object dest = FixedValueAnchorNode.getObject(object);
         Word thread = thread();
         Word bufferAddress = thread.readWord(g1CardQueueBufferOffset());