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 |