339 public:
340 OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
341 virtual int Opcode() const;
342 };
343
344 //------------------------------XorVNode---------------------------------------
345 // Vector xor integer
346 class XorVNode : public VectorNode {
347 public:
348 XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
349 virtual int Opcode() const;
350 };
351
352 //================================= M E M O R Y ===============================
353
354 //------------------------------LoadVectorNode---------------------------------
355 // Load Vector from memory
356 class LoadVectorNode : public LoadNode {
357 public:
358 LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt)
359 : LoadNode(c, mem, adr, at, vt) {
360 init_class_id(Class_LoadVector);
361 }
362
363 const TypeVect* vect_type() const { return type()->is_vect(); }
364 uint length() const { return vect_type()->length(); } // Vector length
365
366 virtual int Opcode() const;
367
368 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); }
369 virtual BasicType memory_type() const { return T_VOID; }
370 virtual int memory_size() const { return vect_type()->length_in_bytes(); }
371
372 virtual int store_Opcode() const { return Op_StoreVector; }
373
374 static LoadVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
375 Node* adr, const TypePtr* atyp, uint vlen, BasicType bt);
376 };
377
378 //------------------------------StoreVectorNode--------------------------------
379 // Store Vector to memory
380 class StoreVectorNode : public StoreNode {
381 public:
382 StoreVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
383 : StoreNode(c, mem, adr, at, val) {
384 assert(val->is_Vector() || val->is_LoadVector(), "sanity");
385 init_class_id(Class_StoreVector);
386 }
387
388 const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); }
389 uint length() const { return vect_type()->length(); } // Vector length
390
391 virtual int Opcode() const;
392
393 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); }
394 virtual BasicType memory_type() const { return T_VOID; }
395 virtual int memory_size() const { return vect_type()->length_in_bytes(); }
396
397 static StoreVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
398 Node* adr, const TypePtr* atyp, Node* val,
399 uint vlen);
400 };
401
402
403 //=========================Promote_Scalar_to_Vector============================
|
339 public:
340 OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
341 virtual int Opcode() const;
342 };
343
344 //------------------------------XorVNode---------------------------------------
345 // Vector xor integer
346 class XorVNode : public VectorNode {
347 public:
348 XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}
349 virtual int Opcode() const;
350 };
351
352 //================================= M E M O R Y ===============================
353
354 //------------------------------LoadVectorNode---------------------------------
355 // Load Vector from memory
356 class LoadVectorNode : public LoadNode {
357 public:
358 LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt)
359 : LoadNode(c, mem, adr, at, vt, LoadNode::unordered) {
360 init_class_id(Class_LoadVector);
361 }
362
363 const TypeVect* vect_type() const { return type()->is_vect(); }
364 uint length() const { return vect_type()->length(); } // Vector length
365
366 virtual int Opcode() const;
367
368 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); }
369 virtual BasicType memory_type() const { return T_VOID; }
370 virtual int memory_size() const { return vect_type()->length_in_bytes(); }
371
372 virtual int store_Opcode() const { return Op_StoreVector; }
373
374 static LoadVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
375 Node* adr, const TypePtr* atyp, uint vlen, BasicType bt);
376 };
377
378 //------------------------------StoreVectorNode--------------------------------
379 // Store Vector to memory
380 class StoreVectorNode : public StoreNode {
381 public:
382 StoreVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val)
383 : StoreNode(c, mem, adr, at, val, StoreNode::unordered) {
384 assert(val->is_Vector() || val->is_LoadVector(), "sanity");
385 init_class_id(Class_StoreVector);
386 }
387
388 const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); }
389 uint length() const { return vect_type()->length(); } // Vector length
390
391 virtual int Opcode() const;
392
393 virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); }
394 virtual BasicType memory_type() const { return T_VOID; }
395 virtual int memory_size() const { return vect_type()->length_in_bytes(); }
396
397 static StoreVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem,
398 Node* adr, const TypePtr* atyp, Node* val,
399 uint vlen);
400 };
401
402
403 //=========================Promote_Scalar_to_Vector============================
|