< prev index next >

src/share/vm/opto/vectornode.cpp

Print this page
rev 9026 : 8138583: aarch64: add support for vectorizing fabs/fneg
Reviewed-by: aph


  75     case T_CHAR:
  76     case T_SHORT:  return Op_MulVS;
  77     case T_INT:    return Op_MulVI;
  78     }
  79     ShouldNotReachHere();
  80   case Op_MulL:
  81     assert(bt == T_LONG, "must be");
  82     return Op_MulVL;
  83   case Op_MulF:
  84     assert(bt == T_FLOAT, "must be");
  85     return Op_MulVF;
  86   case Op_MulD:
  87     assert(bt == T_DOUBLE, "must be");
  88     return Op_MulVD;
  89   case Op_DivF:
  90     assert(bt == T_FLOAT, "must be");
  91     return Op_DivVF;
  92   case Op_DivD:
  93     assert(bt == T_DOUBLE, "must be");
  94     return Op_DivVD;












  95   case Op_SqrtD:
  96     assert(bt == T_DOUBLE, "must be");
  97     return Op_SqrtVD;
  98   case Op_LShiftI:
  99     switch (bt) {
 100     case T_BOOLEAN:
 101     case T_BYTE:   return Op_LShiftVB;
 102     case T_CHAR:
 103     case T_SHORT:  return Op_LShiftVS;
 104     case T_INT:    return Op_LShiftVI;
 105     }
 106     ShouldNotReachHere();
 107   case Op_LShiftL:
 108     assert(bt == T_LONG, "must be");
 109     return Op_LShiftVL;
 110   case Op_RShiftI:
 111     switch (bt) {
 112     case T_BOOLEAN:return Op_URShiftVB; // boolean is unsigned value
 113     case T_CHAR:   return Op_URShiftVS; // char is unsigned value
 114     case T_BYTE:   return Op_RShiftVB;


 262   case Op_AddVI: return new AddVINode(n1, n2, vt);
 263   case Op_AddVL: return new AddVLNode(n1, n2, vt);
 264   case Op_AddVF: return new AddVFNode(n1, n2, vt);
 265   case Op_AddVD: return new AddVDNode(n1, n2, vt);
 266 
 267   case Op_SubVB: return new SubVBNode(n1, n2, vt);
 268   case Op_SubVS: return new SubVSNode(n1, n2, vt);
 269   case Op_SubVI: return new SubVINode(n1, n2, vt);
 270   case Op_SubVL: return new SubVLNode(n1, n2, vt);
 271   case Op_SubVF: return new SubVFNode(n1, n2, vt);
 272   case Op_SubVD: return new SubVDNode(n1, n2, vt);
 273 
 274   case Op_MulVS: return new MulVSNode(n1, n2, vt);
 275   case Op_MulVI: return new MulVINode(n1, n2, vt);
 276   case Op_MulVL: return new MulVLNode(n1, n2, vt);
 277   case Op_MulVF: return new MulVFNode(n1, n2, vt);
 278   case Op_MulVD: return new MulVDNode(n1, n2, vt);
 279 
 280   case Op_DivVF: return new DivVFNode(n1, n2, vt);
 281   case Op_DivVD: return new DivVDNode(n1, n2, vt);






 282 
 283   // Currently only supports double precision sqrt
 284   case Op_SqrtVD: return new SqrtVDNode(n1, vt);
 285 
 286   case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
 287   case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
 288   case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);
 289   case Op_LShiftVL: return new LShiftVLNode(n1, n2, vt);
 290 
 291   case Op_RShiftVB: return new RShiftVBNode(n1, n2, vt);
 292   case Op_RShiftVS: return new RShiftVSNode(n1, n2, vt);
 293   case Op_RShiftVI: return new RShiftVINode(n1, n2, vt);
 294   case Op_RShiftVL: return new RShiftVLNode(n1, n2, vt);
 295 
 296   case Op_URShiftVB: return new URShiftVBNode(n1, n2, vt);
 297   case Op_URShiftVS: return new URShiftVSNode(n1, n2, vt);
 298   case Op_URShiftVI: return new URShiftVINode(n1, n2, vt);
 299   case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
 300 
 301   case Op_AndV: return new AndVNode(n1, n2, vt);




  75     case T_CHAR:
  76     case T_SHORT:  return Op_MulVS;
  77     case T_INT:    return Op_MulVI;
  78     }
  79     ShouldNotReachHere();
  80   case Op_MulL:
  81     assert(bt == T_LONG, "must be");
  82     return Op_MulVL;
  83   case Op_MulF:
  84     assert(bt == T_FLOAT, "must be");
  85     return Op_MulVF;
  86   case Op_MulD:
  87     assert(bt == T_DOUBLE, "must be");
  88     return Op_MulVD;
  89   case Op_DivF:
  90     assert(bt == T_FLOAT, "must be");
  91     return Op_DivVF;
  92   case Op_DivD:
  93     assert(bt == T_DOUBLE, "must be");
  94     return Op_DivVD;
  95   case Op_AbsF:
  96     assert(bt == T_FLOAT, "must be");
  97     return Op_AbsVF;
  98   case Op_AbsD:
  99     assert(bt == T_DOUBLE, "must be");
 100     return Op_AbsVD;
 101   case Op_NegF:
 102     assert(bt == T_FLOAT, "must be");
 103     return Op_NegVF;
 104   case Op_NegD:
 105     assert(bt == T_DOUBLE, "must be");
 106     return Op_NegVD;
 107   case Op_SqrtD:
 108     assert(bt == T_DOUBLE, "must be");
 109     return Op_SqrtVD;
 110   case Op_LShiftI:
 111     switch (bt) {
 112     case T_BOOLEAN:
 113     case T_BYTE:   return Op_LShiftVB;
 114     case T_CHAR:
 115     case T_SHORT:  return Op_LShiftVS;
 116     case T_INT:    return Op_LShiftVI;
 117     }
 118     ShouldNotReachHere();
 119   case Op_LShiftL:
 120     assert(bt == T_LONG, "must be");
 121     return Op_LShiftVL;
 122   case Op_RShiftI:
 123     switch (bt) {
 124     case T_BOOLEAN:return Op_URShiftVB; // boolean is unsigned value
 125     case T_CHAR:   return Op_URShiftVS; // char is unsigned value
 126     case T_BYTE:   return Op_RShiftVB;


 274   case Op_AddVI: return new AddVINode(n1, n2, vt);
 275   case Op_AddVL: return new AddVLNode(n1, n2, vt);
 276   case Op_AddVF: return new AddVFNode(n1, n2, vt);
 277   case Op_AddVD: return new AddVDNode(n1, n2, vt);
 278 
 279   case Op_SubVB: return new SubVBNode(n1, n2, vt);
 280   case Op_SubVS: return new SubVSNode(n1, n2, vt);
 281   case Op_SubVI: return new SubVINode(n1, n2, vt);
 282   case Op_SubVL: return new SubVLNode(n1, n2, vt);
 283   case Op_SubVF: return new SubVFNode(n1, n2, vt);
 284   case Op_SubVD: return new SubVDNode(n1, n2, vt);
 285 
 286   case Op_MulVS: return new MulVSNode(n1, n2, vt);
 287   case Op_MulVI: return new MulVINode(n1, n2, vt);
 288   case Op_MulVL: return new MulVLNode(n1, n2, vt);
 289   case Op_MulVF: return new MulVFNode(n1, n2, vt);
 290   case Op_MulVD: return new MulVDNode(n1, n2, vt);
 291 
 292   case Op_DivVF: return new DivVFNode(n1, n2, vt);
 293   case Op_DivVD: return new DivVDNode(n1, n2, vt);
 294 
 295   case Op_AbsVF: return new AbsVFNode(n1, vt);
 296   case Op_AbsVD: return new AbsVDNode(n1, vt);
 297 
 298   case Op_NegVF: return new NegVFNode(n1, vt);
 299   case Op_NegVD: return new NegVDNode(n1, vt);
 300 
 301   // Currently only supports double precision sqrt
 302   case Op_SqrtVD: return new SqrtVDNode(n1, vt);
 303 
 304   case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
 305   case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
 306   case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);
 307   case Op_LShiftVL: return new LShiftVLNode(n1, n2, vt);
 308 
 309   case Op_RShiftVB: return new RShiftVBNode(n1, n2, vt);
 310   case Op_RShiftVS: return new RShiftVSNode(n1, n2, vt);
 311   case Op_RShiftVI: return new RShiftVINode(n1, n2, vt);
 312   case Op_RShiftVL: return new RShiftVLNode(n1, n2, vt);
 313 
 314   case Op_URShiftVB: return new URShiftVBNode(n1, n2, vt);
 315   case Op_URShiftVS: return new URShiftVSNode(n1, n2, vt);
 316   case Op_URShiftVI: return new URShiftVINode(n1, n2, vt);
 317   case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
 318 
 319   case Op_AndV: return new AndVNode(n1, n2, vt);


< prev index next >