< prev index next >

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

Print this page
rev 52509 : [mq]: graal


 195             Registration r;
 196             r = new Registration(plugins, String.class, replacementsBytecodeProvider);
 197             r.setAllowOverwrite(true);
 198             if (arch.getFeatures().contains(CPUFeature.SSE4_2)) {
 199                 r.registerMethodSubstitution(AMD64StringSubstitutions.class, "indexOf", char[].class, int.class,
 200                                 int.class, char[].class, int.class, int.class, int.class);
 201             }
 202             if (arch.getFeatures().contains(CPUFeature.SSSE3)) {
 203                 r.registerMethodSubstitution(AMD64StringSubstitutions.class, "indexOf", Receiver.class, int.class, int.class);
 204             }
 205             r.registerMethodSubstitution(AMD64StringSubstitutions.class, "compareTo", Receiver.class, String.class);
 206         }
 207     }
 208 
 209     private static void registerStringLatin1Plugins(InvocationPlugins plugins, AMD64 arch, BytecodeProvider replacementsBytecodeProvider) {
 210         if (JAVA_SPECIFICATION_VERSION >= 9) {
 211             Registration r = new Registration(plugins, "java.lang.StringLatin1", replacementsBytecodeProvider);
 212             r.setAllowOverwrite(true);
 213             r.registerMethodSubstitution(AMD64StringLatin1Substitutions.class, "compareTo", byte[].class, byte[].class);
 214             r.registerMethodSubstitution(AMD64StringLatin1Substitutions.class, "compareToUTF16", byte[].class, byte[].class);



 215             if (arch.getFeatures().contains(CPUFeature.SSSE3)) {
 216                 r.registerMethodSubstitution(AMD64StringLatin1Substitutions.class, "indexOf", byte[].class, int.class, int.class);
 217             }
 218         }
 219     }
 220 
 221     private static void registerStringUTF16Plugins(InvocationPlugins plugins, AMD64 arch, BytecodeProvider replacementsBytecodeProvider) {
 222         if (JAVA_SPECIFICATION_VERSION >= 9) {
 223             Registration r = new Registration(plugins, "java.lang.StringUTF16", replacementsBytecodeProvider);
 224             r.setAllowOverwrite(true);
 225             r.registerMethodSubstitution(AMD64StringUTF16Substitutions.class, "compareTo", byte[].class, byte[].class);
 226             r.registerMethodSubstitution(AMD64StringUTF16Substitutions.class, "compareToLatin1", byte[].class, byte[].class);



 227             if (arch.getFeatures().contains(CPUFeature.SSSE3)) {
 228                 r.registerMethodSubstitution(AMD64StringUTF16Substitutions.class, "indexOfCharUnsafe", byte[].class, int.class, int.class, int.class);
 229             }
 230         }
 231     }
 232 
 233     private static void registerUnsafePlugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider, boolean explicitUnsafeNullChecks) {
 234         registerUnsafePlugins(new Registration(plugins, Unsafe.class), explicitUnsafeNullChecks, new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object}, true);
 235         if (!Java8OrEarlier) {
 236             registerUnsafePlugins(new Registration(plugins, "jdk.internal.misc.Unsafe", replacementsBytecodeProvider), explicitUnsafeNullChecks,
 237                             new JavaKind[]{JavaKind.Boolean, JavaKind.Byte, JavaKind.Char, JavaKind.Short, JavaKind.Int, JavaKind.Long, JavaKind.Object}, Java11OrEarlier);
 238         }
 239     }
 240 
 241     private static void registerUnsafePlugins(Registration r, boolean explicitUnsafeNullChecks, JavaKind[] unsafeJavaKinds, boolean java11OrEarlier) {
 242         for (JavaKind kind : unsafeJavaKinds) {
 243             Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
 244             String kindName = (kind == JavaKind.Object && !java11OrEarlier) ? "Reference" : kind.name();
 245             r.register4("getAndSet" + kindName, Receiver.class, Object.class, long.class, javaClass, new UnsafeAccessPlugin(kind, explicitUnsafeNullChecks) {
 246                 @Override




 195             Registration r;
 196             r = new Registration(plugins, String.class, replacementsBytecodeProvider);
 197             r.setAllowOverwrite(true);
 198             if (arch.getFeatures().contains(CPUFeature.SSE4_2)) {
 199                 r.registerMethodSubstitution(AMD64StringSubstitutions.class, "indexOf", char[].class, int.class,
 200                                 int.class, char[].class, int.class, int.class, int.class);
 201             }
 202             if (arch.getFeatures().contains(CPUFeature.SSSE3)) {
 203                 r.registerMethodSubstitution(AMD64StringSubstitutions.class, "indexOf", Receiver.class, int.class, int.class);
 204             }
 205             r.registerMethodSubstitution(AMD64StringSubstitutions.class, "compareTo", Receiver.class, String.class);
 206         }
 207     }
 208 
 209     private static void registerStringLatin1Plugins(InvocationPlugins plugins, AMD64 arch, BytecodeProvider replacementsBytecodeProvider) {
 210         if (JAVA_SPECIFICATION_VERSION >= 9) {
 211             Registration r = new Registration(plugins, "java.lang.StringLatin1", replacementsBytecodeProvider);
 212             r.setAllowOverwrite(true);
 213             r.registerMethodSubstitution(AMD64StringLatin1Substitutions.class, "compareTo", byte[].class, byte[].class);
 214             r.registerMethodSubstitution(AMD64StringLatin1Substitutions.class, "compareToUTF16", byte[].class, byte[].class);
 215             r.registerMethodSubstitution(AMD64StringLatin1Substitutions.class, "inflate", byte[].class, int.class, char[].class, int.class, int.class);
 216             r.registerMethodSubstitution(AMD64StringLatin1Substitutions.class, "inflate", byte[].class, int.class, byte[].class, int.class, int.class);
 217 
 218             if (arch.getFeatures().contains(CPUFeature.SSSE3)) {
 219                 r.registerMethodSubstitution(AMD64StringLatin1Substitutions.class, "indexOf", byte[].class, int.class, int.class);
 220             }
 221         }
 222     }
 223 
 224     private static void registerStringUTF16Plugins(InvocationPlugins plugins, AMD64 arch, BytecodeProvider replacementsBytecodeProvider) {
 225         if (JAVA_SPECIFICATION_VERSION >= 9) {
 226             Registration r = new Registration(plugins, "java.lang.StringUTF16", replacementsBytecodeProvider);
 227             r.setAllowOverwrite(true);
 228             r.registerMethodSubstitution(AMD64StringUTF16Substitutions.class, "compareTo", byte[].class, byte[].class);
 229             r.registerMethodSubstitution(AMD64StringUTF16Substitutions.class, "compareToLatin1", byte[].class, byte[].class);
 230             r.registerMethodSubstitution(AMD64StringUTF16Substitutions.class, "compress", char[].class, int.class, byte[].class, int.class, int.class);
 231             r.registerMethodSubstitution(AMD64StringUTF16Substitutions.class, "compress", byte[].class, int.class, byte[].class, int.class, int.class);
 232 
 233             if (arch.getFeatures().contains(CPUFeature.SSSE3)) {
 234                 r.registerMethodSubstitution(AMD64StringUTF16Substitutions.class, "indexOfCharUnsafe", byte[].class, int.class, int.class, int.class);
 235             }
 236         }
 237     }
 238 
 239     private static void registerUnsafePlugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider, boolean explicitUnsafeNullChecks) {
 240         registerUnsafePlugins(new Registration(plugins, Unsafe.class), explicitUnsafeNullChecks, new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object}, true);
 241         if (!Java8OrEarlier) {
 242             registerUnsafePlugins(new Registration(plugins, "jdk.internal.misc.Unsafe", replacementsBytecodeProvider), explicitUnsafeNullChecks,
 243                             new JavaKind[]{JavaKind.Boolean, JavaKind.Byte, JavaKind.Char, JavaKind.Short, JavaKind.Int, JavaKind.Long, JavaKind.Object}, Java11OrEarlier);
 244         }
 245     }
 246 
 247     private static void registerUnsafePlugins(Registration r, boolean explicitUnsafeNullChecks, JavaKind[] unsafeJavaKinds, boolean java11OrEarlier) {
 248         for (JavaKind kind : unsafeJavaKinds) {
 249             Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
 250             String kindName = (kind == JavaKind.Object && !java11OrEarlier) ? "Reference" : kind.name();
 251             r.register4("getAndSet" + kindName, Receiver.class, Object.class, long.class, javaClass, new UnsafeAccessPlugin(kind, explicitUnsafeNullChecks) {
 252                 @Override


< prev index next >