Mercurial > hg > graal-jvmci-8
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());