mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
8316933: RISC-V: compiler/vectorapi/VectorCastShape128Test.java fails when using RVV
Backport-of: e39197ec62
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user