< 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 >