< prev index next >

src/hotspot/share/interpreter/templateInterpreterGenerator.cpp

Print this page




 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


< prev index next >