8309418: RISC-V: Make use of vl1r.v & vfabs.v pseudo-instructions where appropriate

Reviewed-by: fyang, luhenry, gcao
This commit is contained in:
Dingli Zhang 2023-06-06 09:07:39 +00:00 committed by Fei Yang
parent 41bf2ad159
commit 5146a58249
5 changed files with 12 additions and 11 deletions

@ -1399,7 +1399,6 @@ enum VectorMask {
// Vector Floating-Point Sign-Injection Instructions
INSN(vfsgnjx_vv, 0b1010111, 0b001, 0b001010);
INSN(vfsgnjn_vv, 0b1010111, 0b001, 0b001001);
INSN(vfsgnj_vv, 0b1010111, 0b001, 0b001000);
// Vector Floating-Point MIN/MAX Instructions
INSN(vfmax_vv, 0b1010111, 0b001, 0b000110);
@ -1552,11 +1551,6 @@ enum VectorMask {
INSN(vmfne_vf, 0b1010111, 0b101, 0b011100);
INSN(vmfeq_vf, 0b1010111, 0b101, 0b011000);
// Vector Floating-Point Sign-Injection Instructions
INSN(vfsgnjx_vf, 0b1010111, 0b101, 0b001010);
INSN(vfsgnjn_vf, 0b1010111, 0b101, 0b001001);
INSN(vfsgnj_vf, 0b1010111, 0b101, 0b001000);
// Vector Floating-Point MIN/MAX Instructions
INSN(vfmax_vf, 0b1010111, 0b101, 0b000110);
INSN(vfmin_vf, 0b1010111, 0b101, 0b000100);

@ -134,7 +134,7 @@
void unspill(VectorRegister v, int offset) {
add(t0, sp, offset);
vl1re8_v(v, t0);
vl1r_v(v, t0);
}
void spill_copy_vector_stack_to_stack(int src_offset, int dst_offset, int vector_length_in_bytes) {

@ -1278,7 +1278,7 @@ int MacroAssembler::pop_v(unsigned int bitset, Register stack) {
int count = bitset_to_regs(bitset, regs);
for (int i = count - 1; i >= 0; i--) {
vl1re8_v(as_VectorRegister(regs[i]), stack);
vl1r_v(as_VectorRegister(regs[i]), stack);
add(stack, stack, vector_size_in_bytes);
}

@ -1265,6 +1265,10 @@ public:
}
// vector pseudo instructions
inline void vl1r_v(VectorRegister vd, Register rs) {
vl1re8_v(vd, rs);
}
inline void vmnot_m(VectorRegister vd, VectorRegister vs) {
vmnand_mm(vd, vs, vs);
}
@ -1281,6 +1285,10 @@ public:
vfsgnjn_vv(vd, vs, vs, vm);
}
inline void vfabs_v(VectorRegister vd, VectorRegister vs, VectorMask vm = unmasked) {
vfsgnjx_vv(vd, vs, vs, vm);
}
inline void vmsgt_vv(VectorRegister vd, VectorRegister vs2, VectorRegister vs1, VectorMask vm = unmasked) {
vmslt_vv(vd, vs1, vs2, vm);
}

@ -259,7 +259,7 @@ instruct vabs_fp(vReg dst, vReg src) %{
ins_encode %{
BasicType bt = Matcher::vector_element_basic_type(this);
__ vsetvli_helper(bt, Matcher::vector_length(this));
__ vfsgnjx_vv(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg), as_VectorRegister($src$$reg));
__ vfabs_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
%}
ins_pipe(pipe_slow);
%}
@ -293,8 +293,7 @@ instruct vabs_fp_masked(vReg dst_src, vRegMask_V0 v0) %{
ins_encode %{
BasicType bt = Matcher::vector_element_basic_type(this);
__ vsetvli_helper(bt, Matcher::vector_length(this));
__ vfsgnjx_vv(as_VectorRegister($dst_src$$reg), as_VectorRegister($dst_src$$reg),
as_VectorRegister($dst_src$$reg), Assembler::v0_t);
__ vfabs_v(as_VectorRegister($dst_src$$reg), as_VectorRegister($dst_src$$reg), Assembler::v0_t);
%}
ins_pipe(pipe_slow);
%}