< prev index next >

src/hotspot/cpu/riscv/macroAssembler_riscv.hpp

Print this page

 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.
< prev index next >