mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
6993078: JSR 292 too many pushes: Lesp points into register window
Reviewed-by: kvn, never
This commit is contained in:
parent
abc5f94df7
commit
868bf68a3e
5 changed files with 28 additions and 27 deletions
|
@ -3074,6 +3074,7 @@ void TemplateTable::invokeinterface(int byte_no) {
|
|||
|
||||
void TemplateTable::invokedynamic(int byte_no) {
|
||||
transition(vtos, vtos);
|
||||
assert(byte_no == f1_oop, "use this argument");
|
||||
|
||||
if (!EnableInvokeDynamic) {
|
||||
// We should not encounter this bytecode if !EnableInvokeDynamic.
|
||||
|
@ -3086,7 +3087,6 @@ void TemplateTable::invokedynamic(int byte_no) {
|
|||
return;
|
||||
}
|
||||
|
||||
assert(byte_no == f1_oop, "use this argument");
|
||||
prepare_invoke(rax, rbx, byte_no);
|
||||
|
||||
// rax: CallSite object (f1)
|
||||
|
@ -3097,14 +3097,14 @@ void TemplateTable::invokedynamic(int byte_no) {
|
|||
Register rax_callsite = rax;
|
||||
Register rcx_method_handle = rcx;
|
||||
|
||||
if (ProfileInterpreter) {
|
||||
// %%% should make a type profile for any invokedynamic that takes a ref argument
|
||||
// profile this call
|
||||
__ profile_call(rsi);
|
||||
}
|
||||
// %%% should make a type profile for any invokedynamic that takes a ref argument
|
||||
// profile this call
|
||||
__ profile_call(rsi);
|
||||
|
||||
__ load_heap_oop(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, rcx)));
|
||||
__ verify_oop(rax_callsite);
|
||||
__ load_heap_oop(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, rdx)));
|
||||
__ null_check(rcx_method_handle);
|
||||
__ verify_oop(rcx_method_handle);
|
||||
__ prepare_to_jump_from_interpreted();
|
||||
__ jump_to_method_handle_entry(rcx_method_handle, rdx);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue