< prev index next >

src/hotspot/share/opto/vectornode.cpp

Print this page
rev 49218 : Add support for vector popcount


 105     assert(bt == T_DOUBLE, "must be");
 106     return Op_DivVD;
 107   case Op_AbsF:
 108     assert(bt == T_FLOAT, "must be");
 109     return Op_AbsVF;
 110   case Op_AbsD:
 111     assert(bt == T_DOUBLE, "must be");
 112     return Op_AbsVD;
 113   case Op_NegF:
 114     assert(bt == T_FLOAT, "must be");
 115     return Op_NegVF;
 116   case Op_NegD:
 117     assert(bt == T_DOUBLE, "must be");
 118     return Op_NegVD;
 119   case Op_SqrtF:
 120     assert(bt == T_FLOAT, "must be");
 121     return Op_SqrtVF;
 122   case Op_SqrtD:
 123     assert(bt == T_DOUBLE, "must be");
 124     return Op_SqrtVD;







 125   case Op_LShiftI:
 126     switch (bt) {
 127     case T_BOOLEAN:
 128     case T_BYTE:   return Op_LShiftVB;
 129     case T_CHAR:
 130     case T_SHORT:  return Op_LShiftVS;
 131     case T_INT:    return Op_LShiftVI;
 132       default:       ShouldNotReachHere(); return 0;
 133     }
 134   case Op_LShiftL:
 135     assert(bt == T_LONG, "must be");
 136     return Op_LShiftVL;
 137   case Op_RShiftI:
 138     switch (bt) {
 139     case T_BOOLEAN:return Op_URShiftVB; // boolean is unsigned value
 140     case T_CHAR:   return Op_URShiftVS; // char is unsigned value
 141     case T_BYTE:   return Op_RShiftVB;
 142     case T_SHORT:  return Op_RShiftVS;
 143     case T_INT:    return Op_RShiftVI;
 144     default:       ShouldNotReachHere(); return 0;


 307   case Op_SubVF: return new SubVFNode(n1, n2, vt);
 308   case Op_SubVD: return new SubVDNode(n1, n2, vt);
 309 
 310   case Op_MulVS: return new MulVSNode(n1, n2, vt);
 311   case Op_MulVI: return new MulVINode(n1, n2, vt);
 312   case Op_MulVL: return new MulVLNode(n1, n2, vt);
 313   case Op_MulVF: return new MulVFNode(n1, n2, vt);
 314   case Op_MulVD: return new MulVDNode(n1, n2, vt);
 315 
 316   case Op_DivVF: return new DivVFNode(n1, n2, vt);
 317   case Op_DivVD: return new DivVDNode(n1, n2, vt);
 318 
 319   case Op_AbsVF: return new AbsVFNode(n1, vt);
 320   case Op_AbsVD: return new AbsVDNode(n1, vt);
 321 
 322   case Op_NegVF: return new NegVFNode(n1, vt);
 323   case Op_NegVD: return new NegVDNode(n1, vt);
 324 
 325   case Op_SqrtVF: return new SqrtVFNode(n1, vt);
 326   case Op_SqrtVD: return new SqrtVDNode(n1, vt);


 327 
 328   case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
 329   case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
 330   case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);
 331   case Op_LShiftVL: return new LShiftVLNode(n1, n2, vt);
 332 
 333   case Op_RShiftVB: return new RShiftVBNode(n1, n2, vt);
 334   case Op_RShiftVS: return new RShiftVSNode(n1, n2, vt);
 335   case Op_RShiftVI: return new RShiftVINode(n1, n2, vt);
 336   case Op_RShiftVL: return new RShiftVLNode(n1, n2, vt);
 337 
 338   case Op_URShiftVB: return new URShiftVBNode(n1, n2, vt);
 339   case Op_URShiftVS: return new URShiftVSNode(n1, n2, vt);
 340   case Op_URShiftVI: return new URShiftVINode(n1, n2, vt);
 341   case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
 342 
 343   case Op_AndV: return new AndVNode(n1, n2, vt);
 344   case Op_OrV:  return new OrVNode (n1, n2, vt);
 345   case Op_XorV: return new XorVNode(n1, n2, vt);
 346   default:




 105     assert(bt == T_DOUBLE, "must be");
 106     return Op_DivVD;
 107   case Op_AbsF:
 108     assert(bt == T_FLOAT, "must be");
 109     return Op_AbsVF;
 110   case Op_AbsD:
 111     assert(bt == T_DOUBLE, "must be");
 112     return Op_AbsVD;
 113   case Op_NegF:
 114     assert(bt == T_FLOAT, "must be");
 115     return Op_NegVF;
 116   case Op_NegD:
 117     assert(bt == T_DOUBLE, "must be");
 118     return Op_NegVD;
 119   case Op_SqrtF:
 120     assert(bt == T_FLOAT, "must be");
 121     return Op_SqrtVF;
 122   case Op_SqrtD:
 123     assert(bt == T_DOUBLE, "must be");
 124     return Op_SqrtVD;
 125   case Op_PopCountI:
 126     if (bt == T_INT) {
 127       return Op_PopCountVI;
 128     }
 129     // Unimplemented for subword types since bit count changes
 130     // depending on size of lane (and sign bit).
 131     return 0;
 132   case Op_LShiftI:
 133     switch (bt) {
 134     case T_BOOLEAN:
 135     case T_BYTE:   return Op_LShiftVB;
 136     case T_CHAR:
 137     case T_SHORT:  return Op_LShiftVS;
 138     case T_INT:    return Op_LShiftVI;
 139       default:       ShouldNotReachHere(); return 0;
 140     }
 141   case Op_LShiftL:
 142     assert(bt == T_LONG, "must be");
 143     return Op_LShiftVL;
 144   case Op_RShiftI:
 145     switch (bt) {
 146     case T_BOOLEAN:return Op_URShiftVB; // boolean is unsigned value
 147     case T_CHAR:   return Op_URShiftVS; // char is unsigned value
 148     case T_BYTE:   return Op_RShiftVB;
 149     case T_SHORT:  return Op_RShiftVS;
 150     case T_INT:    return Op_RShiftVI;
 151     default:       ShouldNotReachHere(); return 0;


 314   case Op_SubVF: return new SubVFNode(n1, n2, vt);
 315   case Op_SubVD: return new SubVDNode(n1, n2, vt);
 316 
 317   case Op_MulVS: return new MulVSNode(n1, n2, vt);
 318   case Op_MulVI: return new MulVINode(n1, n2, vt);
 319   case Op_MulVL: return new MulVLNode(n1, n2, vt);
 320   case Op_MulVF: return new MulVFNode(n1, n2, vt);
 321   case Op_MulVD: return new MulVDNode(n1, n2, vt);
 322 
 323   case Op_DivVF: return new DivVFNode(n1, n2, vt);
 324   case Op_DivVD: return new DivVDNode(n1, n2, vt);
 325 
 326   case Op_AbsVF: return new AbsVFNode(n1, vt);
 327   case Op_AbsVD: return new AbsVDNode(n1, vt);
 328 
 329   case Op_NegVF: return new NegVFNode(n1, vt);
 330   case Op_NegVD: return new NegVDNode(n1, vt);
 331 
 332   case Op_SqrtVF: return new SqrtVFNode(n1, vt);
 333   case Op_SqrtVD: return new SqrtVDNode(n1, vt);
 334 
 335   case Op_PopCountVI: return new PopCountVINode(n1, vt);
 336 
 337   case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
 338   case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
 339   case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);
 340   case Op_LShiftVL: return new LShiftVLNode(n1, n2, vt);
 341 
 342   case Op_RShiftVB: return new RShiftVBNode(n1, n2, vt);
 343   case Op_RShiftVS: return new RShiftVSNode(n1, n2, vt);
 344   case Op_RShiftVI: return new RShiftVINode(n1, n2, vt);
 345   case Op_RShiftVL: return new RShiftVLNode(n1, n2, vt);
 346 
 347   case Op_URShiftVB: return new URShiftVBNode(n1, n2, vt);
 348   case Op_URShiftVS: return new URShiftVSNode(n1, n2, vt);
 349   case Op_URShiftVI: return new URShiftVINode(n1, n2, vt);
 350   case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
 351 
 352   case Op_AndV: return new AndVNode(n1, n2, vt);
 353   case Op_OrV:  return new OrVNode (n1, n2, vt);
 354   case Op_XorV: return new XorVNode(n1, n2, vt);
 355   default:


< prev index next >