Skip to content

Commit 1169dc0

Browse files
DingliZhangRealFYang
authored andcommitted
8296447: RISC-V: Make the operands order of vrsub_vx/vrsub_vi consistent with RVV 1.0 spec
Reviewed-by: luhenry, fyang
1 parent 4c80dff commit 1169dc0

File tree

3 files changed

+10
-20
lines changed

3 files changed

+10
-20
lines changed

src/hotspot/cpu/riscv/assembler_riscv.hpp

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,8 +1255,6 @@ enum VectorMask {
12551255
INSN(vnmsac_vx, 0b1010111, 0b110, 0b101111);
12561256
INSN(vmacc_vx, 0b1010111, 0b110, 0b101101);
12571257

1258-
INSN(vrsub_vx, 0b1010111, 0b100, 0b000011);
1259-
12601258
#undef INSN
12611259

12621260
#define INSN(NAME, op, funct3, funct6) \
@@ -1414,8 +1412,9 @@ enum VectorMask {
14141412
INSN(vand_vx, 0b1010111, 0b100, 0b001001);
14151413

14161414
// Vector Single-Width Integer Add and Subtract
1417-
INSN(vsub_vx, 0b1010111, 0b100, 0b000010);
1418-
INSN(vadd_vx, 0b1010111, 0b100, 0b000000);
1415+
INSN(vsub_vx, 0b1010111, 0b100, 0b000010);
1416+
INSN(vadd_vx, 0b1010111, 0b100, 0b000000);
1417+
INSN(vrsub_vx, 0b1010111, 0b100, 0b000011);
14191418

14201419
#undef INSN
14211420

@@ -1456,7 +1455,7 @@ enum VectorMask {
14561455
#define INSN(NAME, op, funct3, funct6) \
14571456
void NAME(VectorRegister Vd, VectorRegister Vs2, int32_t imm, VectorMask vm = unmasked) { \
14581457
guarantee(is_imm_in_range(imm, 5, 0), "imm is invalid"); \
1459-
patch_VArith(op, Vd, funct3, (uint32_t)imm & 0x1f, Vs2, vm, funct6); \
1458+
patch_VArith(op, Vd, funct3, (uint32_t)(imm & 0x1f), Vs2, vm, funct6); \
14601459
}
14611460

14621461
INSN(vmsgt_vi, 0b1010111, 0b011, 0b011111);
@@ -1469,16 +1468,7 @@ enum VectorMask {
14691468
INSN(vor_vi, 0b1010111, 0b011, 0b001010);
14701469
INSN(vand_vi, 0b1010111, 0b011, 0b001001);
14711470
INSN(vadd_vi, 0b1010111, 0b011, 0b000000);
1472-
1473-
#undef INSN
1474-
1475-
#define INSN(NAME, op, funct3, funct6) \
1476-
void NAME(VectorRegister Vd, int32_t imm, VectorRegister Vs2, VectorMask vm = unmasked) { \
1477-
guarantee(is_imm_in_range(imm, 5, 0), "imm is invalid"); \
1478-
patch_VArith(op, Vd, funct3, (uint32_t)(imm & 0x1f), Vs2, vm, funct6); \
1479-
}
1480-
1481-
INSN(vrsub_vi, 0b1010111, 0b011, 0b000011);
1471+
INSN(vrsub_vi, 0b1010111, 0b011, 0b000011);
14821472

14831473
#undef INSN
14841474

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,7 @@ void MacroAssembler::vncvt_x_x_w(VectorRegister vd, VectorRegister vs, VectorMas
753753
}
754754

755755
void MacroAssembler::vneg_v(VectorRegister vd, VectorRegister vs) {
756-
vrsub_vx(vd, x0, vs);
756+
vrsub_vx(vd, vs, x0);
757757
}
758758

759759
void MacroAssembler::vfneg_v(VectorRegister vd, VectorRegister vs) {

src/hotspot/cpu/riscv/riscv_v.ad

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ instruct vabsB(vReg dst, vReg src, vReg tmp) %{
133133
"vmax.vv $dst, $tmp, $src" %}
134134
ins_encode %{
135135
__ vsetvli(t0, x0, Assembler::e8);
136-
__ vrsub_vi(as_VectorRegister($tmp$$reg), 0, as_VectorRegister($src$$reg));
136+
__ vrsub_vi(as_VectorRegister($tmp$$reg), as_VectorRegister($src$$reg), 0);
137137
__ vmax_vv(as_VectorRegister($dst$$reg), as_VectorRegister($tmp$$reg), as_VectorRegister($src$$reg));
138138
%}
139139
ins_pipe(pipe_slow);
@@ -147,7 +147,7 @@ instruct vabsS(vReg dst, vReg src, vReg tmp) %{
147147
"vmax.vv $dst, $tmp, $src" %}
148148
ins_encode %{
149149
__ vsetvli(t0, x0, Assembler::e16);
150-
__ vrsub_vi(as_VectorRegister($tmp$$reg), 0, as_VectorRegister($src$$reg));
150+
__ vrsub_vi(as_VectorRegister($tmp$$reg), as_VectorRegister($src$$reg), 0);
151151
__ vmax_vv(as_VectorRegister($dst$$reg), as_VectorRegister($tmp$$reg), as_VectorRegister($src$$reg));
152152
%}
153153
ins_pipe(pipe_slow);
@@ -161,7 +161,7 @@ instruct vabsI(vReg dst, vReg src, vReg tmp) %{
161161
"vmax.vv $dst, $tmp, $src" %}
162162
ins_encode %{
163163
__ vsetvli(t0, x0, Assembler::e32);
164-
__ vrsub_vi(as_VectorRegister($tmp$$reg), 0, as_VectorRegister($src$$reg));
164+
__ vrsub_vi(as_VectorRegister($tmp$$reg), as_VectorRegister($src$$reg), 0);
165165
__ vmax_vv(as_VectorRegister($dst$$reg), as_VectorRegister($tmp$$reg), as_VectorRegister($src$$reg));
166166
%}
167167
ins_pipe(pipe_slow);
@@ -175,7 +175,7 @@ instruct vabsL(vReg dst, vReg src, vReg tmp) %{
175175
"vmax.vv $dst, $tmp, $src" %}
176176
ins_encode %{
177177
__ vsetvli(t0, x0, Assembler::e64);
178-
__ vrsub_vi(as_VectorRegister($tmp$$reg), 0, as_VectorRegister($src$$reg));
178+
__ vrsub_vi(as_VectorRegister($tmp$$reg), as_VectorRegister($src$$reg), 0);
179179
__ vmax_vv(as_VectorRegister($dst$$reg), as_VectorRegister($tmp$$reg), as_VectorRegister($src$$reg));
180180
%}
181181
ins_pipe(pipe_slow);

0 commit comments

Comments
 (0)