@@ -765,7 +765,9 @@ instruct vnegI(vReg dst, vReg src) %{
765765 ins_cost(VEC_COST);
766766 format %{ "vrsub.vx $dst, $src, $src\t#@vnegI" %}
767767 ins_encode %{
768- __ vsetvli(t0, x0, Assembler::e32);
768+ BasicType bt = Matcher::vector_element_basic_type(this);
769+ Assembler::SEW sew = Assembler::elemtype_to_sew(bt);
770+ __ vsetvli(t0, x0, sew);
769771 __ vneg_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
770772 %}
771773 ins_pipe(pipe_slow);
@@ -809,7 +811,7 @@ instruct vnegD(vReg dst, vReg src) %{
809811// vector and reduction
810812
811813instruct reduce_andI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
812- predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
814+ predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
813815 Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
814816 Matcher::vector_element_basic_type(n->in(2)) == T_INT);
815817 match(Set dst (AndReductionV src1 src2));
@@ -845,7 +847,7 @@ instruct reduce_andL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
845847// vector or reduction
846848
847849instruct reduce_orI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
848- predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
850+ predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
849851 Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
850852 Matcher::vector_element_basic_type(n->in(2)) == T_INT);
851853 match(Set dst (OrReductionV src1 src2));
@@ -881,7 +883,7 @@ instruct reduce_orL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
881883// vector xor reduction
882884
883885instruct reduce_xorI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
884- predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
886+ predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
885887 Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
886888 Matcher::vector_element_basic_type(n->in(2)) == T_INT);
887889 match(Set dst (XorReductionV src1 src2));
@@ -917,7 +919,7 @@ instruct reduce_xorL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
917919// vector add reduction
918920
919921instruct reduce_addI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
920- predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
922+ predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
921923 Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
922924 Matcher::vector_element_basic_type(n->in(2)) == T_INT);
923925 match(Set dst (AddReductionVI src1 src2));
@@ -987,7 +989,7 @@ instruct reduce_addD(fRegD src1_dst, vReg src2, vReg tmp) %{
987989// vector integer max reduction
988990
989991instruct vreduce_maxI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
990- predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
992+ predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
991993 Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
992994 Matcher::vector_element_basic_type(n->in(2)) == T_INT);
993995 match(Set dst (MaxReductionV src1 src2));
@@ -1019,7 +1021,7 @@ instruct vreduce_maxL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
10191021// vector integer min reduction
10201022
10211023instruct vreduce_minI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
1022- predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
1024+ predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
10231025 Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
10241026 Matcher::vector_element_basic_type(n->in(2)) == T_INT);
10251027 match(Set dst (MinReductionV src1 src2));
0 commit comments