< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CheckGraalIntrinsics.java

Print this page
rev 59103 : imported patch hotspot


  44 import org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins;
  45 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  46 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
  47 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
  48 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
  49 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Binding;
  50 import org.graalvm.compiler.runtime.RuntimeProvider;
  51 import org.graalvm.compiler.serviceprovider.JavaVersionUtil;
  52 import org.graalvm.compiler.test.GraalTest;
  53 import org.junit.Test;
  54 
  55 import jdk.vm.ci.aarch64.AArch64;
  56 import jdk.vm.ci.amd64.AMD64;
  57 import jdk.vm.ci.code.Architecture;
  58 import jdk.vm.ci.hotspot.HotSpotVMConfigStore;
  59 import jdk.vm.ci.hotspot.VMIntrinsicMethod;
  60 import jdk.vm.ci.meta.MetaAccessProvider;
  61 import jdk.vm.ci.meta.MetaUtil;
  62 import jdk.vm.ci.meta.MethodHandleAccessProvider.IntrinsicMethod;
  63 import jdk.vm.ci.meta.ResolvedJavaMethod;
  64 import jdk.vm.ci.sparc.SPARC;
  65 
  66 /**
  67  * Checks the intrinsics implemented by Graal against the set of intrinsics declared by HotSpot. The
  68  * purpose of this test is to detect when new intrinsics are added to HotSpot and process them
  69  * appropriately in Graal. This will be achieved by working through {@link #toBeInvestigated} and
  70  * either implementing the intrinsic or moving it to {@link #ignore} .
  71  */
  72 public class CheckGraalIntrinsics extends GraalTest {
  73 
  74     public static boolean match(String type, Binding binding, VMIntrinsicMethod intrinsic) {
  75         if (intrinsic.name.equals(binding.name)) {
  76             if (intrinsic.descriptor.startsWith(binding.argumentsDescriptor)) {
  77                 if (type.equals(intrinsic.declaringClass)) {
  78                     return true;
  79                 }
  80             }
  81         }
  82         return false;
  83     }
  84 


 354                             "java/lang/StringUTF16.indexOf([BI[BII)I",
 355                             "java/lang/StringUTF16.indexOf([B[B)I",
 356 
 357                             // handled by an intrinsic for StringUTF16.indexOfCharUnsafe
 358                             "java/lang/StringUTF16.indexOfChar([BIII)I",
 359 
 360                             // handled by an intrinsic for StringUTF16.indexOfLatin1Unsafe
 361                             "java/lang/StringUTF16.indexOfLatin1([BI[BII)I",
 362                             "java/lang/StringUTF16.indexOfLatin1([B[B)I");
 363 
 364             if (!config.useAESCTRIntrinsics) {
 365                 add(ignore,
 366                                 "com/sun/crypto/provider/CounterMode.implCrypt([BII[BI)I");
 367             }
 368             if (!config.useGHASHIntrinsics()) {
 369                 add(ignore,
 370                                 "com/sun/crypto/provider/GHASH.processBlocks([BII[J[J)V");
 371             }
 372             if (!config.useFMAIntrinsics) {
 373                 add(ignore,
 374                                 "java/lang/Math.fma(DDD)D",
 375                                 "java/lang/Math.fma(FFF)F");
 376             } else if (arch instanceof SPARC) {
 377                 add(toBeInvestigated,
 378                                 "java/lang/Math.fma(DDD)D",
 379                                 "java/lang/Math.fma(FFF)F");
 380             }
 381         }
 382 
 383         if (isJDK10OrHigher()) {
 384             add(toBeInvestigated,
 385                             "java/lang/Math.multiplyHigh(JJ)J");
 386         }
 387 
 388         if (isJDK11OrHigher()) {
 389             // Relevant for Java flight recorder
 390             add(toBeInvestigated,
 391                             "java/lang/CharacterDataLatin1.isDigit(I)Z",
 392                             "java/lang/CharacterDataLatin1.isLowerCase(I)Z",
 393                             "java/lang/CharacterDataLatin1.isUpperCase(I)Z",
 394                             "java/lang/CharacterDataLatin1.isWhitespace(I)Z",
 395                             "jdk/jfr/internal/JVM.getEventWriter()Ljava/lang/Object;");
 396             if (!config.useBase64Intrinsics()) {
 397                 add(ignore,




  44 import org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins;
  45 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  46 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
  47 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
  48 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
  49 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Binding;
  50 import org.graalvm.compiler.runtime.RuntimeProvider;
  51 import org.graalvm.compiler.serviceprovider.JavaVersionUtil;
  52 import org.graalvm.compiler.test.GraalTest;
  53 import org.junit.Test;
  54 
  55 import jdk.vm.ci.aarch64.AArch64;
  56 import jdk.vm.ci.amd64.AMD64;
  57 import jdk.vm.ci.code.Architecture;
  58 import jdk.vm.ci.hotspot.HotSpotVMConfigStore;
  59 import jdk.vm.ci.hotspot.VMIntrinsicMethod;
  60 import jdk.vm.ci.meta.MetaAccessProvider;
  61 import jdk.vm.ci.meta.MetaUtil;
  62 import jdk.vm.ci.meta.MethodHandleAccessProvider.IntrinsicMethod;
  63 import jdk.vm.ci.meta.ResolvedJavaMethod;

  64 
  65 /**
  66  * Checks the intrinsics implemented by Graal against the set of intrinsics declared by HotSpot. The
  67  * purpose of this test is to detect when new intrinsics are added to HotSpot and process them
  68  * appropriately in Graal. This will be achieved by working through {@link #toBeInvestigated} and
  69  * either implementing the intrinsic or moving it to {@link #ignore} .
  70  */
  71 public class CheckGraalIntrinsics extends GraalTest {
  72 
  73     public static boolean match(String type, Binding binding, VMIntrinsicMethod intrinsic) {
  74         if (intrinsic.name.equals(binding.name)) {
  75             if (intrinsic.descriptor.startsWith(binding.argumentsDescriptor)) {
  76                 if (type.equals(intrinsic.declaringClass)) {
  77                     return true;
  78                 }
  79             }
  80         }
  81         return false;
  82     }
  83 


 353                             "java/lang/StringUTF16.indexOf([BI[BII)I",
 354                             "java/lang/StringUTF16.indexOf([B[B)I",
 355 
 356                             // handled by an intrinsic for StringUTF16.indexOfCharUnsafe
 357                             "java/lang/StringUTF16.indexOfChar([BIII)I",
 358 
 359                             // handled by an intrinsic for StringUTF16.indexOfLatin1Unsafe
 360                             "java/lang/StringUTF16.indexOfLatin1([BI[BII)I",
 361                             "java/lang/StringUTF16.indexOfLatin1([B[B)I");
 362 
 363             if (!config.useAESCTRIntrinsics) {
 364                 add(ignore,
 365                                 "com/sun/crypto/provider/CounterMode.implCrypt([BII[BI)I");
 366             }
 367             if (!config.useGHASHIntrinsics()) {
 368                 add(ignore,
 369                                 "com/sun/crypto/provider/GHASH.processBlocks([BII[J[J)V");
 370             }
 371             if (!config.useFMAIntrinsics) {
 372                 add(ignore,




 373                                 "java/lang/Math.fma(DDD)D",
 374                                 "java/lang/Math.fma(FFF)F");
 375             }
 376         }
 377 
 378         if (isJDK10OrHigher()) {
 379             add(toBeInvestigated,
 380                             "java/lang/Math.multiplyHigh(JJ)J");
 381         }
 382 
 383         if (isJDK11OrHigher()) {
 384             // Relevant for Java flight recorder
 385             add(toBeInvestigated,
 386                             "java/lang/CharacterDataLatin1.isDigit(I)Z",
 387                             "java/lang/CharacterDataLatin1.isLowerCase(I)Z",
 388                             "java/lang/CharacterDataLatin1.isUpperCase(I)Z",
 389                             "java/lang/CharacterDataLatin1.isWhitespace(I)Z",
 390                             "jdk/jfr/internal/JVM.getEventWriter()Ljava/lang/Object;");
 391             if (!config.useBase64Intrinsics()) {
 392                 add(ignore,


< prev index next >