8316933: RISC-V: compiler/vectorapi/VectorCastShape128Test.java fails when using RVV

Backport-of: e39197ec62
This commit is contained in:
Gui Cao
2023-09-28 15:34:05 +00:00
committed by Vitaly Provodin
parent 68b12a6b70
commit 6a7f65ca25
3 changed files with 25 additions and 25 deletions

View File

@@ -1898,13 +1898,13 @@ void C2_MacroAssembler::integer_narrow_v(VectorRegister dst, BasicType dst_bt, i
}
}
} else if (src_bt == T_INT) {
// T_SHORT
vsetvli(t0, t0, Assembler::e16, Assembler::mf2);
vncvt_x_x_w(dst, src);
if (dst_bt == T_BYTE) {
vsetvli(t0, t0, Assembler::e8, Assembler::mf2);
vncvt_x_x_w(dst, dst);
}
// T_SHORT
vsetvli(t0, t0, Assembler::e16, Assembler::mf2);
vncvt_x_x_w(dst, src);
if (dst_bt == T_BYTE) {
vsetvli(t0, t0, Assembler::e8, Assembler::mf2);
vncvt_x_x_w(dst, dst);
}
} else if (src_bt == T_SHORT) {
vsetvli(t0, t0, Assembler::e8, Assembler::mf2);
vncvt_x_x_w(dst, src);
@@ -1920,8 +1920,6 @@ void C2_MacroAssembler::VFLOATCVT##_safe(VectorRegister dst, VectorRegister src)
}
VFCVT_SAFE(vfcvt_rtz_x_f_v);
VFCVT_SAFE(vfwcvt_rtz_x_f_v);
VFCVT_SAFE(vfncvt_rtz_x_f_w);
#undef VFCVT_SAFE

View File

@@ -242,8 +242,6 @@
VectorRegister src, BasicType src_bt);
void vfcvt_rtz_x_f_v_safe(VectorRegister dst, VectorRegister src);
void vfwcvt_rtz_x_f_v_safe(VectorRegister dst, VectorRegister src);
void vfncvt_rtz_x_f_w_safe(VectorRegister dst, VectorRegister src);
void extract_v(Register dst, VectorRegister src, BasicType bt, int idx, VectorRegister tmp);
void extract_fp_v(FloatRegister dst, VectorRegister src, BasicType bt, int idx, VectorRegister tmp);

View File

@@ -3199,13 +3199,12 @@ instruct vcvtStoX_fp_extend(vReg dst, vReg src) %{
effect(TEMP_DEF dst);
format %{ "vcvtStoX_fp_extend $dst, $src" %}
ins_encode %{
__ vsetvli_helper(T_SHORT, Matcher::vector_length(this), Assembler::mf2);
BasicType bt = Matcher::vector_element_basic_type(this);
__ integer_extend_v(as_VectorRegister($dst$$reg), (bt == T_FLOAT ? T_INT : T_LONG),
Matcher::vector_length(this), as_VectorRegister($src$$reg), T_SHORT);
__ vsetvli_helper(bt, Matcher::vector_length(this));
__ csrwi(CSR_FRM, C2_MacroAssembler::rne);
__ vfwcvt_f_x_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
if (Matcher::vector_element_basic_type(this) == T_DOUBLE) {
__ vsetvli_helper(T_FLOAT, Matcher::vector_length(this), Assembler::mf2);
__ vfwcvt_f_f_v(as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg));
}
__ vfcvt_f_x_v(as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg));
%}
ins_pipe(pipe_slow);
%}
@@ -3311,12 +3310,11 @@ instruct vcvtFtoX_narrow(vReg dst, vReg src, vRegMask_V0 v0) %{
effect(TEMP_DEF dst, TEMP v0);
format %{ "vcvtFtoX_narrow $dst, $src" %}
ins_encode %{
__ vsetvli_helper(T_SHORT, Matcher::vector_length(this), Assembler::mf2);
__ vfncvt_rtz_x_f_w_safe(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
if (Matcher::vector_element_basic_type(this) == T_BYTE) {
__ vsetvli_helper(T_BYTE, Matcher::vector_length(this), Assembler::mf2);
__ vncvt_x_x_w(as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg));
}
__ vsetvli_helper(T_FLOAT, Matcher::vector_length(this));
__ vfcvt_rtz_x_f_v_safe(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
BasicType bt = Matcher::vector_element_basic_type(this);
__ integer_narrow_v(as_VectorRegister($dst$$reg), bt, Matcher::vector_length(this),
as_VectorRegister($dst$$reg), T_INT);
%}
ins_pipe(pipe_slow);
%}
@@ -3339,8 +3337,11 @@ instruct vcvtFtoL(vReg dst, vReg src, vRegMask_V0 v0) %{
effect(TEMP_DEF dst, TEMP v0);
format %{ "vcvtFtoL $dst, $src" %}
ins_encode %{
__ vsetvli_helper(T_LONG, Matcher::vector_length(this));
__ vxor_vv(as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg));
__ vsetvli_helper(T_FLOAT, Matcher::vector_length(this), Assembler::mf2);
__ vfwcvt_rtz_x_f_v_safe(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
__ vmfeq_vv(as_VectorRegister($v0$$reg), as_VectorRegister($src$$reg), as_VectorRegister($src$$reg));
__ vfwcvt_rtz_x_f_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg), Assembler::v0_t);
%}
ins_pipe(pipe_slow);
%}
@@ -3368,8 +3369,11 @@ instruct vcvtDtoX_narrow(vReg dst, vReg src, vRegMask_V0 v0) %{
effect(TEMP_DEF dst, TEMP v0);
format %{ "vcvtDtoX_narrow $dst, $src" %}
ins_encode %{
__ vsetvli_helper(T_DOUBLE, Matcher::vector_length(this));
__ vmfeq_vv(as_VectorRegister($v0$$reg), as_VectorRegister($src$$reg), as_VectorRegister($src$$reg));
__ vsetvli_helper(T_INT, Matcher::vector_length(this), Assembler::mf2);
__ vfncvt_rtz_x_f_w_safe(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
__ vxor_vv(as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg));
__ vfncvt_rtz_x_f_w(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg), Assembler::v0_t);
BasicType bt = Matcher::vector_element_basic_type(this);
if (bt == T_BYTE || bt == T_SHORT) {
__ integer_narrow_v(as_VectorRegister($dst$$reg), bt, Matcher::vector_length(this),