769 void pop_v(VectorRegSet regs, Register stack) { if (regs.bits()) pop_v(regs.bits(), stack); }
770 #endif // COMPILER2
771
772 // Push and pop everything that might be clobbered by a native
773 // runtime call except t0 and t1. (They are always
774 // temporary registers, so we don't have to protect them.)
775 // Additional registers can be excluded in a passed RegSet.
776 void push_call_clobbered_registers_except(RegSet exclude);
777 void pop_call_clobbered_registers_except(RegSet exclude);
778
779 void push_call_clobbered_registers() {
780 push_call_clobbered_registers_except(RegSet());
781 }
782 void pop_call_clobbered_registers() {
783 pop_call_clobbered_registers_except(RegSet());
784 }
785
786 void push_CPU_state(bool save_vectors = false, int vector_size_in_bytes = 0);
787 void pop_CPU_state(bool restore_vectors = false, int vector_size_in_bytes = 0);
788
789 void push_cont_fastpath(Register java_thread);
790 void pop_cont_fastpath(Register java_thread);
791
792 // if heap base register is used - reinit it with the correct value
793 void reinit_heapbase();
794
795 void bind(Label& L) {
796 Assembler::bind(L);
797 // fences across basic blocks should not be merged
798 code()->clear_last_insn();
799 }
800
801 typedef void (MacroAssembler::* compare_and_branch_insn)(Register Rs1, Register Rs2, const address dest);
802 typedef void (MacroAssembler::* compare_and_branch_label_insn)(Register Rs1, Register Rs2, Label &L, bool is_far);
803 typedef void (MacroAssembler::* jal_jalr_insn)(Register Rt, address dest);
804
805 void wrap_label(Register r, Label &L, jal_jalr_insn insn);
806 void wrap_label(Register r1, Register r2, Label &L,
807 compare_and_branch_insn insn,
808 compare_and_branch_label_insn neg_insn, bool is_far = false);
809
810 // la will use movptr instead of GOT when not in reach for auipc.
|
769 void pop_v(VectorRegSet regs, Register stack) { if (regs.bits()) pop_v(regs.bits(), stack); }
770 #endif // COMPILER2
771
772 // Push and pop everything that might be clobbered by a native
773 // runtime call except t0 and t1. (They are always
774 // temporary registers, so we don't have to protect them.)
775 // Additional registers can be excluded in a passed RegSet.
776 void push_call_clobbered_registers_except(RegSet exclude);
777 void pop_call_clobbered_registers_except(RegSet exclude);
778
779 void push_call_clobbered_registers() {
780 push_call_clobbered_registers_except(RegSet());
781 }
782 void pop_call_clobbered_registers() {
783 pop_call_clobbered_registers_except(RegSet());
784 }
785
786 void push_CPU_state(bool save_vectors = false, int vector_size_in_bytes = 0);
787 void pop_CPU_state(bool restore_vectors = false, int vector_size_in_bytes = 0);
788
789 void push_cont_fastpath(Register java_thread = xthread);
790 void pop_cont_fastpath(Register java_thread = xthread);
791
792 void inc_held_monitor_count(Register tmp = t0);
793 void dec_held_monitor_count(Register tmp = t0);
794
795 // if heap base register is used - reinit it with the correct value
796 void reinit_heapbase();
797
798 void bind(Label& L) {
799 Assembler::bind(L);
800 // fences across basic blocks should not be merged
801 code()->clear_last_insn();
802 }
803
804 typedef void (MacroAssembler::* compare_and_branch_insn)(Register Rs1, Register Rs2, const address dest);
805 typedef void (MacroAssembler::* compare_and_branch_label_insn)(Register Rs1, Register Rs2, Label &L, bool is_far);
806 typedef void (MacroAssembler::* jal_jalr_insn)(Register Rt, address dest);
807
808 void wrap_label(Register r, Label &L, jal_jalr_insn insn);
809 void wrap_label(Register r1, Register r2, Label &L,
810 compare_and_branch_insn insn,
811 compare_and_branch_label_insn neg_insn, bool is_far = false);
812
813 // la will use movptr instead of GOT when not in reach for auipc.
|