211 212 AbstractInterpreter::initialize_method_handle_entries(); 213 214 // all native method kinds (must be one contiguous block) 215 Interpreter::_native_entry_begin = Interpreter::code()->code_end(); 216 method_entry(native) 217 method_entry(native_synchronized) 218 Interpreter::_native_entry_end = Interpreter::code()->code_end(); 219 220 method_entry(java_util_zip_CRC32_update) 221 method_entry(java_util_zip_CRC32_updateBytes) 222 method_entry(java_util_zip_CRC32_updateByteBuffer) 223 method_entry(java_util_zip_CRC32C_updateBytes) 224 method_entry(java_util_zip_CRC32C_updateDirectByteBuffer) 225 226 method_entry(java_lang_Float_intBitsToFloat); 227 method_entry(java_lang_Float_floatToRawIntBits); 228 method_entry(java_lang_Double_longBitsToDouble); 229 method_entry(java_lang_Double_doubleToRawLongBits); 230 231 #undef method_entry 232 233 // Bytecodes 234 set_entry_points_for_all_bytes(); 235 236 // installation of code in other places in the runtime 237 // (ExcutableCodeManager calls not needed to copy the entries) 238 set_safepoints_for_all_bytes(); 239 240 { CodeletMark cm(_masm, "deoptimization entry points"); 241 Interpreter::_deopt_entry[0] = EntryPoint(); 242 Interpreter::_deopt_entry[0].set_entry(vtos, generate_deopt_entry_for(vtos, 0)); 243 for (int i = 1; i < Interpreter::number_of_deopt_entries; i++) { 244 address deopt_itos = generate_deopt_entry_for(itos, i); 245 Interpreter::_deopt_entry[i] = 246 EntryPoint( 247 deopt_itos, /* btos */ 248 deopt_itos, /* ztos */ 249 deopt_itos, /* ctos */ 250 deopt_itos, /* stos */ 394 if (t->does_dispatch()) { 395 #ifdef ASSERT 396 // make sure execution doesn't go beyond this point if code is broken 397 __ should_not_reach_here(); 398 #endif // ASSERT 399 } else { 400 // dispatch to next bytecode 401 __ dispatch_epilog(tos_out, step); 402 } 403 } 404 405 // Generate method entries 406 address TemplateInterpreterGenerator::generate_method_entry( 407 AbstractInterpreter::MethodKind kind) { 408 // determine code generation flags 409 bool native = false; 410 bool synchronized = false; 411 address entry_point = NULL; 412 413 switch (kind) { 414 case Interpreter::zerolocals : break; 415 case Interpreter::zerolocals_synchronized: synchronized = true; break; 416 case Interpreter::native : native = true; break; 417 case Interpreter::native_synchronized : native = true; synchronized = true; break; 418 case Interpreter::empty : break; 419 case Interpreter::accessor : break; 420 case Interpreter::abstract : entry_point = generate_abstract_entry(); break; 421 422 case Interpreter::java_lang_math_sin : // fall thru 423 case Interpreter::java_lang_math_cos : // fall thru 424 case Interpreter::java_lang_math_tan : // fall thru 425 case Interpreter::java_lang_math_abs : // fall thru 426 case Interpreter::java_lang_math_log : // fall thru 427 case Interpreter::java_lang_math_log10 : // fall thru 428 case Interpreter::java_lang_math_sqrt : // fall thru 429 case Interpreter::java_lang_math_pow : // fall thru 430 case Interpreter::java_lang_math_exp : // fall thru 431 case Interpreter::java_lang_math_fmaD : // fall thru 432 case Interpreter::java_lang_math_fmaF : entry_point = generate_math_entry(kind); break; 433 case Interpreter::java_lang_ref_reference_get | 211 212 AbstractInterpreter::initialize_method_handle_entries(); 213 214 // all native method kinds (must be one contiguous block) 215 Interpreter::_native_entry_begin = Interpreter::code()->code_end(); 216 method_entry(native) 217 method_entry(native_synchronized) 218 Interpreter::_native_entry_end = Interpreter::code()->code_end(); 219 220 method_entry(java_util_zip_CRC32_update) 221 method_entry(java_util_zip_CRC32_updateBytes) 222 method_entry(java_util_zip_CRC32_updateByteBuffer) 223 method_entry(java_util_zip_CRC32C_updateBytes) 224 method_entry(java_util_zip_CRC32C_updateDirectByteBuffer) 225 226 method_entry(java_lang_Float_intBitsToFloat); 227 method_entry(java_lang_Float_floatToRawIntBits); 228 method_entry(java_lang_Double_longBitsToDouble); 229 method_entry(java_lang_Double_doubleToRawLongBits); 230 231 method_entry(java_lang_System_setBit); 232 method_entry(java_lang_System_clrBit); 233 #undef method_entry 234 235 // Bytecodes 236 set_entry_points_for_all_bytes(); 237 238 // installation of code in other places in the runtime 239 // (ExcutableCodeManager calls not needed to copy the entries) 240 set_safepoints_for_all_bytes(); 241 242 { CodeletMark cm(_masm, "deoptimization entry points"); 243 Interpreter::_deopt_entry[0] = EntryPoint(); 244 Interpreter::_deopt_entry[0].set_entry(vtos, generate_deopt_entry_for(vtos, 0)); 245 for (int i = 1; i < Interpreter::number_of_deopt_entries; i++) { 246 address deopt_itos = generate_deopt_entry_for(itos, i); 247 Interpreter::_deopt_entry[i] = 248 EntryPoint( 249 deopt_itos, /* btos */ 250 deopt_itos, /* ztos */ 251 deopt_itos, /* ctos */ 252 deopt_itos, /* stos */ 396 if (t->does_dispatch()) { 397 #ifdef ASSERT 398 // make sure execution doesn't go beyond this point if code is broken 399 __ should_not_reach_here(); 400 #endif // ASSERT 401 } else { 402 // dispatch to next bytecode 403 __ dispatch_epilog(tos_out, step); 404 } 405 } 406 407 // Generate method entries 408 address TemplateInterpreterGenerator::generate_method_entry( 409 AbstractInterpreter::MethodKind kind) { 410 // determine code generation flags 411 bool native = false; 412 bool synchronized = false; 413 address entry_point = NULL; 414 415 switch (kind) { 416 case Interpreter::java_lang_System_setBit: // fall thru 417 case Interpreter::java_lang_System_clrBit: entry_point = generate_bit_entry(kind); break; 418 case Interpreter::zerolocals : break; 419 case Interpreter::zerolocals_synchronized: synchronized = true; break; 420 case Interpreter::native : native = true; break; 421 case Interpreter::native_synchronized : native = true; synchronized = true; break; 422 case Interpreter::empty : break; 423 case Interpreter::accessor : break; 424 case Interpreter::abstract : entry_point = generate_abstract_entry(); break; 425 426 case Interpreter::java_lang_math_sin : // fall thru 427 case Interpreter::java_lang_math_cos : // fall thru 428 case Interpreter::java_lang_math_tan : // fall thru 429 case Interpreter::java_lang_math_abs : // fall thru 430 case Interpreter::java_lang_math_log : // fall thru 431 case Interpreter::java_lang_math_log10 : // fall thru 432 case Interpreter::java_lang_math_sqrt : // fall thru 433 case Interpreter::java_lang_math_pow : // fall thru 434 case Interpreter::java_lang_math_exp : // fall thru 435 case Interpreter::java_lang_math_fmaD : // fall thru 436 case Interpreter::java_lang_math_fmaF : entry_point = generate_math_entry(kind); break; 437 case Interpreter::java_lang_ref_reference_get |