src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.aarch64/src/org/graalvm/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java
changeset 52220 9c260a6b6471
parent 50858 2d3e99a72541
child 52578 7dd81e82d083
equal deleted inserted replaced
52219:151b990e3764 52220:9c260a6b6471
    30 import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.LOG;
    30 import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.LOG;
    31 import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.LOG10;
    31 import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.LOG10;
    32 import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.SIN;
    32 import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.SIN;
    33 import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.TAN;
    33 import static org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation.TAN;
    34 import static org.graalvm.compiler.serviceprovider.GraalServices.JAVA_SPECIFICATION_VERSION;
    34 import static org.graalvm.compiler.serviceprovider.GraalServices.JAVA_SPECIFICATION_VERSION;
       
    35 import static org.graalvm.compiler.serviceprovider.GraalServices.Java11OrEarlier;
    35 import static org.graalvm.compiler.serviceprovider.GraalServices.Java8OrEarlier;
    36 import static org.graalvm.compiler.serviceprovider.GraalServices.Java8OrEarlier;
    36 
    37 
    37 import org.graalvm.compiler.bytecode.BytecodeProvider;
    38 import org.graalvm.compiler.bytecode.BytecodeProvider;
    38 import org.graalvm.compiler.lir.aarch64.AArch64ArithmeticLIRGeneratorTool.RoundingMode;
    39 import org.graalvm.compiler.lir.aarch64.AArch64ArithmeticLIRGeneratorTool.RoundingMode;
    39 import org.graalvm.compiler.nodes.ValueNode;
    40 import org.graalvm.compiler.nodes.ValueNode;
   177             unsafeJavaKinds = new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object};
   178             unsafeJavaKinds = new JavaKind[]{JavaKind.Int, JavaKind.Long, JavaKind.Object};
   178         }
   179         }
   179 
   180 
   180         for (JavaKind kind : unsafeJavaKinds) {
   181         for (JavaKind kind : unsafeJavaKinds) {
   181             Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
   182             Class<?> javaClass = kind == JavaKind.Object ? Object.class : kind.toJavaClass();
   182 
   183             String kindName = (kind == JavaKind.Object && !Java11OrEarlier) ? "Reference" : kind.name();
   183             r.register4("getAndSet" + kind.name(), Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
   184             r.register4("getAndSet" + kindName, Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
   184                 @Override
   185                 @Override
   185                 public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode value) {
   186                 public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode value) {
   186                     // Emits a null-check for the otherwise unused receiver
   187                     // Emits a null-check for the otherwise unused receiver
   187                     unsafe.get();
   188                     unsafe.get();
   188                     b.addPush(kind, new AtomicReadAndWriteNode(object, offset, value, kind, LocationIdentity.any()));
   189                     b.addPush(kind, new AtomicReadAndWriteNode(object, offset, value, kind, LocationIdentity.any()));
   190                     return true;
   191                     return true;
   191                 }
   192                 }
   192             });
   193             });
   193 
   194 
   194             if (kind != JavaKind.Boolean && kind.isNumericInteger()) {
   195             if (kind != JavaKind.Boolean && kind.isNumericInteger()) {
   195                 r.register4("getAndAdd" + kind.name(), Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
   196                 r.register4("getAndAdd" + kindName, Receiver.class, Object.class, long.class, javaClass, new InvocationPlugin() {
   196                     @Override
   197                     @Override
   197                     public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode delta) {
   198                     public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode object, ValueNode offset, ValueNode delta) {
   198                         // Emits a null-check for the otherwise unused receiver
   199                         // Emits a null-check for the otherwise unused receiver
   199                         unsafe.get();
   200                         unsafe.get();
   200                         AddressNode address = b.add(new OffsetAddressNode(object, offset));
   201                         AddressNode address = b.add(new OffsetAddressNode(object, offset));