--- old/src/share/vm/opto/type.cpp 2015-04-23 08:27:59.173343300 -0700 +++ new/src/share/vm/opto/type.cpp 2015-04-23 08:27:58.971343300 -0700 @@ -68,16 +68,19 @@ { Bad, T_ILLEGAL, "vectord:", false, Op_RegD, relocInfo::none }, // VectorD { Bad, T_ILLEGAL, "vectorx:", false, 0, relocInfo::none }, // VectorX { Bad, T_ILLEGAL, "vectory:", false, 0, relocInfo::none }, // VectorY + { Bad, T_ILLEGAL, "vectorz:", false, 0, relocInfo::none }, // VectorZ #elif defined(PPC64) { Bad, T_ILLEGAL, "vectors:", false, 0, relocInfo::none }, // VectorS { Bad, T_ILLEGAL, "vectord:", false, Op_RegL, relocInfo::none }, // VectorD { Bad, T_ILLEGAL, "vectorx:", false, 0, relocInfo::none }, // VectorX { Bad, T_ILLEGAL, "vectory:", false, 0, relocInfo::none }, // VectorY + { Bad, T_ILLEGAL, "vectorz:", false, 0, relocInfo::none }, // VectorZ #else // all other { Bad, T_ILLEGAL, "vectors:", false, Op_VecS, relocInfo::none }, // VectorS { Bad, T_ILLEGAL, "vectord:", false, Op_VecD, relocInfo::none }, // VectorD { Bad, T_ILLEGAL, "vectorx:", false, Op_VecX, relocInfo::none }, // VectorX { Bad, T_ILLEGAL, "vectory:", false, Op_VecY, relocInfo::none }, // VectorY + { Bad, T_ILLEGAL, "vectorz:", false, Op_VecZ, relocInfo::none }, // VectorZ #endif { Bad, T_ADDRESS, "anyptr:", false, Op_RegP, relocInfo::none }, // AnyPtr { Bad, T_ADDRESS, "rawptr:", false, Op_RegP, relocInfo::none }, // RawPtr @@ -503,10 +506,14 @@ if (Matcher::vector_size_supported(T_FLOAT,8)) { TypeVect::VECTY = TypeVect::make(T_FLOAT,8); } + if (Matcher::vector_size_supported(T_FLOAT,16)) { + TypeVect::VECTZ = TypeVect::make(T_FLOAT,16); + } mreg2type[Op_VecS] = TypeVect::VECTS; mreg2type[Op_VecD] = TypeVect::VECTD; mreg2type[Op_VecX] = TypeVect::VECTX; mreg2type[Op_VecY] = TypeVect::VECTY; + mreg2type[Op_VecZ] = TypeVect::VECTZ; // Restore working type arena. current->set_type_arena(save); @@ -798,6 +805,7 @@ Bad, // VectorD - handled in v-call Bad, // VectorX - handled in v-call Bad, // VectorY - handled in v-call + Bad, // VectorZ - handled in v-call Bad, // AnyPtr - handled in v-call Bad, // RawPtr - handled in v-call @@ -2051,6 +2059,7 @@ const TypeVect *TypeVect::VECTD = NULL; // 64-bit vectors const TypeVect *TypeVect::VECTX = NULL; // 128-bit vectors const TypeVect *TypeVect::VECTY = NULL; // 256-bit vectors +const TypeVect *TypeVect::VECTZ = NULL; // 512-bit vectors //------------------------------make------------------------------------------- const TypeVect* TypeVect::make(const Type *elem, uint length) { @@ -2070,6 +2079,8 @@ return (TypeVect*)(new TypeVectX(elem, length))->hashcons(); case Op_VecY: return (TypeVect*)(new TypeVectY(elem, length))->hashcons(); + case Op_VecZ: + return (TypeVect*)(new TypeVectZ(elem, length))->hashcons(); } ShouldNotReachHere(); return NULL; @@ -2093,7 +2104,8 @@ case VectorS: case VectorD: case VectorX: - case VectorY: { // Meeting 2 vectors? + case VectorY: + case VectorZ: { // Meeting 2 vectors? const TypeVect* v = t->is_vect(); assert( base() == v->base(), ""); assert(length() == v->length(), ""); @@ -2151,6 +2163,8 @@ st->print("vectorx["); break; case VectorY: st->print("vectory["); break; + case VectorZ: + st->print("vectorz["); break; default: ShouldNotReachHere(); }