@@ -1093,23 +1093,27 @@ VectorStoreMaskNode* VectorStoreMaskNode::make(PhaseGVN& gvn, Node* in, BasicTyp
10931093VectorCastNode* VectorCastNode::make (int vopc, Node* n1, BasicType bt, uint vlen) {
10941094 const TypeVect* vt = TypeVect::make (bt, vlen);
10951095 switch (vopc) {
1096- case Op_VectorCastB2X: return new VectorCastB2XNode (n1, vt);
1097- case Op_VectorCastS2X: return new VectorCastS2XNode (n1, vt);
1098- case Op_VectorCastI2X: return new VectorCastI2XNode (n1, vt);
1099- case Op_VectorCastL2X: return new VectorCastL2XNode (n1, vt);
1100- case Op_VectorCastF2X: return new VectorCastF2XNode (n1, vt);
1101- case Op_VectorCastD2X: return new VectorCastD2XNode (n1, vt);
1096+ case Op_VectorCastB2X: return new VectorCastB2XNode (n1, vt);
1097+ case Op_VectorCastS2X: return new VectorCastS2XNode (n1, vt);
1098+ case Op_VectorCastI2X: return new VectorCastI2XNode (n1, vt);
1099+ case Op_VectorCastL2X: return new VectorCastL2XNode (n1, vt);
1100+ case Op_VectorCastF2X: return new VectorCastF2XNode (n1, vt);
1101+ case Op_VectorCastD2X: return new VectorCastD2XNode (n1, vt);
1102+ case Op_VectorUCastB2X: return new VectorUCastB2XNode (n1, vt);
1103+ case Op_VectorUCastS2X: return new VectorUCastS2XNode (n1, vt);
1104+ case Op_VectorUCastI2X: return new VectorUCastI2XNode (n1, vt);
11021105 default :
11031106 assert (false , " unknown node: %s" , NodeClassNames[vopc]);
11041107 return NULL ;
11051108 }
11061109}
11071110
1108- int VectorCastNode::opcode (BasicType bt) {
1111+ int VectorCastNode::opcode (BasicType bt, bool is_signed) {
1112+ assert ((is_integral_type (bt) && bt != T_LONG) || is_signed, " " );
11091113 switch (bt) {
1110- case T_BYTE: return Op_VectorCastB2X;
1111- case T_SHORT: return Op_VectorCastS2X;
1112- case T_INT: return Op_VectorCastI2X;
1114+ case T_BYTE: return is_signed ? Op_VectorCastB2X : Op_VectorUCastB2X ;
1115+ case T_SHORT: return is_signed ? Op_VectorCastS2X : Op_VectorUCastS2X ;
1116+ case T_INT: return is_signed ? Op_VectorCastI2X : Op_VectorUCastI2X ;
11131117 case T_LONG: return Op_VectorCastL2X;
11141118 case T_FLOAT: return Op_VectorCastF2X;
11151119 case T_DOUBLE: return Op_VectorCastD2X;
0 commit comments