< prev index next >

src/hotspot/share/opto/vectornode.cpp

Print this page
rev 47825 : Support vectorization of sqrt for float


  96     assert(bt == T_DOUBLE, "must be");
  97     return Op_CMoveVD;
  98   case Op_DivF:
  99     assert(bt == T_FLOAT, "must be");
 100     return Op_DivVF;
 101   case Op_DivD:
 102     assert(bt == T_DOUBLE, "must be");
 103     return Op_DivVD;
 104   case Op_AbsF:
 105     assert(bt == T_FLOAT, "must be");
 106     return Op_AbsVF;
 107   case Op_AbsD:
 108     assert(bt == T_DOUBLE, "must be");
 109     return Op_AbsVD;
 110   case Op_NegF:
 111     assert(bt == T_FLOAT, "must be");
 112     return Op_NegVF;
 113   case Op_NegD:
 114     assert(bt == T_DOUBLE, "must be");
 115     return Op_NegVD;



 116   case Op_SqrtD:
 117     assert(bt == T_DOUBLE, "must be");
 118     return Op_SqrtVD;
 119   case Op_LShiftI:
 120     switch (bt) {
 121     case T_BOOLEAN:
 122     case T_BYTE:   return Op_LShiftVB;
 123     case T_CHAR:
 124     case T_SHORT:  return Op_LShiftVS;
 125     case T_INT:    return Op_LShiftVI;
 126       default:       ShouldNotReachHere(); return 0;
 127     }
 128   case Op_LShiftL:
 129     assert(bt == T_LONG, "must be");
 130     return Op_LShiftVL;
 131   case Op_RShiftI:
 132     switch (bt) {
 133     case T_BOOLEAN:return Op_URShiftVB; // boolean is unsigned value
 134     case T_CHAR:   return Op_URShiftVS; // char is unsigned value
 135     case T_BYTE:   return Op_RShiftVB;


 299   case Op_SubVI: return new SubVINode(n1, n2, vt);
 300   case Op_SubVL: return new SubVLNode(n1, n2, vt);
 301   case Op_SubVF: return new SubVFNode(n1, n2, vt);
 302   case Op_SubVD: return new SubVDNode(n1, n2, vt);
 303 
 304   case Op_MulVS: return new MulVSNode(n1, n2, vt);
 305   case Op_MulVI: return new MulVINode(n1, n2, vt);
 306   case Op_MulVL: return new MulVLNode(n1, n2, vt);
 307   case Op_MulVF: return new MulVFNode(n1, n2, vt);
 308   case Op_MulVD: return new MulVDNode(n1, n2, vt);
 309 
 310   case Op_DivVF: return new DivVFNode(n1, n2, vt);
 311   case Op_DivVD: return new DivVDNode(n1, n2, vt);
 312 
 313   case Op_AbsVF: return new AbsVFNode(n1, vt);
 314   case Op_AbsVD: return new AbsVDNode(n1, vt);
 315 
 316   case Op_NegVF: return new NegVFNode(n1, vt);
 317   case Op_NegVD: return new NegVDNode(n1, vt);
 318 
 319   // Currently only supports double precision sqrt
 320   case Op_SqrtVD: return new SqrtVDNode(n1, vt);
 321 
 322   case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
 323   case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
 324   case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);
 325   case Op_LShiftVL: return new LShiftVLNode(n1, n2, vt);
 326 
 327   case Op_RShiftVB: return new RShiftVBNode(n1, n2, vt);
 328   case Op_RShiftVS: return new RShiftVSNode(n1, n2, vt);
 329   case Op_RShiftVI: return new RShiftVINode(n1, n2, vt);
 330   case Op_RShiftVL: return new RShiftVLNode(n1, n2, vt);
 331 
 332   case Op_URShiftVB: return new URShiftVBNode(n1, n2, vt);
 333   case Op_URShiftVS: return new URShiftVSNode(n1, n2, vt);
 334   case Op_URShiftVI: return new URShiftVINode(n1, n2, vt);
 335   case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
 336 
 337   case Op_AndV: return new AndVNode(n1, n2, vt);
 338   case Op_OrV:  return new OrVNode (n1, n2, vt);
 339   case Op_XorV: return new XorVNode(n1, n2, vt);




  96     assert(bt == T_DOUBLE, "must be");
  97     return Op_CMoveVD;
  98   case Op_DivF:
  99     assert(bt == T_FLOAT, "must be");
 100     return Op_DivVF;
 101   case Op_DivD:
 102     assert(bt == T_DOUBLE, "must be");
 103     return Op_DivVD;
 104   case Op_AbsF:
 105     assert(bt == T_FLOAT, "must be");
 106     return Op_AbsVF;
 107   case Op_AbsD:
 108     assert(bt == T_DOUBLE, "must be");
 109     return Op_AbsVD;
 110   case Op_NegF:
 111     assert(bt == T_FLOAT, "must be");
 112     return Op_NegVF;
 113   case Op_NegD:
 114     assert(bt == T_DOUBLE, "must be");
 115     return Op_NegVD;
 116   case Op_SqrtF:
 117     assert(bt == T_FLOAT, "must be");
 118     return Op_SqrtVF;
 119   case Op_SqrtD:
 120     assert(bt == T_DOUBLE, "must be");
 121     return Op_SqrtVD;
 122   case Op_LShiftI:
 123     switch (bt) {
 124     case T_BOOLEAN:
 125     case T_BYTE:   return Op_LShiftVB;
 126     case T_CHAR:
 127     case T_SHORT:  return Op_LShiftVS;
 128     case T_INT:    return Op_LShiftVI;
 129       default:       ShouldNotReachHere(); return 0;
 130     }
 131   case Op_LShiftL:
 132     assert(bt == T_LONG, "must be");
 133     return Op_LShiftVL;
 134   case Op_RShiftI:
 135     switch (bt) {
 136     case T_BOOLEAN:return Op_URShiftVB; // boolean is unsigned value
 137     case T_CHAR:   return Op_URShiftVS; // char is unsigned value
 138     case T_BYTE:   return Op_RShiftVB;


 302   case Op_SubVI: return new SubVINode(n1, n2, vt);
 303   case Op_SubVL: return new SubVLNode(n1, n2, vt);
 304   case Op_SubVF: return new SubVFNode(n1, n2, vt);
 305   case Op_SubVD: return new SubVDNode(n1, n2, vt);
 306 
 307   case Op_MulVS: return new MulVSNode(n1, n2, vt);
 308   case Op_MulVI: return new MulVINode(n1, n2, vt);
 309   case Op_MulVL: return new MulVLNode(n1, n2, vt);
 310   case Op_MulVF: return new MulVFNode(n1, n2, vt);
 311   case Op_MulVD: return new MulVDNode(n1, n2, vt);
 312 
 313   case Op_DivVF: return new DivVFNode(n1, n2, vt);
 314   case Op_DivVD: return new DivVDNode(n1, n2, vt);
 315 
 316   case Op_AbsVF: return new AbsVFNode(n1, vt);
 317   case Op_AbsVD: return new AbsVDNode(n1, vt);
 318 
 319   case Op_NegVF: return new NegVFNode(n1, vt);
 320   case Op_NegVD: return new NegVDNode(n1, vt);
 321 
 322   case Op_SqrtVF: return new SqrtVFNode(n1, vt);
 323   case Op_SqrtVD: return new SqrtVDNode(n1, vt);
 324 
 325   case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
 326   case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
 327   case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);
 328   case Op_LShiftVL: return new LShiftVLNode(n1, n2, vt);
 329 
 330   case Op_RShiftVB: return new RShiftVBNode(n1, n2, vt);
 331   case Op_RShiftVS: return new RShiftVSNode(n1, n2, vt);
 332   case Op_RShiftVI: return new RShiftVINode(n1, n2, vt);
 333   case Op_RShiftVL: return new RShiftVLNode(n1, n2, vt);
 334 
 335   case Op_URShiftVB: return new URShiftVBNode(n1, n2, vt);
 336   case Op_URShiftVS: return new URShiftVSNode(n1, n2, vt);
 337   case Op_URShiftVI: return new URShiftVINode(n1, n2, vt);
 338   case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
 339 
 340   case Op_AndV: return new AndVNode(n1, n2, vt);
 341   case Op_OrV:  return new OrVNode (n1, n2, vt);
 342   case Op_XorV: return new XorVNode(n1, n2, vt);


< prev index next >