2782 |
2782 |
2783 void LIR_Assembler::call(LIR_OpJavaCall* op, relocInfo::relocType rtype) { |
2783 void LIR_Assembler::call(LIR_OpJavaCall* op, relocInfo::relocType rtype) { |
2784 assert(!os::is_MP() || (__ offset() + NativeCall::displacement_offset) % BytesPerWord == 0, |
2784 assert(!os::is_MP() || (__ offset() + NativeCall::displacement_offset) % BytesPerWord == 0, |
2785 "must be aligned"); |
2785 "must be aligned"); |
2786 __ call(AddressLiteral(op->addr(), rtype)); |
2786 __ call(AddressLiteral(op->addr(), rtype)); |
2787 add_call_info(code_offset(), op->info(), op->is_method_handle_invoke()); |
2787 add_call_info(code_offset(), op->info()); |
2788 } |
2788 } |
2789 |
2789 |
2790 |
2790 |
2791 void LIR_Assembler::ic_call(LIR_OpJavaCall* op) { |
2791 void LIR_Assembler::ic_call(LIR_OpJavaCall* op) { |
2792 RelocationHolder rh = virtual_call_Relocation::spec(pc()); |
2792 RelocationHolder rh = virtual_call_Relocation::spec(pc()); |
2793 __ movoop(IC_Klass, (jobject)Universe::non_oop_word()); |
2793 __ movoop(IC_Klass, (jobject)Universe::non_oop_word()); |
2794 assert(!os::is_MP() || |
2794 assert(!os::is_MP() || |
2795 (__ offset() + NativeCall::displacement_offset) % BytesPerWord == 0, |
2795 (__ offset() + NativeCall::displacement_offset) % BytesPerWord == 0, |
2796 "must be aligned"); |
2796 "must be aligned"); |
2797 __ call(AddressLiteral(op->addr(), rh)); |
2797 __ call(AddressLiteral(op->addr(), rh)); |
2798 add_call_info(code_offset(), op->info(), op->is_method_handle_invoke()); |
2798 add_call_info(code_offset(), op->info()); |
2799 } |
2799 } |
2800 |
2800 |
2801 |
2801 |
2802 /* Currently, vtable-dispatch is only enabled for sparc platforms */ |
2802 /* Currently, vtable-dispatch is only enabled for sparc platforms */ |
2803 void LIR_Assembler::vtable_call(LIR_OpJavaCall* op) { |
2803 void LIR_Assembler::vtable_call(LIR_OpJavaCall* op) { |
2804 ShouldNotReachHere(); |
2804 ShouldNotReachHere(); |
2805 } |
|
2806 |
|
2807 |
|
2808 void LIR_Assembler::preserve_SP(LIR_OpJavaCall* op) { |
|
2809 __ movptr(FrameMap::method_handle_invoke_SP_save_opr()->as_register(), rsp); |
|
2810 } |
|
2811 |
|
2812 |
|
2813 void LIR_Assembler::restore_SP(LIR_OpJavaCall* op) { |
|
2814 __ movptr(rsp, FrameMap::method_handle_invoke_SP_save_opr()->as_register()); |
|
2815 } |
2805 } |
2816 |
2806 |
2817 |
2807 |
2818 void LIR_Assembler::emit_static_call_stub() { |
2808 void LIR_Assembler::emit_static_call_stub() { |
2819 address call_pc = __ pc(); |
2809 address call_pc = __ pc(); |