257 "java/lang/reflect/Array.newArray(Ljava/lang/Class;I)Ljava/lang/Object;", |
257 "java/lang/reflect/Array.newArray(Ljava/lang/Class;I)Ljava/lang/Object;", |
258 // HotSpot MacroAssembler-based intrinsic |
258 // HotSpot MacroAssembler-based intrinsic |
259 "sun/nio/cs/ISO_8859_1$Encoder.encodeISOArray([CI[BII)I", |
259 "sun/nio/cs/ISO_8859_1$Encoder.encodeISOArray([CI[BII)I", |
260 // Stub based intrinsics but implementation seems complex in C2 |
260 // Stub based intrinsics but implementation seems complex in C2 |
261 "sun/security/provider/DigestBase.implCompressMultiBlock([BII)I"); |
261 "sun/security/provider/DigestBase.implCompressMultiBlock([BII)I"); |
|
262 |
|
263 // See JDK-8207146. |
|
264 String oopName = isJDK12OrHigher() ? "Reference" : "Object"; |
262 |
265 |
263 if (isJDK9OrHigher()) { |
266 if (isJDK9OrHigher()) { |
264 // Relevant for Java flight recorder |
267 // Relevant for Java flight recorder |
265 add(toBeInvestigated, |
268 add(toBeInvestigated, |
266 "jdk/jfr/internal/JVM.counterTime()J", |
269 "jdk/jfr/internal/JVM.counterTime()J", |
302 * Per default, all these operations are mapped to some generic method for which we |
305 * Per default, all these operations are mapped to some generic method for which we |
303 * already have compiler intrinsics. Performance-wise it would be better to support them |
306 * already have compiler intrinsics. Performance-wise it would be better to support them |
304 * explicitly as the more generic method might be more restrictive and therefore slower |
307 * explicitly as the more generic method might be more restrictive and therefore slower |
305 * than necessary. |
308 * than necessary. |
306 */ |
309 */ |
|
310 |
307 add(toBeInvestigated, |
311 add(toBeInvestigated, |
308 // Mapped to compareAndExchange* |
312 // Mapped to compareAndExchange* |
309 "jdk/internal/misc/Unsafe.compareAndExchangeByteAcquire(Ljava/lang/Object;JBB)B", |
313 "jdk/internal/misc/Unsafe.compareAndExchangeByteAcquire(Ljava/lang/Object;JBB)B", |
310 "jdk/internal/misc/Unsafe.compareAndExchangeByteRelease(Ljava/lang/Object;JBB)B", |
314 "jdk/internal/misc/Unsafe.compareAndExchangeByteRelease(Ljava/lang/Object;JBB)B", |
311 "jdk/internal/misc/Unsafe.compareAndExchangeIntAcquire(Ljava/lang/Object;JII)I", |
315 "jdk/internal/misc/Unsafe.compareAndExchangeIntAcquire(Ljava/lang/Object;JII)I", |
312 "jdk/internal/misc/Unsafe.compareAndExchangeIntRelease(Ljava/lang/Object;JII)I", |
316 "jdk/internal/misc/Unsafe.compareAndExchangeIntRelease(Ljava/lang/Object;JII)I", |
313 "jdk/internal/misc/Unsafe.compareAndExchangeLongAcquire(Ljava/lang/Object;JJJ)J", |
317 "jdk/internal/misc/Unsafe.compareAndExchangeLongAcquire(Ljava/lang/Object;JJJ)J", |
314 "jdk/internal/misc/Unsafe.compareAndExchangeLongRelease(Ljava/lang/Object;JJJ)J", |
318 "jdk/internal/misc/Unsafe.compareAndExchangeLongRelease(Ljava/lang/Object;JJJ)J", |
315 "jdk/internal/misc/Unsafe.compareAndExchangeReferenceAcquire(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", |
319 "jdk/internal/misc/Unsafe.compareAndExchange" + oopName + "Acquire(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", |
316 "jdk/internal/misc/Unsafe.compareAndExchangeReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", |
320 "jdk/internal/misc/Unsafe.compareAndExchange" + oopName + "Release(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", |
317 "jdk/internal/misc/Unsafe.compareAndExchangeShortAcquire(Ljava/lang/Object;JSS)S", |
321 "jdk/internal/misc/Unsafe.compareAndExchangeShortAcquire(Ljava/lang/Object;JSS)S", |
318 "jdk/internal/misc/Unsafe.compareAndExchangeShortRelease(Ljava/lang/Object;JSS)S", |
322 "jdk/internal/misc/Unsafe.compareAndExchangeShortRelease(Ljava/lang/Object;JSS)S", |
319 |
323 |
320 // Mapped to compareAndSet* |
324 // Mapped to compareAndSet* |
321 "jdk/internal/misc/Unsafe.weakCompareAndSetByte(Ljava/lang/Object;JBB)Z", |
325 "jdk/internal/misc/Unsafe.weakCompareAndSetByte(Ljava/lang/Object;JBB)Z", |
328 "jdk/internal/misc/Unsafe.weakCompareAndSetIntRelease(Ljava/lang/Object;JII)Z", |
332 "jdk/internal/misc/Unsafe.weakCompareAndSetIntRelease(Ljava/lang/Object;JII)Z", |
329 "jdk/internal/misc/Unsafe.weakCompareAndSetLong(Ljava/lang/Object;JJJ)Z", |
333 "jdk/internal/misc/Unsafe.weakCompareAndSetLong(Ljava/lang/Object;JJJ)Z", |
330 "jdk/internal/misc/Unsafe.weakCompareAndSetLongAcquire(Ljava/lang/Object;JJJ)Z", |
334 "jdk/internal/misc/Unsafe.weakCompareAndSetLongAcquire(Ljava/lang/Object;JJJ)Z", |
331 "jdk/internal/misc/Unsafe.weakCompareAndSetLongPlain(Ljava/lang/Object;JJJ)Z", |
335 "jdk/internal/misc/Unsafe.weakCompareAndSetLongPlain(Ljava/lang/Object;JJJ)Z", |
332 "jdk/internal/misc/Unsafe.weakCompareAndSetLongRelease(Ljava/lang/Object;JJJ)Z", |
336 "jdk/internal/misc/Unsafe.weakCompareAndSetLongRelease(Ljava/lang/Object;JJJ)Z", |
333 "jdk/internal/misc/Unsafe.weakCompareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", |
337 "jdk/internal/misc/Unsafe.weakCompareAndSet" + oopName + "(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", |
334 "jdk/internal/misc/Unsafe.weakCompareAndSetReferenceAcquire(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", |
338 "jdk/internal/misc/Unsafe.weakCompareAndSet" + oopName + "Acquire(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", |
335 "jdk/internal/misc/Unsafe.weakCompareAndSetReferencePlain(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", |
339 "jdk/internal/misc/Unsafe.weakCompareAndSet" + oopName + "Plain(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", |
336 "jdk/internal/misc/Unsafe.weakCompareAndSetReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", |
340 "jdk/internal/misc/Unsafe.weakCompareAndSet" + oopName + "Release(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", |
337 "jdk/internal/misc/Unsafe.weakCompareAndSetShort(Ljava/lang/Object;JSS)Z", |
341 "jdk/internal/misc/Unsafe.weakCompareAndSetShort(Ljava/lang/Object;JSS)Z", |
338 "jdk/internal/misc/Unsafe.weakCompareAndSetShortAcquire(Ljava/lang/Object;JSS)Z", |
342 "jdk/internal/misc/Unsafe.weakCompareAndSetShortAcquire(Ljava/lang/Object;JSS)Z", |
339 "jdk/internal/misc/Unsafe.weakCompareAndSetShortPlain(Ljava/lang/Object;JSS)Z", |
343 "jdk/internal/misc/Unsafe.weakCompareAndSetShortPlain(Ljava/lang/Object;JSS)Z", |
340 "jdk/internal/misc/Unsafe.weakCompareAndSetShortRelease(Ljava/lang/Object;JSS)Z"); |
344 "jdk/internal/misc/Unsafe.weakCompareAndSetShortRelease(Ljava/lang/Object;JSS)Z"); |
341 |
345 |
342 // Compact string support - HotSpot MacroAssembler-based intrinsic or complex C2 logic. |
346 // Compact string support - HotSpot MacroAssembler-based intrinsic or complex C2 logic. |
343 add(toBeInvestigated, |
347 add(toBeInvestigated, |
344 "java/lang/StringCoding.hasNegatives([BII)Z", |
348 "java/lang/StringCoding.hasNegatives([BII)Z", |
345 "java/lang/StringCoding.implEncodeISOArray([BI[BII)I", |
349 "java/lang/StringCoding.implEncodeISOArray([BI[BII)I", |
346 "java/lang/StringLatin1.indexOf([B[B)I", |
350 "java/lang/StringLatin1.indexOf([B[B)I", |
347 "java/lang/StringLatin1.inflate([BI[BII)V", |
|
348 "java/lang/StringLatin1.inflate([BI[CII)V", |
|
349 "java/lang/StringUTF16.compress([BI[BII)I", |
|
350 "java/lang/StringUTF16.compress([CI[BII)I", |
|
351 "java/lang/StringUTF16.getChar([BI)C", |
351 "java/lang/StringUTF16.getChar([BI)C", |
352 "java/lang/StringUTF16.getChars([BII[CI)V", |
352 "java/lang/StringUTF16.getChars([BII[CI)V", |
353 "java/lang/StringUTF16.indexOf([BI[BII)I", |
353 "java/lang/StringUTF16.indexOf([BI[BII)I", |
354 "java/lang/StringUTF16.indexOf([B[B)I", |
354 "java/lang/StringUTF16.indexOf([B[B)I", |
355 "java/lang/StringUTF16.indexOfChar([BIII)I", |
355 "java/lang/StringUTF16.indexOfChar([BIII)I", |
385 |
385 |
386 if (!(arch instanceof AMD64)) { |
386 if (!(arch instanceof AMD64)) { |
387 // Can we implement these on non-AMD64 platforms? C2 seems to. |
387 // Can we implement these on non-AMD64 platforms? C2 seems to. |
388 add(toBeInvestigated, |
388 add(toBeInvestigated, |
389 "java/lang/String.compareTo(Ljava/lang/String;)I", |
389 "java/lang/String.compareTo(Ljava/lang/String;)I", |
|
390 "java/lang/StringLatin1.inflate([BI[BII)V", |
|
391 "java/lang/StringLatin1.inflate([BI[CII)V", |
|
392 "java/lang/StringUTF16.compress([BI[BII)I", |
|
393 "java/lang/StringUTF16.compress([CI[BII)I", |
390 "jdk/internal/misc/Unsafe.compareAndExchangeByte(Ljava/lang/Object;JBB)B", |
394 "jdk/internal/misc/Unsafe.compareAndExchangeByte(Ljava/lang/Object;JBB)B", |
391 "jdk/internal/misc/Unsafe.compareAndExchangeShort(Ljava/lang/Object;JSS)S", |
395 "jdk/internal/misc/Unsafe.compareAndExchangeShort(Ljava/lang/Object;JSS)S", |
392 "jdk/internal/misc/Unsafe.compareAndSetByte(Ljava/lang/Object;JBB)Z", |
396 "jdk/internal/misc/Unsafe.compareAndSetByte(Ljava/lang/Object;JBB)Z", |
393 "jdk/internal/misc/Unsafe.compareAndSetShort(Ljava/lang/Object;JSS)Z", |
397 "jdk/internal/misc/Unsafe.compareAndSetShort(Ljava/lang/Object;JSS)Z", |
394 "jdk/internal/misc/Unsafe.getAndAddByte(Ljava/lang/Object;JB)B", |
398 "jdk/internal/misc/Unsafe.getAndAddByte(Ljava/lang/Object;JB)B", |
397 "jdk/internal/misc/Unsafe.getAndSetShort(Ljava/lang/Object;JS)S", |
401 "jdk/internal/misc/Unsafe.getAndSetShort(Ljava/lang/Object;JS)S", |
398 "sun/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I", |
402 "sun/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I", |
399 "sun/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J", |
403 "sun/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J", |
400 "sun/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I", |
404 "sun/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I", |
401 "sun/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J", |
405 "sun/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J", |
402 "sun/misc/Unsafe.getAndSetReference(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;"); |
406 "sun/misc/Unsafe.getAndSet" + oopName + "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;"); |
403 |
407 |
404 if (isJDK9OrHigher()) { |
408 if (isJDK9OrHigher()) { |
405 if (!(arch instanceof AArch64)) { |
409 if (!(arch instanceof AArch64)) { |
406 add(toBeInvestigated, |
410 add(toBeInvestigated, |
407 "java/lang/StringLatin1.compareTo([B[B)I", |
411 "java/lang/StringLatin1.compareTo([B[B)I", |
410 "java/lang/StringUTF16.compareToLatin1([B[B)I", |
414 "java/lang/StringUTF16.compareToLatin1([B[B)I", |
411 "jdk/internal/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I", |
415 "jdk/internal/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I", |
412 "jdk/internal/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J", |
416 "jdk/internal/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J", |
413 "jdk/internal/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I", |
417 "jdk/internal/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I", |
414 "jdk/internal/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J", |
418 "jdk/internal/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J", |
415 "jdk/internal/misc/Unsafe.getAndSetReference(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;"); |
419 "jdk/internal/misc/Unsafe.getAndSet" + oopName + "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;"); |
416 } |
420 } |
417 add(toBeInvestigated, |
421 add(toBeInvestigated, |
418 "jdk/internal/misc/Unsafe.getCharUnaligned(Ljava/lang/Object;J)C", |
422 "jdk/internal/misc/Unsafe.getCharUnaligned(Ljava/lang/Object;J)C", |
419 "jdk/internal/misc/Unsafe.getIntUnaligned(Ljava/lang/Object;J)I", |
423 "jdk/internal/misc/Unsafe.getIntUnaligned(Ljava/lang/Object;J)I", |
420 "jdk/internal/misc/Unsafe.getLongUnaligned(Ljava/lang/Object;J)J", |
424 "jdk/internal/misc/Unsafe.getLongUnaligned(Ljava/lang/Object;J)J", |