< prev index next >

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

Print this page
rev 52509 : [mq]: graal


 151 
 152     private static void registerStringLatin1Plugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider) {
 153         if (JAVA_SPECIFICATION_VERSION >= 9) {
 154             Registration r = new Registration(plugins, "java.lang.StringLatin1", replacementsBytecodeProvider);
 155             r.setAllowOverwrite(true);
 156             r.registerMethodSubstitution(AArch64StringLatin1Substitutions.class, "compareTo", byte[].class, byte[].class);
 157             r.registerMethodSubstitution(AArch64StringLatin1Substitutions.class, "compareToUTF16", byte[].class, byte[].class);
 158         }
 159     }
 160 
 161     private static void registerStringUTF16Plugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider) {
 162         if (JAVA_SPECIFICATION_VERSION >= 9) {
 163             Registration r = new Registration(plugins, "java.lang.StringUTF16", replacementsBytecodeProvider);
 164             r.setAllowOverwrite(true);
 165             r.registerMethodSubstitution(AArch64StringUTF16Substitutions.class, "compareTo", byte[].class, byte[].class);
 166             r.registerMethodSubstitution(AArch64StringUTF16Substitutions.class, "compareToLatin1", byte[].class, byte[].class);
 167         }
 168     }
 169 
 170     private static void registerUnsafePlugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider) {
 171         Registration r;
 172         JavaKind[] unsafeJavaKinds;
 173         if (Java8OrEarlier) {
 174             r = new Registration(plugins, Unsafe.class);
 175             unsafeJavaKinds = new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object};
 176         } else {
 177             r = new Registration(plugins, "jdk.internal.misc.Unsafe", replacementsBytecodeProvider);
 178             unsafeJavaKinds = new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object};
 179         }



 180 
 181         for (JavaKind kind : unsafeJavaKinds) {
 182             Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
 183             String kindName = (kind == JavaKind.Object && !Java11OrEarlier) ? "Reference" : kind.name();
 184             r.register4("getAndSet" + kindName, Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
 185                 @Override
 186                 public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode value) {
 187                     // Emits a null-check for the otherwise unused receiver
 188                     unsafe.get();
 189                     b.addPush(kind, new AtomicReadAndWriteNode(object, offset, value, kind, LocationIdentity.any()));
 190                     b.getGraph().markUnsafeAccess();
 191                     return true;
 192                 }
 193             });
 194 
 195             if (kind != JavaKind.Boolean && kind.isNumericInteger()) {
 196                 r.register4("getAndAdd" + kindName, Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
 197                     @Override
 198                     public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode delta) {
 199                         // Emits a null-check for the otherwise unused receiver


 151 
 152     private static void registerStringLatin1Plugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider) {
 153         if (JAVA_SPECIFICATION_VERSION >= 9) {
 154             Registration r = new Registration(plugins, "java.lang.StringLatin1", replacementsBytecodeProvider);
 155             r.setAllowOverwrite(true);
 156             r.registerMethodSubstitution(AArch64StringLatin1Substitutions.class, "compareTo", byte[].class, byte[].class);
 157             r.registerMethodSubstitution(AArch64StringLatin1Substitutions.class, "compareToUTF16", byte[].class, byte[].class);
 158         }
 159     }
 160 
 161     private static void registerStringUTF16Plugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider) {
 162         if (JAVA_SPECIFICATION_VERSION >= 9) {
 163             Registration r = new Registration(plugins, "java.lang.StringUTF16", replacementsBytecodeProvider);
 164             r.setAllowOverwrite(true);
 165             r.registerMethodSubstitution(AArch64StringUTF16Substitutions.class, "compareTo", byte[].class, byte[].class);
 166             r.registerMethodSubstitution(AArch64StringUTF16Substitutions.class, "compareToLatin1", byte[].class, byte[].class);
 167         }
 168     }
 169 
 170     private static void registerUnsafePlugins(InvocationPlugins plugins, BytecodeProvider replacementsBytecodeProvider) {
 171         registerUnsafePlugins(new Registration(plugins, Unsafe.class), new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object});
 172         if (!Java8OrEarlier) {
 173             registerUnsafePlugins(new Registration(plugins, "jdk.internal.misc.Unsafe", replacementsBytecodeProvider), new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object});





 174         }
 175     }
 176 
 177     private static void registerUnsafePlugins(Registration r, JavaKind[] unsafeJavaKinds) {
 178 
 179         for (JavaKind kind : unsafeJavaKinds) {
 180             Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
 181             String kindName = (kind == JavaKind.Object && !Java11OrEarlier) ? "Reference" : kind.name();
 182             r.register4("getAndSet" + kindName, Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
 183                 @Override
 184                 public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode value) {
 185                     // Emits a null-check for the otherwise unused receiver
 186                     unsafe.get();
 187                     b.addPush(kind, new AtomicReadAndWriteNode(object, offset, value, kind, LocationIdentity.any()));
 188                     b.getGraph().markUnsafeAccess();
 189                     return true;
 190                 }
 191             });
 192 
 193             if (kind != JavaKind.Boolean && kind.isNumericInteger()) {
 194                 r.register4("getAndAdd" + kindName, Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
 195                     @Override
 196                     public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode delta) {
 197                         // Emits a null-check for the otherwise unused receiver
< prev index next >