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): |