< prev index next >

src/hotspot/share/opto/vectornode.hpp

Print this page




  50     init_req(2, n2);
  51     init_req(3, n3);
  52   }
  53 
  54   const TypeVect* vect_type() const { return type()->is_vect(); }
  55   uint length() const { return vect_type()->length(); } // Vector length
  56   uint length_in_bytes() const { return vect_type()->length_in_bytes(); }
  57 
  58   virtual int Opcode() const;
  59 
  60   virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(vect_type()->length_in_bytes()); }
  61 
  62   static VectorNode* scalar2vector(Node* s, uint vlen, const Type* opd_t);
  63   static VectorNode* shift_count(Node* shift, Node* cnt, uint vlen, BasicType bt);
  64   static VectorNode* make(int opc, Node* n1, Node* n2, uint vlen, BasicType bt);
  65   static VectorNode* make(int opc, Node* n1, Node* n2, Node* n3, uint vlen, BasicType bt);
  66 
  67   static int  opcode(int opc, BasicType bt);
  68   static bool implemented(int opc, uint vlen, BasicType bt);
  69   static bool is_shift(Node* n);



  70   static bool is_invariant_vector(Node* n);
  71   // [Start, end) half-open range defining which operands are vectors
  72   static void vector_operands(Node* n, uint* start, uint* end);
  73 };
  74 
  75 //===========================Vector=ALU=Operations=============================
  76 
  77 //------------------------------AddVBNode--------------------------------------
  78 // Vector add byte
  79 class AddVBNode : public VectorNode {
  80  public:
  81   AddVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
  82   virtual int Opcode() const;
  83 };
  84 
  85 //------------------------------AddVSNode--------------------------------------
  86 // Vector add char/short
  87 class AddVSNode : public VectorNode {
  88  public:
  89   AddVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}


 242 class MulVLNode : public VectorNode {
 243 public:
 244   MulVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1, in2, vt) {}
 245   virtual int Opcode() const;
 246 };
 247 
 248 //------------------------------MulVFNode--------------------------------------
 249 // Vector multiply float
 250 class MulVFNode : public VectorNode {
 251 public:
 252   MulVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1, in2, vt) {}
 253   virtual int Opcode() const;
 254 };
 255 
 256 //------------------------------MulVDNode--------------------------------------
 257 // Vector multiply double
 258 class MulVDNode : public VectorNode {
 259 public:
 260   MulVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1, in2, vt) {}
 261   virtual int Opcode() const;








 262 };
 263 
 264 //------------------------------FmaVDNode--------------------------------------
 265 // Vector multiply double
 266 class FmaVDNode : public VectorNode {
 267 public:
 268   FmaVDNode(Node* in1, Node* in2, Node* in3, const TypeVect* vt) : VectorNode(in1, in2, in3, vt) {}
 269   virtual int Opcode() const;
 270 };
 271 
 272 //------------------------------FmaVFNode--------------------------------------
 273 // Vector multiply float
 274 class FmaVFNode : public VectorNode {
 275 public:
 276   FmaVFNode(Node* in1, Node* in2, Node* in3, const TypeVect* vt) : VectorNode(in1, in2, in3, vt) {}
 277   virtual int Opcode() const;
 278 };
 279 
 280 //------------------------------CMoveVFNode--------------------------------------
 281 // Vector float conditional move




  50     init_req(2, n2);
  51     init_req(3, n3);
  52   }
  53 
  54   const TypeVect* vect_type() const { return type()->is_vect(); }
  55   uint length() const { return vect_type()->length(); } // Vector length
  56   uint length_in_bytes() const { return vect_type()->length_in_bytes(); }
  57 
  58   virtual int Opcode() const;
  59 
  60   virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(vect_type()->length_in_bytes()); }
  61 
  62   static VectorNode* scalar2vector(Node* s, uint vlen, const Type* opd_t);
  63   static VectorNode* shift_count(Node* shift, Node* cnt, uint vlen, BasicType bt);
  64   static VectorNode* make(int opc, Node* n1, Node* n2, uint vlen, BasicType bt);
  65   static VectorNode* make(int opc, Node* n1, Node* n2, Node* n3, uint vlen, BasicType bt);
  66 
  67   static int  opcode(int opc, BasicType bt);
  68   static bool implemented(int opc, uint vlen, BasicType bt);
  69   static bool is_shift(Node* n);
  70   static bool is_type_transition_short_to_int(Node* n);
  71   static bool is_type_transition_to_int(Node* n);
  72   static bool is_muladds2i(Node* n);
  73   static bool is_invariant_vector(Node* n);
  74   // [Start, end) half-open range defining which operands are vectors
  75   static void vector_operands(Node* n, uint* start, uint* end);
  76 };
  77 
  78 //===========================Vector=ALU=Operations=============================
  79 
  80 //------------------------------AddVBNode--------------------------------------
  81 // Vector add byte
  82 class AddVBNode : public VectorNode {
  83  public:
  84   AddVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
  85   virtual int Opcode() const;
  86 };
  87 
  88 //------------------------------AddVSNode--------------------------------------
  89 // Vector add char/short
  90 class AddVSNode : public VectorNode {
  91  public:
  92   AddVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}


 245 class MulVLNode : public VectorNode {
 246 public:
 247   MulVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1, in2, vt) {}
 248   virtual int Opcode() const;
 249 };
 250 
 251 //------------------------------MulVFNode--------------------------------------
 252 // Vector multiply float
 253 class MulVFNode : public VectorNode {
 254 public:
 255   MulVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1, in2, vt) {}
 256   virtual int Opcode() const;
 257 };
 258 
 259 //------------------------------MulVDNode--------------------------------------
 260 // Vector multiply double
 261 class MulVDNode : public VectorNode {
 262 public:
 263   MulVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1, in2, vt) {}
 264   virtual int Opcode() const;
 265 };
 266 
 267 //------------------------------MulAddVS2VINode--------------------------------
 268 // Vector multiply shorts to int and add adjacent ints.
 269 class MulAddVS2VINode : public VectorNode {
 270   public:
 271     MulAddVS2VINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1, in2, vt) {}
 272     virtual int Opcode() const;
 273 };
 274 
 275 //------------------------------FmaVDNode--------------------------------------
 276 // Vector multiply double
 277 class FmaVDNode : public VectorNode {
 278 public:
 279   FmaVDNode(Node* in1, Node* in2, Node* in3, const TypeVect* vt) : VectorNode(in1, in2, in3, vt) {}
 280   virtual int Opcode() const;
 281 };
 282 
 283 //------------------------------FmaVFNode--------------------------------------
 284 // Vector multiply float
 285 class FmaVFNode : public VectorNode {
 286 public:
 287   FmaVFNode(Node* in1, Node* in2, Node* in3, const TypeVect* vt) : VectorNode(in1, in2, in3, vt) {}
 288   virtual int Opcode() const;
 289 };
 290 
 291 //------------------------------CMoveVFNode--------------------------------------
 292 // Vector float conditional move


< prev index next >