177 // Special intrinsic method? 178 // Note: This test must come _after_ the test for native methods, 179 // otherwise we will run into problems with JDK 1.2, see also 180 // TemplateInterpreterGenerator::generate_method_entry() for 181 // for details. 182 switch (m->intrinsic_id()) { 183 case vmIntrinsics::_dsin : return java_lang_math_sin ; 184 case vmIntrinsics::_dcos : return java_lang_math_cos ; 185 case vmIntrinsics::_dtan : return java_lang_math_tan ; 186 case vmIntrinsics::_dabs : return java_lang_math_abs ; 187 case vmIntrinsics::_dsqrt : return java_lang_math_sqrt ; 188 case vmIntrinsics::_dlog : return java_lang_math_log ; 189 case vmIntrinsics::_dlog10: return java_lang_math_log10; 190 case vmIntrinsics::_dpow : return java_lang_math_pow ; 191 case vmIntrinsics::_dexp : return java_lang_math_exp ; 192 193 case vmIntrinsics::_Reference_get: 194 return java_lang_ref_reference_get; 195 } 196 197 // Accessor method? 198 if (m->is_getter()) { 199 // TODO: We should have used ::is_accessor above, but fast accessors in Zero expect only getters. 200 // See CppInterpreter::accessor_entry in cppInterpreter_zero.cpp. This should be fixed in Zero, 201 // then the call above updated to ::is_accessor 202 assert(m->size_of_parameters() == 1, "fast code for accessors assumes parameter size = 1"); 203 return accessor; 204 } 205 206 // Note: for now: zero locals for all non-empty methods 207 return zerolocals; 208 } 209 210 #if INCLUDE_CDS 211 212 address AbstractInterpreter::get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) { 213 const size_t trampoline_size = SharedRuntime::trampoline_size(); 214 address addr = MetaspaceShared::cds_i2i_entry_code_buffers((size_t)(AbstractInterpreter::number_of_method_entries) * trampoline_size); 215 addr += (size_t)(kind) * trampoline_size; 216 264 } 265 266 267 #ifndef PRODUCT 268 void AbstractInterpreter::print_method_kind(MethodKind kind) { 269 switch (kind) { 270 case zerolocals : tty->print("zerolocals" ); break; 271 case zerolocals_synchronized: tty->print("zerolocals_synchronized"); break; 272 case native : tty->print("native" ); break; 273 case native_synchronized : tty->print("native_synchronized" ); break; 274 case empty : tty->print("empty" ); break; 275 case accessor : tty->print("accessor" ); break; 276 case abstract : tty->print("abstract" ); break; 277 case java_lang_math_sin : tty->print("java_lang_math_sin" ); break; 278 case java_lang_math_cos : tty->print("java_lang_math_cos" ); break; 279 case java_lang_math_tan : tty->print("java_lang_math_tan" ); break; 280 case java_lang_math_abs : tty->print("java_lang_math_abs" ); break; 281 case java_lang_math_sqrt : tty->print("java_lang_math_sqrt" ); break; 282 case java_lang_math_log : tty->print("java_lang_math_log" ); break; 283 case java_lang_math_log10 : tty->print("java_lang_math_log10" ); break; 284 case java_util_zip_CRC32_update : tty->print("java_util_zip_CRC32_update"); break; 285 case java_util_zip_CRC32_updateBytes : tty->print("java_util_zip_CRC32_updateBytes"); break; 286 case java_util_zip_CRC32_updateByteBuffer : tty->print("java_util_zip_CRC32_updateByteBuffer"); break; 287 case java_util_zip_CRC32C_updateBytes : tty->print("java_util_zip_CRC32C_updateBytes"); break; 288 case java_util_zip_CRC32C_updateDirectByteBuffer: tty->print("java_util_zip_CRC32C_updateDirectByteByffer"); break; 289 default: 290 if (kind >= method_handle_invoke_FIRST && 291 kind <= method_handle_invoke_LAST) { 292 const char* kind_name = vmIntrinsics::name_at(method_handle_intrinsic(kind)); 293 if (kind_name[0] == '_') kind_name = &kind_name[1]; // '_invokeExact' => 'invokeExact' 294 tty->print("method_handle_%s", kind_name); 295 break; 296 } 297 ShouldNotReachHere(); 298 break; 299 } 300 } 301 #endif // PRODUCT 302 303 | 177 // Special intrinsic method? 178 // Note: This test must come _after_ the test for native methods, 179 // otherwise we will run into problems with JDK 1.2, see also 180 // TemplateInterpreterGenerator::generate_method_entry() for 181 // for details. 182 switch (m->intrinsic_id()) { 183 case vmIntrinsics::_dsin : return java_lang_math_sin ; 184 case vmIntrinsics::_dcos : return java_lang_math_cos ; 185 case vmIntrinsics::_dtan : return java_lang_math_tan ; 186 case vmIntrinsics::_dabs : return java_lang_math_abs ; 187 case vmIntrinsics::_dsqrt : return java_lang_math_sqrt ; 188 case vmIntrinsics::_dlog : return java_lang_math_log ; 189 case vmIntrinsics::_dlog10: return java_lang_math_log10; 190 case vmIntrinsics::_dpow : return java_lang_math_pow ; 191 case vmIntrinsics::_dexp : return java_lang_math_exp ; 192 193 case vmIntrinsics::_Reference_get: 194 return java_lang_ref_reference_get; 195 } 196 197 if (UseFMA) { 198 switch (m->intrinsic_id()) { 199 case vmIntrinsics::_fmaD: return java_lang_math_fmaD; 200 case vmIntrinsics::_fmaF: return java_lang_math_fmaF; 201 } 202 } 203 204 // Accessor method? 205 if (m->is_getter()) { 206 // TODO: We should have used ::is_accessor above, but fast accessors in Zero expect only getters. 207 // See CppInterpreter::accessor_entry in cppInterpreter_zero.cpp. This should be fixed in Zero, 208 // then the call above updated to ::is_accessor 209 assert(m->size_of_parameters() == 1, "fast code for accessors assumes parameter size = 1"); 210 return accessor; 211 } 212 213 // Note: for now: zero locals for all non-empty methods 214 return zerolocals; 215 } 216 217 #if INCLUDE_CDS 218 219 address AbstractInterpreter::get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) { 220 const size_t trampoline_size = SharedRuntime::trampoline_size(); 221 address addr = MetaspaceShared::cds_i2i_entry_code_buffers((size_t)(AbstractInterpreter::number_of_method_entries) * trampoline_size); 222 addr += (size_t)(kind) * trampoline_size; 223 271 } 272 273 274 #ifndef PRODUCT 275 void AbstractInterpreter::print_method_kind(MethodKind kind) { 276 switch (kind) { 277 case zerolocals : tty->print("zerolocals" ); break; 278 case zerolocals_synchronized: tty->print("zerolocals_synchronized"); break; 279 case native : tty->print("native" ); break; 280 case native_synchronized : tty->print("native_synchronized" ); break; 281 case empty : tty->print("empty" ); break; 282 case accessor : tty->print("accessor" ); break; 283 case abstract : tty->print("abstract" ); break; 284 case java_lang_math_sin : tty->print("java_lang_math_sin" ); break; 285 case java_lang_math_cos : tty->print("java_lang_math_cos" ); break; 286 case java_lang_math_tan : tty->print("java_lang_math_tan" ); break; 287 case java_lang_math_abs : tty->print("java_lang_math_abs" ); break; 288 case java_lang_math_sqrt : tty->print("java_lang_math_sqrt" ); break; 289 case java_lang_math_log : tty->print("java_lang_math_log" ); break; 290 case java_lang_math_log10 : tty->print("java_lang_math_log10" ); break; 291 case java_lang_math_fmaD : tty->print("java_lang_math_fmaD" ); break; 292 case java_lang_math_fmaF : tty->print("java_lang_math_fmaF" ); break; 293 case java_util_zip_CRC32_update : tty->print("java_util_zip_CRC32_update"); break; 294 case java_util_zip_CRC32_updateBytes : tty->print("java_util_zip_CRC32_updateBytes"); break; 295 case java_util_zip_CRC32_updateByteBuffer : tty->print("java_util_zip_CRC32_updateByteBuffer"); break; 296 case java_util_zip_CRC32C_updateBytes : tty->print("java_util_zip_CRC32C_updateBytes"); break; 297 case java_util_zip_CRC32C_updateDirectByteBuffer: tty->print("java_util_zip_CRC32C_updateDirectByteByffer"); break; 298 default: 299 if (kind >= method_handle_invoke_FIRST && 300 kind <= method_handle_invoke_LAST) { 301 const char* kind_name = vmIntrinsics::name_at(method_handle_intrinsic(kind)); 302 if (kind_name[0] == '_') kind_name = &kind_name[1]; // '_invokeExact' => 'invokeExact' 303 tty->print("method_handle_%s", kind_name); 304 break; 305 } 306 ShouldNotReachHere(); 307 break; 308 } 309 } 310 #endif // PRODUCT 311 312 |