1340 case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_StrictMath): 1341 // Second chance: check in regular Math. 1342 switch (name_id) { 1343 case vmSymbols::VM_SYMBOL_ENUM_NAME(min_name): 1344 case vmSymbols::VM_SYMBOL_ENUM_NAME(max_name): 1345 case vmSymbols::VM_SYMBOL_ENUM_NAME(sqrt_name): 1346 // pretend it is the corresponding method in the non-strict class: 1347 klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_Math); 1348 id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags); 1349 break; 1350 } 1351 break; 1352 1353 // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*. 1354 case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle): 1355 if (!is_native()) break; 1356 id = MethodHandles::signature_polymorphic_name_id(method_holder(), name()); 1357 if (is_static() != MethodHandles::is_signature_polymorphic_static(id)) 1358 id = vmIntrinsics::_none; 1359 break; 1360 } 1361 1362 if (id != vmIntrinsics::_none) { 1363 // Set up its iid. It is an alias method. 1364 set_intrinsic_id(id); 1365 return; 1366 } 1367 } 1368 1369 // These two methods are static since a GC may move the Method 1370 bool Method::load_signature_classes(methodHandle m, TRAPS) { 1371 if (!THREAD->can_call_java()) { 1372 // There is nothing useful this routine can do from within the Compile thread. 1373 // Hopefully, the signature contains only well-known classes. 1374 // We could scan for this and return true/false, but the caller won't care. 1375 return false; 1376 } 1377 bool sig_is_loaded = true; 1378 Handle class_loader(THREAD, m->method_holder()->class_loader()); 1379 Handle protection_domain(THREAD, m->method_holder()->protection_domain()); 1380 ResourceMark rm(THREAD); 1381 Symbol* signature = m->signature(); 1382 for(SignatureStream ss(signature); !ss.is_done(); ss.next()) { 1383 if (ss.is_object()) { 1384 Symbol* sym = ss.as_symbol(CHECK_(false)); 1385 Symbol* name = sym; 1386 Klass* klass = SystemDictionary::resolve_or_null(name, class_loader, 1387 protection_domain, THREAD); 1388 // We are loading classes eagerly. If a ClassNotFoundException or | 1340 case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_StrictMath): 1341 // Second chance: check in regular Math. 1342 switch (name_id) { 1343 case vmSymbols::VM_SYMBOL_ENUM_NAME(min_name): 1344 case vmSymbols::VM_SYMBOL_ENUM_NAME(max_name): 1345 case vmSymbols::VM_SYMBOL_ENUM_NAME(sqrt_name): 1346 // pretend it is the corresponding method in the non-strict class: 1347 klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_Math); 1348 id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags); 1349 break; 1350 } 1351 break; 1352 1353 // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*. 1354 case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle): 1355 if (!is_native()) break; 1356 id = MethodHandles::signature_polymorphic_name_id(method_holder(), name()); 1357 if (is_static() != MethodHandles::is_signature_polymorphic_static(id)) 1358 id = vmIntrinsics::_none; 1359 break; 1360 1361 case vmSymbols::VM_SYMBOL_ENUM_NAME(sun_misc_Unsafe): 1362 // Map sun.misc.Unsafe to jdk.internal.misc.Unsafe 1363 if (!is_unsafe_alias(name_id)) break; 1364 // pretend it is the corresponding method in the internal Unsafe class: 1365 klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_internal_misc_Unsafe); 1366 id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags); 1367 break; 1368 } 1369 1370 if (id != vmIntrinsics::_none) { 1371 // Set up its iid. It is an alias method. 1372 set_intrinsic_id(id); 1373 return; 1374 } 1375 } 1376 1377 bool Method::is_unsafe_alias(vmSymbols::SID name_id) { 1378 // All 70 intrinsic candidate methods from sun.misc.Unsafe in 1.8. 1379 // Some have the same method name but different signature, e.g. 1380 // getByte(long), getByte(Object,long) 1381 switch (name_id) { 1382 case vmSymbols::VM_SYMBOL_ENUM_NAME(allocateInstance_name): 1383 case vmSymbols::VM_SYMBOL_ENUM_NAME(copyMemory_name): 1384 case vmSymbols::VM_SYMBOL_ENUM_NAME(loadFence_name): 1385 case vmSymbols::VM_SYMBOL_ENUM_NAME(storeFence_name): 1386 case vmSymbols::VM_SYMBOL_ENUM_NAME(fullFence_name): 1387 case vmSymbols::VM_SYMBOL_ENUM_NAME(getObject_name): 1388 case vmSymbols::VM_SYMBOL_ENUM_NAME(getBoolean_name): 1389 case vmSymbols::VM_SYMBOL_ENUM_NAME(getByte_name): 1390 case vmSymbols::VM_SYMBOL_ENUM_NAME(getShort_name): 1391 case vmSymbols::VM_SYMBOL_ENUM_NAME(getChar_name): 1392 case vmSymbols::VM_SYMBOL_ENUM_NAME(getInt_name): 1393 case vmSymbols::VM_SYMBOL_ENUM_NAME(getLong_name): 1394 case vmSymbols::VM_SYMBOL_ENUM_NAME(getFloat_name): 1395 case vmSymbols::VM_SYMBOL_ENUM_NAME(getDouble_name): 1396 case vmSymbols::VM_SYMBOL_ENUM_NAME(putObject_name): 1397 case vmSymbols::VM_SYMBOL_ENUM_NAME(putBoolean_name): 1398 case vmSymbols::VM_SYMBOL_ENUM_NAME(putByte_name): 1399 case vmSymbols::VM_SYMBOL_ENUM_NAME(putShort_name): 1400 case vmSymbols::VM_SYMBOL_ENUM_NAME(putChar_name): 1401 case vmSymbols::VM_SYMBOL_ENUM_NAME(putInt_name): 1402 case vmSymbols::VM_SYMBOL_ENUM_NAME(putLong_name): 1403 case vmSymbols::VM_SYMBOL_ENUM_NAME(putFloat_name): 1404 case vmSymbols::VM_SYMBOL_ENUM_NAME(putDouble_name): 1405 case vmSymbols::VM_SYMBOL_ENUM_NAME(getObjectVolatile_name): 1406 case vmSymbols::VM_SYMBOL_ENUM_NAME(getBooleanVolatile_name): 1407 case vmSymbols::VM_SYMBOL_ENUM_NAME(getByteVolatile_name): 1408 case vmSymbols::VM_SYMBOL_ENUM_NAME(getShortVolatile_name): 1409 case vmSymbols::VM_SYMBOL_ENUM_NAME(getCharVolatile_name): 1410 case vmSymbols::VM_SYMBOL_ENUM_NAME(getIntVolatile_name): 1411 case vmSymbols::VM_SYMBOL_ENUM_NAME(getLongVolatile_name): 1412 case vmSymbols::VM_SYMBOL_ENUM_NAME(getFloatVolatile_name): 1413 case vmSymbols::VM_SYMBOL_ENUM_NAME(getDoubleVolatile_name): 1414 case vmSymbols::VM_SYMBOL_ENUM_NAME(putObjectVolatile_name): 1415 case vmSymbols::VM_SYMBOL_ENUM_NAME(putBooleanVolatile_name): 1416 case vmSymbols::VM_SYMBOL_ENUM_NAME(putByteVolatile_name): 1417 case vmSymbols::VM_SYMBOL_ENUM_NAME(putShortVolatile_name): 1418 case vmSymbols::VM_SYMBOL_ENUM_NAME(putCharVolatile_name): 1419 case vmSymbols::VM_SYMBOL_ENUM_NAME(putIntVolatile_name): 1420 case vmSymbols::VM_SYMBOL_ENUM_NAME(putLongVolatile_name): 1421 case vmSymbols::VM_SYMBOL_ENUM_NAME(putFloatVolatile_name): 1422 case vmSymbols::VM_SYMBOL_ENUM_NAME(putDoubleVolatile_name): 1423 case vmSymbols::VM_SYMBOL_ENUM_NAME(getAddress_name): 1424 case vmSymbols::VM_SYMBOL_ENUM_NAME(putAddress_name): 1425 case vmSymbols::VM_SYMBOL_ENUM_NAME(compareAndSwapObject_name): 1426 case vmSymbols::VM_SYMBOL_ENUM_NAME(compareAndSwapLong_name): 1427 case vmSymbols::VM_SYMBOL_ENUM_NAME(compareAndSwapInt_name): 1428 case vmSymbols::VM_SYMBOL_ENUM_NAME(putOrderedObject_name): 1429 case vmSymbols::VM_SYMBOL_ENUM_NAME(putOrderedLong_name): 1430 case vmSymbols::VM_SYMBOL_ENUM_NAME(putOrderedInt_name): 1431 case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndAddInt_name): 1432 case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndAddLong_name): 1433 case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndSetInt_name): 1434 case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndSetLong_name): 1435 case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndSetObject_name): 1436 case vmSymbols::VM_SYMBOL_ENUM_NAME(park_name): 1437 case vmSymbols::VM_SYMBOL_ENUM_NAME(unpark_name): 1438 return true; 1439 } 1440 1441 return false; 1442 } 1443 1444 // These two methods are static since a GC may move the Method 1445 bool Method::load_signature_classes(methodHandle m, TRAPS) { 1446 if (!THREAD->can_call_java()) { 1447 // There is nothing useful this routine can do from within the Compile thread. 1448 // Hopefully, the signature contains only well-known classes. 1449 // We could scan for this and return true/false, but the caller won't care. 1450 return false; 1451 } 1452 bool sig_is_loaded = true; 1453 Handle class_loader(THREAD, m->method_holder()->class_loader()); 1454 Handle protection_domain(THREAD, m->method_holder()->protection_domain()); 1455 ResourceMark rm(THREAD); 1456 Symbol* signature = m->signature(); 1457 for(SignatureStream ss(signature); !ss.is_done(); ss.next()) { 1458 if (ss.is_object()) { 1459 Symbol* sym = ss.as_symbol(CHECK_(false)); 1460 Symbol* name = sym; 1461 Klass* klass = SystemDictionary::resolve_or_null(name, class_loader, 1462 protection_domain, THREAD); 1463 // We are loading classes eagerly. If a ClassNotFoundException or |