3126 // the call_VM checks for exception, so we should never return here. |
3126 // the call_VM checks for exception, so we should never return here. |
3127 __ should_not_reach_here(); |
3127 __ should_not_reach_here(); |
3128 return; |
3128 return; |
3129 } |
3129 } |
3130 |
3130 |
3131 assert(byte_no == f1_oop, "use this argument"); |
|
3132 prepare_invoke(rax, rbx, byte_no); |
3131 prepare_invoke(rax, rbx, byte_no); |
3133 |
3132 |
3134 // rax: CallSite object (f1) |
3133 // rax: CallSite object (f1) |
3135 // rbx: unused (f2) |
3134 // rbx: unused (f2) |
3136 // rcx: receiver address |
3135 // rcx: receiver address |
3137 // rdx: flags (unused) |
3136 // rdx: flags (unused) |
3138 |
3137 |
3139 Register rax_callsite = rax; |
3138 Register rax_callsite = rax; |
3140 Register rcx_method_handle = rcx; |
3139 Register rcx_method_handle = rcx; |
3141 |
3140 |
3142 if (ProfileInterpreter) { |
3141 // %%% should make a type profile for any invokedynamic that takes a ref argument |
3143 // %%% should make a type profile for any invokedynamic that takes a ref argument |
3142 // profile this call |
3144 // profile this call |
3143 __ profile_call(r13); |
3145 __ profile_call(r13); |
3144 |
3146 } |
3145 __ verify_oop(rax_callsite); |
3147 |
3146 __ load_heap_oop(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, rdx))); |
3148 __ load_heap_oop(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, rcx))); |
|
3149 __ null_check(rcx_method_handle); |
3147 __ null_check(rcx_method_handle); |
|
3148 __ verify_oop(rcx_method_handle); |
3150 __ prepare_to_jump_from_interpreted(); |
3149 __ prepare_to_jump_from_interpreted(); |
3151 __ jump_to_method_handle_entry(rcx_method_handle, rdx); |
3150 __ jump_to_method_handle_entry(rcx_method_handle, rdx); |
3152 } |
3151 } |
3153 |
3152 |
3154 |
3153 |