src/cpu/x86/vm/templateTable_x86_64.cpp

changeset 2811
08ccee2c4dbf
parent 2807
bbe95b4337f1
child 2816
286c498ae0d4
equal deleted inserted replaced
2810:66b0e2371912 2811:08ccee2c4dbf
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

mercurial