src/hotspot/share/interpreter/templateInterpreter.hpp
changeset 48014 ae7bd89bdc0d
parent 47881 0ce0ac68ace7
child 49364 601146c66cad
--- a/src/hotspot/share/interpreter/templateInterpreter.hpp	Tue Nov 21 10:21:24 2017 -0600
+++ b/src/hotspot/share/interpreter/templateInterpreter.hpp	Tue Nov 21 09:04:42 2017 -0800
@@ -92,8 +92,10 @@
  public:
 
   enum MoreConstants {
-    number_of_return_entries  = number_of_states,               // number of return entry points
-    number_of_deopt_entries   = number_of_states,               // number of deoptimization entry points
+    max_invoke_length = 5,    // invokedynamic is the longest
+    max_bytecode_length = 6,  // worse case is wide iinc, "reexecute" bytecodes are excluded because "skip" will be 0
+    number_of_return_entries  = max_invoke_length + 1,          // number of return entry points
+    number_of_deopt_entries   = max_bytecode_length + 1,        // number of deoptimization entry points
     number_of_return_addrs    = number_of_states                // number of return addresses
   };
 
@@ -119,6 +121,7 @@
   static EntryPoint _return_entry[number_of_return_entries];    // entry points to return to from a call
   static EntryPoint _earlyret_entry;                            // entry point to return early from a call
   static EntryPoint _deopt_entry[number_of_deopt_entries];      // entry points to return to from a deoptimization
+  static address    _deopt_reexecute_return_entry;
   static EntryPoint _safept_entry;
 
   static address _invoke_return_entry[number_of_return_addrs];           // for invokestatic, invokespecial, invokevirtual return entries
@@ -173,6 +176,7 @@
   static address* invoke_return_entry_table_for(Bytecodes::Code code);
 
   static address deopt_entry(TosState state, int length);
+  static address deopt_reexecute_return_entry()                 { return _deopt_reexecute_return_entry; }
   static address return_entry(TosState state, int length, Bytecodes::Code code);
 
   // Safepoint support