< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64ArrayEqualsStub.java
Print this page
@@ -29,10 +29,11 @@
import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage;
import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
import org.graalvm.compiler.hotspot.stubs.SnippetStub;
import org.graalvm.compiler.options.OptionValues;
import org.graalvm.compiler.replacements.nodes.ArrayEqualsNode;
+import org.graalvm.compiler.replacements.nodes.ArrayRegionEqualsNode;
import jdk.internal.vm.compiler.word.Pointer;
import jdk.vm.ci.meta.JavaKind;
public final class AMD64ArrayEqualsStub extends SnippetStub {
@@ -52,10 +53,17 @@
public static final ForeignCallDescriptor STUB_FLOAT_ARRAY_EQUALS = new ForeignCallDescriptor(
"floatArraysEquals", boolean.class, Pointer.class, Pointer.class, int.class);
public static final ForeignCallDescriptor STUB_DOUBLE_ARRAY_EQUALS = new ForeignCallDescriptor(
"doubleArraysEquals", boolean.class, Pointer.class, Pointer.class, int.class);
+ public static final ForeignCallDescriptor STUB_BYTE_ARRAY_EQUALS_DIRECT = new ForeignCallDescriptor(
+ "byteArraysEqualsDirect", boolean.class, Pointer.class, Pointer.class, int.class);
+ public static final ForeignCallDescriptor STUB_CHAR_ARRAY_EQUALS_DIRECT = new ForeignCallDescriptor(
+ "charArraysEqualsDirect", boolean.class, Pointer.class, Pointer.class, int.class);
+ public static final ForeignCallDescriptor STUB_CHAR_ARRAY_EQUALS_BYTE_ARRAY = new ForeignCallDescriptor(
+ "charArrayEqualsByteArray", boolean.class, Pointer.class, Pointer.class, int.class);
+
public AMD64ArrayEqualsStub(ForeignCallDescriptor foreignCallDescriptor, OptionValues options, HotSpotProviders providers, HotSpotForeignCallLinkage linkage) {
super(foreignCallDescriptor.getName(), options, providers, linkage);
}
@Snippet
@@ -95,6 +103,21 @@
@Snippet
private static boolean doubleArraysEquals(Pointer array1, Pointer array2, int length) {
return ArrayEqualsNode.equals(array1, array2, length, JavaKind.Double);
}
+
+ @Snippet
+ private static boolean byteArraysEqualsDirect(Pointer array1, Pointer array2, int length) {
+ return ArrayRegionEqualsNode.regionEquals(array1, array2, length, JavaKind.Byte, JavaKind.Byte);
+ }
+
+ @Snippet
+ private static boolean charArraysEqualsDirect(Pointer array1, Pointer array2, int length) {
+ return ArrayRegionEqualsNode.regionEquals(array1, array2, length, JavaKind.Char, JavaKind.Char);
+ }
+
+ @Snippet
+ private static boolean charArrayEqualsByteArray(Pointer array1, Pointer array2, int length) {
+ return ArrayRegionEqualsNode.regionEquals(array1, array2, length, JavaKind.Char, JavaKind.Byte);
+ }
}
< prev index next >