96 if (kind >= method_handle_invoke_FIRST && kind <= method_handle_invoke_LAST) 97 return (vmIntrinsics::ID)( vmIntrinsics::FIRST_MH_SIG_POLY + (kind - method_handle_invoke_FIRST) ); 98 else 99 return vmIntrinsics::_none; 100 } 101 102 enum SomeConstants { 103 number_of_result_handlers = 10 // number of result handlers for native calls 104 }; 105 106 protected: 107 static StubQueue* _code; // the interpreter code (codelets) 108 109 static bool _notice_safepoints; // true if safepoints are activated 110 111 static address _native_entry_begin; // Region for native entry code 112 static address _native_entry_end; 113 114 // method entry points 115 static address _entry_table[number_of_method_entries]; // entry points for a given method 116 static address _native_abi_to_tosca[number_of_result_handlers]; // for native method result handlers 117 static address _slow_signature_handler; // the native method generic (slow) signature handler 118 119 static address _rethrow_exception_entry; // rethrows an activation in previous frame 120 121 friend class AbstractInterpreterGenerator; 122 friend class InterpreterMacroAssembler; 123 124 public: 125 // Initialization/debugging 126 static void initialize(); 127 static StubQueue* code() { return _code; } 128 129 130 // Method activation 131 static MethodKind method_kind(methodHandle m); 132 static address entry_for_kind(MethodKind k) { assert(0 <= k && k < number_of_method_entries, "illegal kind"); return _entry_table[k]; } 133 static address entry_for_method(methodHandle m) { return entry_for_kind(method_kind(m)); } 134 135 // used for bootstrapping method handles: 136 static void set_entry_for_kind(MethodKind k, address e); 137 138 static void print_method_kind(MethodKind kind) PRODUCT_RETURN; 139 140 static bool can_be_compiled(methodHandle m); 141 142 // Runtime support 143 144 // length = invoke bytecode length (to advance to next bytecode) 145 static address deopt_entry(TosState state, int length) { ShouldNotReachHere(); return NULL; } 146 static address return_entry(TosState state, int length, Bytecodes::Code code) { ShouldNotReachHere(); return NULL; } 147 148 static address rethrow_exception_entry() { return _rethrow_exception_entry; } 149 150 // Activation size in words for a method that is just being called. 151 // Parameters haven't been pushed so count them too. 152 static int size_top_interpreter_activation(Method* method); 153 154 // Deoptimization support | 96 if (kind >= method_handle_invoke_FIRST && kind <= method_handle_invoke_LAST) 97 return (vmIntrinsics::ID)( vmIntrinsics::FIRST_MH_SIG_POLY + (kind - method_handle_invoke_FIRST) ); 98 else 99 return vmIntrinsics::_none; 100 } 101 102 enum SomeConstants { 103 number_of_result_handlers = 10 // number of result handlers for native calls 104 }; 105 106 protected: 107 static StubQueue* _code; // the interpreter code (codelets) 108 109 static bool _notice_safepoints; // true if safepoints are activated 110 111 static address _native_entry_begin; // Region for native entry code 112 static address _native_entry_end; 113 114 // method entry points 115 static address _entry_table[number_of_method_entries]; // entry points for a given method 116 static address _cds_entry_table[number_of_method_entries]; // entry points for methods in the CDS archive 117 static address _native_abi_to_tosca[number_of_result_handlers]; // for native method result handlers 118 static address _slow_signature_handler; // the native method generic (slow) signature handler 119 120 static address _rethrow_exception_entry; // rethrows an activation in previous frame 121 122 friend class AbstractInterpreterGenerator; 123 friend class InterpreterMacroAssembler; 124 125 public: 126 // Initialization/debugging 127 static void initialize(); 128 static StubQueue* code() { return _code; } 129 130 131 // Method activation 132 static MethodKind method_kind(methodHandle m); 133 static address entry_for_kind(MethodKind k) { assert(0 <= k && k < number_of_method_entries, "illegal kind"); return _entry_table[k]; } 134 static address entry_for_method(methodHandle m) { return entry_for_kind(method_kind(m)); } 135 136 static address entry_for_cds_method(methodHandle m) { 137 MethodKind k = method_kind(m); 138 assert(0 <= k && k < number_of_method_entries, "illegal kind"); 139 return _cds_entry_table[k]; 140 } 141 142 // used by class data sharing 143 static void update_cds_entry_table(MethodKind kind) NOT_CDS_RETURN; 144 145 static address get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) NOT_CDS_RETURN_(0); 146 147 // used for bootstrapping method handles: 148 static void set_entry_for_kind(MethodKind k, address e); 149 150 static void print_method_kind(MethodKind kind) PRODUCT_RETURN; 151 152 static bool can_be_compiled(methodHandle m); 153 154 // Runtime support 155 156 // length = invoke bytecode length (to advance to next bytecode) 157 static address deopt_entry(TosState state, int length) { ShouldNotReachHere(); return NULL; } 158 static address return_entry(TosState state, int length, Bytecodes::Code code) { ShouldNotReachHere(); return NULL; } 159 160 static address rethrow_exception_entry() { return _rethrow_exception_entry; } 161 162 // Activation size in words for a method that is just being called. 163 // Parameters haven't been pushed so count them too. 164 static int size_top_interpreter_activation(Method* method); 165 166 // Deoptimization support |