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