< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/ConstantStringIndexOfSnippets.java

Print this page
rev 52509 : [mq]: graal

*** 29,39 **** import org.graalvm.compiler.api.replacements.Fold; import org.graalvm.compiler.api.replacements.Fold.InjectedParameter; import org.graalvm.compiler.api.replacements.Snippet; import org.graalvm.compiler.api.replacements.Snippet.ConstantParameter; import org.graalvm.compiler.api.replacements.SnippetReflectionProvider; - import org.graalvm.compiler.core.common.spi.ArrayOffsetProvider; import org.graalvm.compiler.debug.DebugHandlersFactory; import org.graalvm.compiler.nodes.StructuredGraph; import org.graalvm.compiler.nodes.spi.LoweringTool; import org.graalvm.compiler.options.OptionValues; import org.graalvm.compiler.phases.util.Providers; --- 29,38 ----
*** 42,51 **** --- 41,51 ---- import org.graalvm.compiler.replacements.SnippetTemplate.SnippetInfo; import org.graalvm.compiler.replacements.nodes.ExplodeLoopNode; import jdk.vm.ci.code.TargetDescription; import jdk.vm.ci.meta.JavaKind; + import jdk.vm.ci.meta.MetaAccessProvider; public class ConstantStringIndexOfSnippets implements Snippets { public static class Templates extends AbstractTemplates { private final SnippetInfo indexOfConstant = snippet(ConstantStringIndexOfSnippets.class, "indexOfConstant");
*** 93,104 **** args.add("sourceCount", utf16IndexOf.getArgument(1)); args.addConst("target", utf16IndexOf.getArgument(2)); args.add("targetCount", utf16IndexOf.getArgument(3)); args.add("origFromIndex", utf16IndexOf.getArgument(4)); byte[] targetByteArray = snippetReflection.asObject(byte[].class, utf16IndexOf.getArgument(2).asJavaConstant()); ! args.addConst("md2", md2Utf16(targetByteArray)); ! args.addConst("cache", computeCacheUtf16(targetByteArray)); template(utf16IndexOf, args).instantiate(providers.getMetaAccess(), utf16IndexOf, DEFAULT_REPLACER, args); } } static int md2(char[] target) { --- 93,104 ---- args.add("sourceCount", utf16IndexOf.getArgument(1)); args.addConst("target", utf16IndexOf.getArgument(2)); args.add("targetCount", utf16IndexOf.getArgument(3)); args.add("origFromIndex", utf16IndexOf.getArgument(4)); byte[] targetByteArray = snippetReflection.asObject(byte[].class, utf16IndexOf.getArgument(2).asJavaConstant()); ! args.addConst("md2", md2Utf16(tool.getMetaAccess(), targetByteArray)); ! args.addConst("cache", computeCacheUtf16(tool.getMetaAccess(), targetByteArray)); template(utf16IndexOf, args).instantiate(providers.getMetaAccess(), utf16IndexOf, DEFAULT_REPLACER, args); } } static int md2(char[] target) {
*** 149,164 **** cache |= (1 << (s[i] & 63)); } return cache; } ! static int md2Utf16(byte[] target) { int c = target.length / 2; if (c == 0) { return 0; } ! long base = UnsafeAccess.UNSAFE.arrayBaseOffset(byte[].class); char lastChar = UnsafeAccess.UNSAFE.getChar(target, base + (c - 1) * 2); int md2 = c; for (int i = 0; i < c - 1; i++) { char currChar = UnsafeAccess.UNSAFE.getChar(target, base + i * 2); if (currChar == lastChar) { --- 149,164 ---- cache |= (1 << (s[i] & 63)); } return cache; } ! static int md2Utf16(MetaAccessProvider metaAccess, byte[] target) { int c = target.length / 2; if (c == 0) { return 0; } ! long base = metaAccess.getArrayBaseOffset(JavaKind.Byte); char lastChar = UnsafeAccess.UNSAFE.getChar(target, base + (c - 1) * 2); int md2 = c; for (int i = 0; i < c - 1; i++) { char currChar = UnsafeAccess.UNSAFE.getChar(target, base + i * 2); if (currChar == lastChar) {
*** 166,199 **** } } return md2; } ! static long computeCacheUtf16(byte[] s) { int c = s.length / 2; int cache = 0; int i; ! long base = UnsafeAccess.UNSAFE.arrayBaseOffset(byte[].class); for (i = 0; i < c - 1; i++) { char currChar = UnsafeAccess.UNSAFE.getChar(s, base + i * 2); cache |= (1 << (currChar & 63)); } return cache; } @Fold ! static int byteArrayBaseOffset(@InjectedParameter ArrayOffsetProvider arrayOffsetProvider) { ! return arrayOffsetProvider.arrayBaseOffset(JavaKind.Byte); } @Fold ! static int charArrayBaseOffset(@InjectedParameter ArrayOffsetProvider arrayOffsetProvider) { ! return arrayOffsetProvider.arrayBaseOffset(JavaKind.Char); } /** Marker value for the {@link InjectedParameter} injected parameter. */ ! static final ArrayOffsetProvider INJECTED = null; @Snippet public static int indexOfConstant(char[] source, int sourceOffset, int sourceCount, @ConstantParameter char[] target, int targetOffset, int targetCount, int origFromIndex, @ConstantParameter int md2, @ConstantParameter long cache) { --- 166,199 ---- } } return md2; } ! static long computeCacheUtf16(MetaAccessProvider metaAccess, byte[] s) { int c = s.length / 2; int cache = 0; int i; ! long base = metaAccess.getArrayBaseOffset(JavaKind.Byte); for (i = 0; i < c - 1; i++) { char currChar = UnsafeAccess.UNSAFE.getChar(s, base + i * 2); cache |= (1 << (currChar & 63)); } return cache; } @Fold ! static int byteArrayBaseOffset(@InjectedParameter MetaAccessProvider metaAccess) { ! return metaAccess.getArrayBaseOffset(JavaKind.Byte); } @Fold ! static int charArrayBaseOffset(@InjectedParameter MetaAccessProvider metaAccess) { ! return metaAccess.getArrayBaseOffset(JavaKind.Char); } /** Marker value for the {@link InjectedParameter} injected parameter. */ ! static final MetaAccessProvider INJECTED = null; @Snippet public static int indexOfConstant(char[] source, int sourceOffset, int sourceCount, @ConstantParameter char[] target, int targetOffset, int targetCount, int origFromIndex, @ConstantParameter int md2, @ConstantParameter long cache) {
< prev index next >