< 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




 255                         // Can share most implementation parts with with
 256                         // Unsafe.allocateUninitializedArray0
 257                         "java/lang/reflect/Array.newArray(Ljava/lang/Class;I)Ljava/lang/Object;",
 258                         // HotSpot MacroAssembler-based intrinsic
 259                         "sun/nio/cs/ISO_8859_1$Encoder.encodeISOArray([CI[BII)I",
 260                         // We have implemented implCompressMultiBlock0 on JDK9+. Does it worth
 261                         // backporting as corresponding HotSpot stubs are only generated on SPARC?
 262                         "sun/security/provider/DigestBase.implCompressMultiBlock([BII)I");
 263 
 264         // See JDK-8207146.
 265         String oopName = isJDK12OrHigher() ? "Reference" : "Object";
 266 
 267         if (isJDK9OrHigher()) {
 268             // Relevant for Java flight recorder
 269             add(toBeInvestigated,
 270                             "jdk/jfr/internal/JVM.counterTime()J",
 271                             "jdk/jfr/internal/JVM.getBufferWriter()Ljava/lang/Object;",
 272                             "jdk/jfr/internal/JVM.getClassId(Ljava/lang/Class;)J");
 273 
 274             add(toBeInvestigated,
 275                             // HotSpot MacroAssembler-based intrinsic
 276                             "java/lang/Math.fma(DDD)D",
 277                             // HotSpot MacroAssembler-based intrinsic
 278                             "java/lang/Math.fma(FFF)F",
 279                             // Just check if the argument is a compile time constant
 280                             "java/lang/invoke/MethodHandleImpl.isCompileConstant(Ljava/lang/Object;)Z",
 281                             // Only used as a marker for vectorization?
 282                             "java/util/stream/Streams$RangeIntSpliterator.forEachRemaining(Ljava/util/function/IntConsumer;)V",
 283                             // Only implemented on non-AMD64 platforms (some logic and runtime call)
 284                             "java/util/zip/Adler32.updateByteBuffer(IJII)I",
 285                             // Only implemented on non-AMD64 platforms (some logic and runtime call)
 286                             "java/util/zip/Adler32.updateBytes(I[BII)I",
 287                             // Emits a slow and a fast path and some dispatching logic
 288                             "jdk/internal/misc/Unsafe.allocateUninitializedArray0(Ljava/lang/Class;I)Ljava/lang/Object;",
 289 
 290                             // Control flow, deopts, and a cast
 291                             "jdk/internal/util/Preconditions.checkIndex(IILjava/util/function/BiFunction;)I",
 292                             // HotSpot MacroAssembler-based intrinsic
 293                             "sun/nio/cs/ISO_8859_1$Encoder.implEncodeISOArray([CI[BII)I");
 294 
 295             /*
 296              * Per default, all these operations are mapped to some generic method for which we
 297              * already have compiler intrinsics. Performance-wise it would be better to support them
 298              * explicitly as the more generic method might be more restrictive and therefore slower


 381         if (isJDK11OrHigher()) {
 382             // Relevant for Java flight recorder
 383             add(toBeInvestigated,
 384                             "jdk/jfr/internal/JVM.getEventWriter()Ljava/lang/Object;");
 385             if (!config.useBase64Intrinsics()) {
 386                 add(ignore,
 387                                 "java/util/Base64$Encoder.encodeBlock([BII[BIZ)V");
 388             }
 389         }
 390 
 391         if (isJDK12OrHigher()) {
 392             add(toBeInvestigated,
 393                             "java/lang/CharacterDataLatin1.isDigit(I)Z",
 394                             "java/lang/CharacterDataLatin1.isLowerCase(I)Z",
 395                             "java/lang/CharacterDataLatin1.isUpperCase(I)Z",
 396                             "java/lang/CharacterDataLatin1.isWhitespace(I)Z");
 397         }
 398 
 399         if (isJDK13OrHigher()) {
 400             add(toBeInvestigated,
 401                             "java/lang/Math.abs(I)I",
 402                             "java/lang/Math.abs(J)J",
 403                             "java/lang/Math.max(DD)D",
 404                             "java/lang/Math.max(FF)F",
 405                             "java/lang/Math.min(DD)D",
 406                             "java/lang/Math.min(FF)F");
 407         }
 408 
 409         if (!config.inlineNotify()) {
 410             add(ignore, "java/lang/Object.notify()V");
 411         }
 412         if (!config.inlineNotifyAll()) {
 413             add(ignore, "java/lang/Object.notifyAll()V");
 414         }
 415 
 416         if (!(arch instanceof AMD64)) {
 417             // Can we implement these on non-AMD64 platforms? C2 seems to.
 418             add(toBeInvestigated,
 419                             "java/lang/String.compareTo(Ljava/lang/String;)I",
 420                             "java/lang/StringLatin1.indexOf([B[B)I",
 421                             "java/lang/StringLatin1.inflate([BI[BII)V",
 422                             "java/lang/StringLatin1.inflate([BI[CII)V",


 439                             "sun/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J",
 440                             "sun/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I",
 441                             "sun/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J",
 442                             "sun/misc/Unsafe.getAndSet" + oopName + "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;");
 443 
 444             if (isJDK9OrHigher()) {
 445                 if (!(arch instanceof AArch64)) {
 446                     add(toBeInvestigated,
 447                                     "java/lang/StringLatin1.compareTo([B[B)I",
 448                                     "java/lang/StringLatin1.compareToUTF16([B[B)I",
 449                                     "java/lang/StringUTF16.compareTo([B[B)I",
 450                                     "java/lang/StringUTF16.compareToLatin1([B[B)I",
 451                                     "jdk/internal/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I",
 452                                     "jdk/internal/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J",
 453                                     "jdk/internal/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I",
 454                                     "jdk/internal/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J",
 455                                     "jdk/internal/misc/Unsafe.getAndSet" + oopName + "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;");
 456                 }
 457                 add(toBeInvestigated,
 458                                 "com/sun/crypto/provider/CounterMode.implCrypt([BII[BI)I",


 459                                 "java/lang/Thread.onSpinWait()V",
 460                                 "java/util/ArraysSupport.vectorizedMismatch(Ljava/lang/Object;JLjava/lang/Object;JII)I",
 461                                 "jdk/internal/misc/Unsafe.getCharUnaligned(Ljava/lang/Object;J)C",
 462                                 "jdk/internal/misc/Unsafe.getIntUnaligned(Ljava/lang/Object;J)I",
 463                                 "jdk/internal/misc/Unsafe.getLongUnaligned(Ljava/lang/Object;J)J",
 464                                 "jdk/internal/misc/Unsafe.getShortUnaligned(Ljava/lang/Object;J)S",
 465                                 "jdk/internal/misc/Unsafe.putCharUnaligned(Ljava/lang/Object;JC)V",
 466                                 "jdk/internal/misc/Unsafe.putIntUnaligned(Ljava/lang/Object;JI)V",
 467                                 "jdk/internal/misc/Unsafe.putLongUnaligned(Ljava/lang/Object;JJ)V",
 468                                 "jdk/internal/misc/Unsafe.putShortUnaligned(Ljava/lang/Object;JS)V");
 469             }
 470             if (isJDK10OrHigher()) {
 471                 add(toBeInvestigated,
 472                                 "jdk/internal/util/ArraysSupport.vectorizedMismatch(Ljava/lang/Object;JLjava/lang/Object;JII)I");
 473             }
 474         }
 475 
 476         /*
 477          * The intrinsics down here are known to be implemented but they are not always enabled on
 478          * the HotSpot side (e.g., because they require certain CPU features). So, we are ignoring




 255                         // Can share most implementation parts with with
 256                         // Unsafe.allocateUninitializedArray0
 257                         "java/lang/reflect/Array.newArray(Ljava/lang/Class;I)Ljava/lang/Object;",
 258                         // HotSpot MacroAssembler-based intrinsic
 259                         "sun/nio/cs/ISO_8859_1$Encoder.encodeISOArray([CI[BII)I",
 260                         // We have implemented implCompressMultiBlock0 on JDK9+. Does it worth
 261                         // backporting as corresponding HotSpot stubs are only generated on SPARC?
 262                         "sun/security/provider/DigestBase.implCompressMultiBlock([BII)I");
 263 
 264         // See JDK-8207146.
 265         String oopName = isJDK12OrHigher() ? "Reference" : "Object";
 266 
 267         if (isJDK9OrHigher()) {
 268             // Relevant for Java flight recorder
 269             add(toBeInvestigated,
 270                             "jdk/jfr/internal/JVM.counterTime()J",
 271                             "jdk/jfr/internal/JVM.getBufferWriter()Ljava/lang/Object;",
 272                             "jdk/jfr/internal/JVM.getClassId(Ljava/lang/Class;)J");
 273 
 274             add(toBeInvestigated,




 275                             // Just check if the argument is a compile time constant
 276                             "java/lang/invoke/MethodHandleImpl.isCompileConstant(Ljava/lang/Object;)Z",
 277                             // Only used as a marker for vectorization?
 278                             "java/util/stream/Streams$RangeIntSpliterator.forEachRemaining(Ljava/util/function/IntConsumer;)V",
 279                             // Only implemented on non-AMD64 platforms (some logic and runtime call)
 280                             "java/util/zip/Adler32.updateByteBuffer(IJII)I",
 281                             // Only implemented on non-AMD64 platforms (some logic and runtime call)
 282                             "java/util/zip/Adler32.updateBytes(I[BII)I",
 283                             // Emits a slow and a fast path and some dispatching logic
 284                             "jdk/internal/misc/Unsafe.allocateUninitializedArray0(Ljava/lang/Class;I)Ljava/lang/Object;",
 285 
 286                             // Control flow, deopts, and a cast
 287                             "jdk/internal/util/Preconditions.checkIndex(IILjava/util/function/BiFunction;)I",
 288                             // HotSpot MacroAssembler-based intrinsic
 289                             "sun/nio/cs/ISO_8859_1$Encoder.implEncodeISOArray([CI[BII)I");
 290 
 291             /*
 292              * Per default, all these operations are mapped to some generic method for which we
 293              * already have compiler intrinsics. Performance-wise it would be better to support them
 294              * explicitly as the more generic method might be more restrictive and therefore slower


 377         if (isJDK11OrHigher()) {
 378             // Relevant for Java flight recorder
 379             add(toBeInvestigated,
 380                             "jdk/jfr/internal/JVM.getEventWriter()Ljava/lang/Object;");
 381             if (!config.useBase64Intrinsics()) {
 382                 add(ignore,
 383                                 "java/util/Base64$Encoder.encodeBlock([BII[BIZ)V");
 384             }
 385         }
 386 
 387         if (isJDK12OrHigher()) {
 388             add(toBeInvestigated,
 389                             "java/lang/CharacterDataLatin1.isDigit(I)Z",
 390                             "java/lang/CharacterDataLatin1.isLowerCase(I)Z",
 391                             "java/lang/CharacterDataLatin1.isUpperCase(I)Z",
 392                             "java/lang/CharacterDataLatin1.isWhitespace(I)Z");
 393         }
 394 
 395         if (isJDK13OrHigher()) {
 396             add(toBeInvestigated,


 397                             "java/lang/Math.max(DD)D",
 398                             "java/lang/Math.max(FF)F",
 399                             "java/lang/Math.min(DD)D",
 400                             "java/lang/Math.min(FF)F");
 401         }
 402 
 403         if (!config.inlineNotify()) {
 404             add(ignore, "java/lang/Object.notify()V");
 405         }
 406         if (!config.inlineNotifyAll()) {
 407             add(ignore, "java/lang/Object.notifyAll()V");
 408         }
 409 
 410         if (!(arch instanceof AMD64)) {
 411             // Can we implement these on non-AMD64 platforms? C2 seems to.
 412             add(toBeInvestigated,
 413                             "java/lang/String.compareTo(Ljava/lang/String;)I",
 414                             "java/lang/StringLatin1.indexOf([B[B)I",
 415                             "java/lang/StringLatin1.inflate([BI[BII)V",
 416                             "java/lang/StringLatin1.inflate([BI[CII)V",


 433                             "sun/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J",
 434                             "sun/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I",
 435                             "sun/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J",
 436                             "sun/misc/Unsafe.getAndSet" + oopName + "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;");
 437 
 438             if (isJDK9OrHigher()) {
 439                 if (!(arch instanceof AArch64)) {
 440                     add(toBeInvestigated,
 441                                     "java/lang/StringLatin1.compareTo([B[B)I",
 442                                     "java/lang/StringLatin1.compareToUTF16([B[B)I",
 443                                     "java/lang/StringUTF16.compareTo([B[B)I",
 444                                     "java/lang/StringUTF16.compareToLatin1([B[B)I",
 445                                     "jdk/internal/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I",
 446                                     "jdk/internal/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J",
 447                                     "jdk/internal/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I",
 448                                     "jdk/internal/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J",
 449                                     "jdk/internal/misc/Unsafe.getAndSet" + oopName + "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;");
 450                 }
 451                 add(toBeInvestigated,
 452                                 "com/sun/crypto/provider/CounterMode.implCrypt([BII[BI)I",
 453                                 "java/lang/Math.fma(DDD)D",
 454                                 "java/lang/Math.fma(FFF)F",
 455                                 "java/lang/Thread.onSpinWait()V",
 456                                 "java/util/ArraysSupport.vectorizedMismatch(Ljava/lang/Object;JLjava/lang/Object;JII)I",
 457                                 "jdk/internal/misc/Unsafe.getCharUnaligned(Ljava/lang/Object;J)C",
 458                                 "jdk/internal/misc/Unsafe.getIntUnaligned(Ljava/lang/Object;J)I",
 459                                 "jdk/internal/misc/Unsafe.getLongUnaligned(Ljava/lang/Object;J)J",
 460                                 "jdk/internal/misc/Unsafe.getShortUnaligned(Ljava/lang/Object;J)S",
 461                                 "jdk/internal/misc/Unsafe.putCharUnaligned(Ljava/lang/Object;JC)V",
 462                                 "jdk/internal/misc/Unsafe.putIntUnaligned(Ljava/lang/Object;JI)V",
 463                                 "jdk/internal/misc/Unsafe.putLongUnaligned(Ljava/lang/Object;JJ)V",
 464                                 "jdk/internal/misc/Unsafe.putShortUnaligned(Ljava/lang/Object;JS)V");
 465             }
 466             if (isJDK10OrHigher()) {
 467                 add(toBeInvestigated,
 468                                 "jdk/internal/util/ArraysSupport.vectorizedMismatch(Ljava/lang/Object;JLjava/lang/Object;JII)I");
 469             }
 470         }
 471 
 472         /*
 473          * The intrinsics down here are known to be implemented but they are not always enabled on
 474          * the HotSpot side (e.g., because they require certain CPU features). So, we are ignoring


< prev index next >