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