diff --git a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp index dd9a9974f1b..9ce197a44bf 100644 --- a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp @@ -2791,6 +2791,21 @@ void C2_MacroAssembler::compare_fp_v(VectorRegister vd, VectorRegister src1, Vec } } +// In Matcher::scalable_predicate_reg_slots, +// we assume each predicate register is one-eighth of the size of +// scalable vector register, one mask bit per vector byte. +void C2_MacroAssembler::spill_vmask(VectorRegister v, int offset) { + vsetvli_helper(T_BYTE, MaxVectorSize >> 3); + add(t0, sp, offset); + vse8_v(v, t0); +} + +void C2_MacroAssembler::unspill_vmask(VectorRegister v, int offset) { + vsetvli_helper(T_BYTE, MaxVectorSize >> 3); + add(t0, sp, offset); + vle8_v(v, t0); +} + void C2_MacroAssembler::integer_extend_v(VectorRegister dst, BasicType dst_bt, uint vector_length, VectorRegister src, BasicType src_bt, bool is_signed) { assert(type2aelembytes(dst_bt) > type2aelembytes(src_bt) && type2aelembytes(dst_bt) <= 8 && type2aelembytes(src_bt) <= 4, "invalid element size"); diff --git a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp index 944025ffb2f..9988b98fa2c 100644 --- a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp @@ -251,20 +251,9 @@ void compare_fp_v(VectorRegister dst, VectorRegister src1, VectorRegister src2, int cond, BasicType bt, uint vector_length, VectorMask vm = Assembler::unmasked); - // In Matcher::scalable_predicate_reg_slots, - // we assume each predicate register is one-eighth of the size of - // scalable vector register, one mask bit per vector byte. - void spill_vmask(VectorRegister v, int offset){ - vsetvli_helper(T_BYTE, MaxVectorSize >> 3); - add(t0, sp, offset); - vse8_v(v, t0); - } + void spill_vmask(VectorRegister v, int offset); - void unspill_vmask(VectorRegister v, int offset){ - vsetvli_helper(T_BYTE, MaxVectorSize >> 3); - add(t0, sp, offset); - vle8_v(v, t0); - } + void unspill_vmask(VectorRegister v, int offset); void spill_copy_vmask_stack_to_stack(int src_offset, int dst_offset, uint vector_length_in_bytes) { assert(vector_length_in_bytes % 4 == 0, "unexpected vector mask reg size");