hotspot/src/share/vm/oops/method.cpp
changeset 36551 77f29c57ed2e
parent 36350 29d8bb1668f5
child 37155 f00f299cb386
child 36615 c744e3b0f8c5
child 36819 bca375d368ed
equal deleted inserted replaced
36550:6d26e3a083cb 36551:77f29c57ed2e
  1336   // see if the klass name is well-known:
  1336   // see if the klass name is well-known:
  1337   Symbol* klass_name = ik->name();
  1337   Symbol* klass_name = ik->name();
  1338   return vmSymbols::find_sid(klass_name);
  1338   return vmSymbols::find_sid(klass_name);
  1339 }
  1339 }
  1340 
  1340 
  1341 static bool is_unsafe_alias(vmSymbols::SID name_id) {
       
  1342   // All 70 intrinsic candidate methods from sun.misc.Unsafe in 1.8.
       
  1343   // Some have the same method name but different signature, e.g.
       
  1344   // getByte(long), getByte(Object,long)
       
  1345   switch (name_id) {
       
  1346     case vmSymbols::VM_SYMBOL_ENUM_NAME(allocateInstance_name):
       
  1347     case vmSymbols::VM_SYMBOL_ENUM_NAME(copyMemory_name):
       
  1348     case vmSymbols::VM_SYMBOL_ENUM_NAME(loadFence_name):
       
  1349     case vmSymbols::VM_SYMBOL_ENUM_NAME(storeFence_name):
       
  1350     case vmSymbols::VM_SYMBOL_ENUM_NAME(fullFence_name):
       
  1351     case vmSymbols::VM_SYMBOL_ENUM_NAME(getObject_name):
       
  1352     case vmSymbols::VM_SYMBOL_ENUM_NAME(getBoolean_name):
       
  1353     case vmSymbols::VM_SYMBOL_ENUM_NAME(getByte_name):
       
  1354     case vmSymbols::VM_SYMBOL_ENUM_NAME(getShort_name):
       
  1355     case vmSymbols::VM_SYMBOL_ENUM_NAME(getChar_name):
       
  1356     case vmSymbols::VM_SYMBOL_ENUM_NAME(getInt_name):
       
  1357     case vmSymbols::VM_SYMBOL_ENUM_NAME(getLong_name):
       
  1358     case vmSymbols::VM_SYMBOL_ENUM_NAME(getFloat_name):
       
  1359     case vmSymbols::VM_SYMBOL_ENUM_NAME(getDouble_name):
       
  1360     case vmSymbols::VM_SYMBOL_ENUM_NAME(putObject_name):
       
  1361     case vmSymbols::VM_SYMBOL_ENUM_NAME(putBoolean_name):
       
  1362     case vmSymbols::VM_SYMBOL_ENUM_NAME(putByte_name):
       
  1363     case vmSymbols::VM_SYMBOL_ENUM_NAME(putShort_name):
       
  1364     case vmSymbols::VM_SYMBOL_ENUM_NAME(putChar_name):
       
  1365     case vmSymbols::VM_SYMBOL_ENUM_NAME(putInt_name):
       
  1366     case vmSymbols::VM_SYMBOL_ENUM_NAME(putLong_name):
       
  1367     case vmSymbols::VM_SYMBOL_ENUM_NAME(putFloat_name):
       
  1368     case vmSymbols::VM_SYMBOL_ENUM_NAME(putDouble_name):
       
  1369     case vmSymbols::VM_SYMBOL_ENUM_NAME(getObjectVolatile_name):
       
  1370     case vmSymbols::VM_SYMBOL_ENUM_NAME(getBooleanVolatile_name):
       
  1371     case vmSymbols::VM_SYMBOL_ENUM_NAME(getByteVolatile_name):
       
  1372     case vmSymbols::VM_SYMBOL_ENUM_NAME(getShortVolatile_name):
       
  1373     case vmSymbols::VM_SYMBOL_ENUM_NAME(getCharVolatile_name):
       
  1374     case vmSymbols::VM_SYMBOL_ENUM_NAME(getIntVolatile_name):
       
  1375     case vmSymbols::VM_SYMBOL_ENUM_NAME(getLongVolatile_name):
       
  1376     case vmSymbols::VM_SYMBOL_ENUM_NAME(getFloatVolatile_name):
       
  1377     case vmSymbols::VM_SYMBOL_ENUM_NAME(getDoubleVolatile_name):
       
  1378     case vmSymbols::VM_SYMBOL_ENUM_NAME(putObjectVolatile_name):
       
  1379     case vmSymbols::VM_SYMBOL_ENUM_NAME(putBooleanVolatile_name):
       
  1380     case vmSymbols::VM_SYMBOL_ENUM_NAME(putByteVolatile_name):
       
  1381     case vmSymbols::VM_SYMBOL_ENUM_NAME(putShortVolatile_name):
       
  1382     case vmSymbols::VM_SYMBOL_ENUM_NAME(putCharVolatile_name):
       
  1383     case vmSymbols::VM_SYMBOL_ENUM_NAME(putIntVolatile_name):
       
  1384     case vmSymbols::VM_SYMBOL_ENUM_NAME(putLongVolatile_name):
       
  1385     case vmSymbols::VM_SYMBOL_ENUM_NAME(putFloatVolatile_name):
       
  1386     case vmSymbols::VM_SYMBOL_ENUM_NAME(putDoubleVolatile_name):
       
  1387     case vmSymbols::VM_SYMBOL_ENUM_NAME(getAddress_name):
       
  1388     case vmSymbols::VM_SYMBOL_ENUM_NAME(putAddress_name):
       
  1389     case vmSymbols::VM_SYMBOL_ENUM_NAME(compareAndSwapObject_name):
       
  1390     case vmSymbols::VM_SYMBOL_ENUM_NAME(compareAndSwapLong_name):
       
  1391     case vmSymbols::VM_SYMBOL_ENUM_NAME(compareAndSwapInt_name):
       
  1392     case vmSymbols::VM_SYMBOL_ENUM_NAME(putOrderedObject_name):
       
  1393     case vmSymbols::VM_SYMBOL_ENUM_NAME(putOrderedLong_name):
       
  1394     case vmSymbols::VM_SYMBOL_ENUM_NAME(putOrderedInt_name):
       
  1395     case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndAddInt_name):
       
  1396     case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndAddLong_name):
       
  1397     case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndSetInt_name):
       
  1398     case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndSetLong_name):
       
  1399     case vmSymbols::VM_SYMBOL_ENUM_NAME(getAndSetObject_name):
       
  1400     case vmSymbols::VM_SYMBOL_ENUM_NAME(park_name):
       
  1401     case vmSymbols::VM_SYMBOL_ENUM_NAME(unpark_name):
       
  1402       return true;
       
  1403   }
       
  1404 
       
  1405   return false;
       
  1406 }
       
  1407 
       
  1408 void Method::init_intrinsic_id() {
  1341 void Method::init_intrinsic_id() {
  1409   assert(_intrinsic_id == vmIntrinsics::_none, "do this just once");
  1342   assert(_intrinsic_id == vmIntrinsics::_none, "do this just once");
  1410   const uintptr_t max_id_uint = right_n_bits((int)(sizeof(_intrinsic_id) * BitsPerByte));
  1343   const uintptr_t max_id_uint = right_n_bits((int)(sizeof(_intrinsic_id) * BitsPerByte));
  1411   assert((uintptr_t)vmIntrinsics::ID_LIMIT <= max_id_uint, "else fix size");
  1344   assert((uintptr_t)vmIntrinsics::ID_LIMIT <= max_id_uint, "else fix size");
  1412   assert(intrinsic_id_size_in_bytes() == sizeof(_intrinsic_id), "");
  1345   assert(intrinsic_id_size_in_bytes() == sizeof(_intrinsic_id), "");
  1454   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle):
  1387   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle):
  1455     if (!is_native())  break;
  1388     if (!is_native())  break;
  1456     id = MethodHandles::signature_polymorphic_name_id(method_holder(), name());
  1389     id = MethodHandles::signature_polymorphic_name_id(method_holder(), name());
  1457     if (is_static() != MethodHandles::is_signature_polymorphic_static(id))
  1390     if (is_static() != MethodHandles::is_signature_polymorphic_static(id))
  1458       id = vmIntrinsics::_none;
  1391       id = vmIntrinsics::_none;
  1459     break;
       
  1460 
       
  1461   case vmSymbols::VM_SYMBOL_ENUM_NAME(sun_misc_Unsafe):
       
  1462     // Map sun.misc.Unsafe to jdk.internal.misc.Unsafe
       
  1463     if (!is_unsafe_alias(name_id))  break;
       
  1464     // pretend it is the corresponding method in the internal Unsafe class:
       
  1465     klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_internal_misc_Unsafe);
       
  1466     id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
       
  1467     break;
  1392     break;
  1468   }
  1393   }
  1469 
  1394 
  1470   if (id != vmIntrinsics::_none) {
  1395   if (id != vmIntrinsics::_none) {
  1471     // Set up its iid.  It is an alias method.
  1396     // Set up its iid.  It is an alias method.