@@ -7235,18 +7235,28 @@ instruct vxor_mem(vec dst, vec src, memory mem) %{
72357235// --------------------------------- VectorCast --------------------------------------
72367236
72377237instruct vcastBtoX(vec dst, vec src) %{
7238+ predicate(VM_Version::supports_avx512vl() || Matcher::vector_element_basic_type(n) != T_DOUBLE);
72387239 match(Set dst (VectorCastB2X src));
72397240 format %{ "vector_cast_b2x $dst,$src\t!" %}
72407241 ins_encode %{
7241- assert(UseAVX > 0, "required");
7242-
72437242 BasicType to_elem_bt = Matcher::vector_element_basic_type(this);
72447243 int vlen_enc = vector_length_encoding(this);
72457244 __ vconvert_b2x(to_elem_bt, $dst$$XMMRegister, $src$$XMMRegister, vlen_enc);
72467245 %}
72477246 ins_pipe( pipe_slow );
72487247%}
72497248
7249+ instruct vcastBtoD(legVec dst, legVec src) %{
7250+ predicate(!VM_Version::supports_avx512vl() && Matcher::vector_element_basic_type(n) == T_DOUBLE);
7251+ match(Set dst (VectorCastB2X src));
7252+ format %{ "vector_cast_b2x $dst,$src\t!" %}
7253+ ins_encode %{
7254+ int vlen_enc = vector_length_encoding(this);
7255+ __ vconvert_b2x(T_DOUBLE, $dst$$XMMRegister, $src$$XMMRegister, vlen_enc);
7256+ %}
7257+ ins_pipe( pipe_slow );
7258+ %}
7259+
72507260instruct castStoX(vec dst, vec src) %{
72517261 predicate((UseAVX <= 2 || !VM_Version::supports_avx512vlbw()) &&
72527262 Matcher::vector_length(n->in(1)) <= 8 && // src
0 commit comments