src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/arraycopy/UnsafeArrayCopySnippets.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/arraycopy/UnsafeArrayCopySnippets.java	Mon Mar 20 17:39:04 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/arraycopy/UnsafeArrayCopySnippets.java	Mon Mar 20 17:39:03 2017

*** 37,60 **** --- 37,61 ---- import static org.graalvm.compiler.replacements.SnippetTemplate.DEFAULT_REPLACER; import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; import org.graalvm.compiler.api.replacements.Fold; import org.graalvm.compiler.api.replacements.Snippet; ! import org.graalvm.compiler.asm.NumUtil; ! import org.graalvm.compiler.core.common.NumUtil; import org.graalvm.compiler.core.common.LocationIdentity; import org.graalvm.compiler.hotspot.meta.HotSpotProviders; import org.graalvm.compiler.hotspot.phases.WriteBarrierAdditionPhase; import org.graalvm.compiler.nodes.NamedLocationIdentity; import org.graalvm.compiler.nodes.extended.UnsafeCopyNode; ! import org.graalvm.compiler.nodes.extended.UnsafeLoadNode; ! import org.graalvm.compiler.nodes.extended.RawLoadNode; + import org.graalvm.compiler.nodes.extended.RawStoreNode; import org.graalvm.compiler.nodes.spi.LoweringTool; + import org.graalvm.compiler.options.OptionValues; import org.graalvm.compiler.replacements.SnippetTemplate; import org.graalvm.compiler.replacements.SnippetTemplate.AbstractTemplates; import org.graalvm.compiler.replacements.SnippetTemplate.Arguments; import org.graalvm.compiler.replacements.SnippetTemplate.SnippetInfo; import org.graalvm.compiler.replacements.Snippets; import org.graalvm.compiler.replacements.nodes.DirectObjectStoreNode; import org.graalvm.compiler.word.ObjectAccess; import org.graalvm.compiler.word.Unsigned; import org.graalvm.compiler.word.Word; import jdk.vm.ci.code.TargetDescription;
*** 203,213 **** --- 204,214 ---- vectorizedCopy(src, srcPos, dest, destPos, length, kind, getArrayLocation(kind)); } /** * For this kind, Object, we want to avoid write barriers between writes, but instead have them ! * at the end of the snippet. This is done by using {@link DirectObjectStoreNode}, and rely on ! * at the end of the snippet. This is done by using {@link RawStoreNode}, and rely on * {@link WriteBarrierAdditionPhase} to put write barriers after the {@link UnsafeArrayCopyNode} * with kind Object. */ @Snippet public static void arraycopyObject(Object[] src, int srcPos, Object[] dest, int destPos, int length) {
*** 216,233 **** --- 217,234 ---- int arrayBaseOffset = arrayBaseOffset(kind); LocationIdentity arrayLocation = getArrayLocation(kind); if (src == dest && srcPos < destPos) { // bad aliased case long start = (long) (length - 1) * scale; for (long i = start; i >= 0; i -= scale) { ! Object a = UnsafeLoadNode.load(src, arrayBaseOffset + i + (long) srcPos * scale, kind, arrayLocation); ! DirectObjectStoreNode.storeObject(dest, arrayBaseOffset, i + (long) destPos * scale, a, getArrayLocation(kind), kind); ! Object a = RawLoadNode.load(src, arrayBaseOffset + i + (long) srcPos * scale, kind, arrayLocation); ! RawStoreNode.storeObject(dest, arrayBaseOffset + i + (long) destPos * scale, a, kind, getArrayLocation(kind), false); } } else { long end = (long) length * scale; for (long i = 0; i < end; i += scale) { ! Object a = UnsafeLoadNode.load(src, arrayBaseOffset + i + (long) srcPos * scale, kind, arrayLocation); ! DirectObjectStoreNode.storeObject(dest, arrayBaseOffset, i + (long) destPos * scale, a, getArrayLocation(kind), kind); ! Object a = RawLoadNode.load(src, arrayBaseOffset + i + (long) srcPos * scale, kind, arrayLocation); ! RawStoreNode.storeObject(dest, arrayBaseOffset + i + (long) destPos * scale, a, kind, getArrayLocation(kind), false); } } } @Snippet
*** 282,293 **** --- 283,294 ---- public static class Templates extends AbstractTemplates { private final SnippetInfo[] arraycopySnippets; private final SnippetInfo genericPrimitiveSnippet; ! public Templates(OptionValues options, HotSpotProviders providers, TargetDescription target) { ! super(options, providers, providers.getSnippetReflection(), target); arraycopySnippets = new SnippetInfo[JavaKind.values().length]; arraycopySnippets[JavaKind.Boolean.ordinal()] = snippet(UnsafeArrayCopySnippets.class, "arraycopyBoolean"); arraycopySnippets[JavaKind.Byte.ordinal()] = snippet(UnsafeArrayCopySnippets.class, "arraycopyByte"); arraycopySnippets[JavaKind.Short.ordinal()] = snippet(UnsafeArrayCopySnippets.class, "arraycopyShort");

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/arraycopy/UnsafeArrayCopySnippets.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File