< prev index next >

src/share/vm/interpreter/templateInterpreter.hpp

Print this page

        

@@ -86,10 +86,11 @@
   friend class VMStructs;
   friend class InterpreterMacroAssembler;
   friend class TemplateInterpreterGenerator;
   friend class TemplateTable;
   friend class CodeCacheExtensions;
+  friend class BCSetTemplate;
   // friend class Interpreter;
  public:
 
   enum MoreConstants {
     number_of_return_entries  = number_of_states,               // number of return entry points

@@ -128,10 +129,12 @@
 
   static DispatchTable _active_table;                           // the active    dispatch table (used by the interpreter for dispatch)
   static DispatchTable _normal_table;                           // the normal    dispatch table (used to set the active table in normal mode)
   static DispatchTable _safept_table;                           // the safepoint dispatch table (used to set the active table for safepoints)
   static address       _wentry_point[DispatchTable::length];    // wide instructions only (vtos tosca always)
+  static address       _typed_entry_point[Bytecodes::number_of_bcset][DispatchTable::length];
+  static address       _typed_wentry_point[Bytecodes::number_of_bcset][DispatchTable::length];
 
 
  public:
   // Initialization/debugging
   static void       initialize();

@@ -158,10 +161,18 @@
 #ifndef PRODUCT
   static address    trace_code    (TosState state)              { return _trace_code.entry(state); }
 #endif // !PRODUCT
   static address    continuation  (TosState state)              { return _continuation_entry.entry(state); }
   static address*   dispatch_table(TosState state)              { return _active_table.table_for(state); }
+  static address*   typed_dispatch_table(Bytecodes::BCSet btype) {
+    assert(btype > 0 && btype < Bytecodes::number_of_bcset, "Invalid btype");
+    return _typed_entry_point[btype];
+  }
+  static address*   typed_wide_dispatch_table(Bytecodes::BCSet btype) {
+      assert(btype > 0 && btype < Bytecodes::number_of_bcset, "Invalid btype");
+      return _typed_wentry_point[btype];
+    }
   static address*   dispatch_table()                            { return _active_table.table_for(); }
   static int        distance_from_dispatch_table(TosState state){ return _active_table.distance_from(state); }
   static address*   normal_table(TosState state)                { return _normal_table.table_for(state); }
   static address*   normal_table()                              { return _normal_table.table_for(); }
 
< prev index next >