216
217 // abstract method entry
218
219 // pop return address, reset last_sp to NULL
220 __ empty_expression_stack();
221 __ restore_bcp(); // rsi must be correct for exception handler (was destroyed)
222 __ restore_locals(); // make sure locals pointer is correct as well (was destroyed)
223
224 // throw exception
225 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError));
226 // the call_VM checks for exception, so we should never return here.
227 __ should_not_reach_here();
228
229 return entry_point;
230 }
231
232
233 // Method handle invoker
234 // Dispatch a method of the form java.lang.invoke.MethodHandles::invoke(...)
235 address InterpreterGenerator::generate_method_handle_entry(void) {
236 if (!EnableMethodHandles) {
237 return generate_abstract_entry();
238 }
239
240 address entry_point = MethodHandles::generate_method_handle_interpreter_entry(_masm);
241
242 return entry_point;
243 }
244
245
246 // This method tells the deoptimizer how big an interpreted frame must be:
247 int AbstractInterpreter::size_activation(methodOop method,
248 int tempcount,
249 int popframe_extra_args,
250 int moncount,
251 int callee_param_count,
252 int callee_locals,
253 bool is_top_frame) {
254 return layout_activation(method,
255 tempcount,
256 popframe_extra_args,
|
216
217 // abstract method entry
218
219 // pop return address, reset last_sp to NULL
220 __ empty_expression_stack();
221 __ restore_bcp(); // rsi must be correct for exception handler (was destroyed)
222 __ restore_locals(); // make sure locals pointer is correct as well (was destroyed)
223
224 // throw exception
225 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError));
226 // the call_VM checks for exception, so we should never return here.
227 __ should_not_reach_here();
228
229 return entry_point;
230 }
231
232
233 // Method handle invoker
234 // Dispatch a method of the form java.lang.invoke.MethodHandles::invoke(...)
235 address InterpreterGenerator::generate_method_handle_entry(void) {
236 if (!EnableInvokeDynamic) {
237 return generate_abstract_entry();
238 }
239
240 address entry_point = MethodHandles::generate_method_handle_interpreter_entry(_masm);
241
242 return entry_point;
243 }
244
245
246 // This method tells the deoptimizer how big an interpreted frame must be:
247 int AbstractInterpreter::size_activation(methodOop method,
248 int tempcount,
249 int popframe_extra_args,
250 int moncount,
251 int callee_param_count,
252 int callee_locals,
253 bool is_top_frame) {
254 return layout_activation(method,
255 tempcount,
256 popframe_extra_args,
|