@@ -6602,7 +6602,7 @@ instruct vcastBtoX(vec dst, vec src) %{
66026602%}
66036603
66046604instruct castStoX(vec dst, vec src, rRegP scratch) %{
6605- predicate(UseAVX <= 2 &&
6605+ predicate(( UseAVX <= 2 || !VM_Version::supports_avx512vlbw()) &&
66066606 vector_length(n->in(1)) <= 8 && // src
66076607 vector_element_basic_type(n) == T_BYTE);
66086608 effect(TEMP scratch);
@@ -6618,7 +6618,7 @@ instruct castStoX(vec dst, vec src, rRegP scratch) %{
66186618%}
66196619
66206620instruct vcastStoX(vec dst, vec src, vec vtmp, rRegP scratch) %{
6621- predicate(UseAVX <= 2 &&
6621+ predicate(( UseAVX <= 2 || !VM_Version::supports_avx512vlbw()) &&
66226622 vector_length(n->in(1)) == 16 && // src
66236623 vector_element_basic_type(n) == T_BYTE);
66246624 effect(TEMP dst, TEMP vtmp, TEMP scratch);
@@ -6636,7 +6636,7 @@ instruct vcastStoX(vec dst, vec src, vec vtmp, rRegP scratch) %{
66366636%}
66376637
66386638instruct vcastStoX_evex(vec dst, vec src) %{
6639- predicate(UseAVX > 2 ||
6639+ predicate(( UseAVX > 2 && VM_Version::supports_avx512vlbw()) ||
66406640 (vector_length_in_bytes(n) >= vector_length_in_bytes(n->in(1)))); // dst >= src
66416641 match(Set dst (VectorCastS2X src));
66426642 format %{ "vector_cast_s2x $dst,$src\t!" %}
@@ -6751,13 +6751,13 @@ instruct vcastItoX_evex(vec dst, vec src) %{
67516751 __ evpmovdw($dst$$XMMRegister, $src$$XMMRegister, src_vlen_enc);
67526752 break;
67536753 case T_FLOAT:
6754- __ vcvtdq2ps($dst$$XMMRegister, $dst $$XMMRegister, dst_vlen_enc);
6754+ __ vcvtdq2ps($dst$$XMMRegister, $src $$XMMRegister, dst_vlen_enc);
67556755 break;
67566756 case T_LONG:
67576757 __ vpmovsxdq($dst$$XMMRegister, $src$$XMMRegister, dst_vlen_enc);
67586758 break;
67596759 case T_DOUBLE:
6760- __ vcvtdq2pd($dst$$XMMRegister, $dst $$XMMRegister, dst_vlen_enc);
6760+ __ vcvtdq2pd($dst$$XMMRegister, $src $$XMMRegister, dst_vlen_enc);
67616761 break;
67626762 default:
67636763 ShouldNotReachHere();
0 commit comments