3109 assert(byte_no == f1_oop, "use this argument"); |
3109 assert(byte_no == f1_oop, "use this argument"); |
3110 prepare_invoke(rax, rbx, byte_no); |
3110 prepare_invoke(rax, rbx, byte_no); |
3111 |
3111 |
3112 // rax: CallSite object (f1) |
3112 // rax: CallSite object (f1) |
3113 // rbx: unused (f2) |
3113 // rbx: unused (f2) |
|
3114 // rcx: receiver address |
3114 // rdx: flags (unused) |
3115 // rdx: flags (unused) |
3115 |
3116 |
|
3117 Register rax_callsite = rax; |
|
3118 Register rcx_method_handle = rcx; |
|
3119 |
3116 if (ProfileInterpreter) { |
3120 if (ProfileInterpreter) { |
3117 Label L; |
|
3118 // %%% should make a type profile for any invokedynamic that takes a ref argument |
3121 // %%% should make a type profile for any invokedynamic that takes a ref argument |
3119 // profile this call |
3122 // profile this call |
3120 __ profile_call(rsi); |
3123 __ profile_call(rsi); |
3121 } |
3124 } |
3122 |
3125 |
3123 __ movptr(rcx, Address(rax, __ delayed_value(java_dyn_CallSite::target_offset_in_bytes, rcx))); |
3126 __ movptr(rcx_method_handle, Address(rax_callsite, __ delayed_value(java_dyn_CallSite::target_offset_in_bytes, rcx))); |
3124 __ null_check(rcx); |
3127 __ null_check(rcx_method_handle); |
3125 __ prepare_to_jump_from_interpreted(); |
3128 __ prepare_to_jump_from_interpreted(); |
3126 __ jump_to_method_handle_entry(rcx, rdx); |
3129 __ jump_to_method_handle_entry(rcx_method_handle, rdx); |
3127 } |
3130 } |
3128 |
3131 |
3129 //---------------------------------------------------------------------------------------------------- |
3132 //---------------------------------------------------------------------------------------------------- |
3130 // Allocation |
3133 // Allocation |
3131 |
3134 |