src/hotspot/share/interpreter/templateInterpreter.hpp
changeset 48014 ae7bd89bdc0d
parent 47881 0ce0ac68ace7
child 49364 601146c66cad
equal deleted inserted replaced
48013:2098785677fb 48014:ae7bd89bdc0d
    90   friend class CodeCacheExtensions;
    90   friend class CodeCacheExtensions;
    91   // friend class Interpreter;
    91   // friend class Interpreter;
    92  public:
    92  public:
    93 
    93 
    94   enum MoreConstants {
    94   enum MoreConstants {
    95     number_of_return_entries  = number_of_states,               // number of return entry points
    95     max_invoke_length = 5,    // invokedynamic is the longest
    96     number_of_deopt_entries   = number_of_states,               // number of deoptimization entry points
    96     max_bytecode_length = 6,  // worse case is wide iinc, "reexecute" bytecodes are excluded because "skip" will be 0
       
    97     number_of_return_entries  = max_invoke_length + 1,          // number of return entry points
       
    98     number_of_deopt_entries   = max_bytecode_length + 1,        // number of deoptimization entry points
    97     number_of_return_addrs    = number_of_states                // number of return addresses
    99     number_of_return_addrs    = number_of_states                // number of return addresses
    98   };
   100   };
    99 
   101 
   100  protected:
   102  protected:
   101 
   103 
   117   static EntryPoint _trace_code;
   119   static EntryPoint _trace_code;
   118 #endif // !PRODUCT
   120 #endif // !PRODUCT
   119   static EntryPoint _return_entry[number_of_return_entries];    // entry points to return to from a call
   121   static EntryPoint _return_entry[number_of_return_entries];    // entry points to return to from a call
   120   static EntryPoint _earlyret_entry;                            // entry point to return early from a call
   122   static EntryPoint _earlyret_entry;                            // entry point to return early from a call
   121   static EntryPoint _deopt_entry[number_of_deopt_entries];      // entry points to return to from a deoptimization
   123   static EntryPoint _deopt_entry[number_of_deopt_entries];      // entry points to return to from a deoptimization
       
   124   static address    _deopt_reexecute_return_entry;
   122   static EntryPoint _safept_entry;
   125   static EntryPoint _safept_entry;
   123 
   126 
   124   static address _invoke_return_entry[number_of_return_addrs];           // for invokestatic, invokespecial, invokevirtual return entries
   127   static address _invoke_return_entry[number_of_return_addrs];           // for invokestatic, invokespecial, invokevirtual return entries
   125   static address _invokeinterface_return_entry[number_of_return_addrs];  // for invokeinterface return entries
   128   static address _invokeinterface_return_entry[number_of_return_addrs];  // for invokeinterface return entries
   126   static address _invokedynamic_return_entry[number_of_return_addrs];    // for invokedynamic return entries
   129   static address _invokedynamic_return_entry[number_of_return_addrs];    // for invokedynamic return entries
   171   static int        TosState_as_index(TosState state);
   174   static int        TosState_as_index(TosState state);
   172 
   175 
   173   static address* invoke_return_entry_table_for(Bytecodes::Code code);
   176   static address* invoke_return_entry_table_for(Bytecodes::Code code);
   174 
   177 
   175   static address deopt_entry(TosState state, int length);
   178   static address deopt_entry(TosState state, int length);
       
   179   static address deopt_reexecute_return_entry()                 { return _deopt_reexecute_return_entry; }
   176   static address return_entry(TosState state, int length, Bytecodes::Code code);
   180   static address return_entry(TosState state, int length, Bytecodes::Code code);
   177 
   181 
   178   // Safepoint support
   182   // Safepoint support
   179   static void       notice_safepoints();                        // stops the thread when reaching a safepoint
   183   static void       notice_safepoints();                        // stops the thread when reaching a safepoint
   180   static void       ignore_safepoints();                        // ignores safepoints
   184   static void       ignore_safepoints();                        // ignores safepoints