src/share/vm/oops/method.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 8054492 Sdiff src/share/vm/oops

src/share/vm/oops/method.cpp

Print this page




1278   assert((uintptr_t)vmIntrinsics::ID_LIMIT <= max_id_uint, "else fix size");
1279   assert(intrinsic_id_size_in_bytes() == sizeof(_intrinsic_id), "");
1280 
1281   // the klass name is well-known:
1282   vmSymbols::SID klass_id = klass_id_for_intrinsics(method_holder());
1283   assert(klass_id != vmSymbols::NO_SID, "caller responsibility");
1284 
1285   // ditto for method and signature:
1286   vmSymbols::SID  name_id = vmSymbols::find_sid(name());
1287   if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle)
1288       && name_id == vmSymbols::NO_SID)
1289     return;
1290   vmSymbols::SID   sig_id = vmSymbols::find_sid(signature());
1291   if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle)
1292       && sig_id == vmSymbols::NO_SID)  return;
1293   jshort flags = access_flags().as_short();
1294 
1295   vmIntrinsics::ID id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
1296   if (id != vmIntrinsics::_none) {
1297     set_intrinsic_id(id);



1298     return;
1299   }
1300 
1301   // A few slightly irregular cases:
1302   switch (klass_id) {
1303   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_StrictMath):
1304     // Second chance: check in regular Math.
1305     switch (name_id) {
1306     case vmSymbols::VM_SYMBOL_ENUM_NAME(min_name):
1307     case vmSymbols::VM_SYMBOL_ENUM_NAME(max_name):
1308     case vmSymbols::VM_SYMBOL_ENUM_NAME(sqrt_name):
1309       // pretend it is the corresponding method in the non-strict class:
1310       klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_Math);
1311       id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
1312       break;
1313     }
1314     break;
1315 
1316   // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*.
1317   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle):




1278   assert((uintptr_t)vmIntrinsics::ID_LIMIT <= max_id_uint, "else fix size");
1279   assert(intrinsic_id_size_in_bytes() == sizeof(_intrinsic_id), "");
1280 
1281   // the klass name is well-known:
1282   vmSymbols::SID klass_id = klass_id_for_intrinsics(method_holder());
1283   assert(klass_id != vmSymbols::NO_SID, "caller responsibility");
1284 
1285   // ditto for method and signature:
1286   vmSymbols::SID  name_id = vmSymbols::find_sid(name());
1287   if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle)
1288       && name_id == vmSymbols::NO_SID)
1289     return;
1290   vmSymbols::SID   sig_id = vmSymbols::find_sid(signature());
1291   if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle)
1292       && sig_id == vmSymbols::NO_SID)  return;
1293   jshort flags = access_flags().as_short();
1294 
1295   vmIntrinsics::ID id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
1296   if (id != vmIntrinsics::_none) {
1297     set_intrinsic_id(id);
1298     if (id == vmIntrinsics::_class_cast) {
1299       set_force_inline(true);
1300     }
1301     return;
1302   }
1303 
1304   // A few slightly irregular cases:
1305   switch (klass_id) {
1306   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_StrictMath):
1307     // Second chance: check in regular Math.
1308     switch (name_id) {
1309     case vmSymbols::VM_SYMBOL_ENUM_NAME(min_name):
1310     case vmSymbols::VM_SYMBOL_ENUM_NAME(max_name):
1311     case vmSymbols::VM_SYMBOL_ENUM_NAME(sqrt_name):
1312       // pretend it is the corresponding method in the non-strict class:
1313       klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_Math);
1314       id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags);
1315       break;
1316     }
1317     break;
1318 
1319   // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*.
1320   case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle):


src/share/vm/oops/method.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File