45 public: |
45 public: |
46 friend class VectorLoadNode; // For vect_type |
46 friend class VectorLoadNode; // For vect_type |
47 friend class VectorStoreNode; // ditto. |
47 friend class VectorStoreNode; // ditto. |
48 |
48 |
49 VectorNode(Node* n1, uint vlen) : Node(NULL, n1), _length(vlen) { |
49 VectorNode(Node* n1, uint vlen) : Node(NULL, n1), _length(vlen) { |
50 init_flags(Flag_is_Vector); |
50 init_class_id(Class_Vector); |
51 } |
51 } |
52 VectorNode(Node* n1, Node* n2, uint vlen) : Node(NULL, n1, n2), _length(vlen) { |
52 VectorNode(Node* n1, Node* n2, uint vlen) : Node(NULL, n1, n2), _length(vlen) { |
53 init_flags(Flag_is_Vector); |
53 init_class_id(Class_Vector); |
54 } |
54 } |
55 virtual int Opcode() const; |
55 virtual int Opcode() const; |
56 |
56 |
57 uint length() const { return _length; } // Vector length |
57 uint length() const { return _length; } // Vector length |
58 |
58 |
387 } |
387 } |
388 |
388 |
389 public: |
389 public: |
390 VectorLoadNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *rt) |
390 VectorLoadNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *rt) |
391 : LoadNode(c,mem,adr,at,rt) { |
391 : LoadNode(c,mem,adr,at,rt) { |
392 init_flags(Flag_is_Vector); |
392 init_class_id(Class_VectorLoad); |
393 } |
393 } |
394 virtual int Opcode() const; |
394 virtual int Opcode() const; |
395 |
395 |
396 virtual uint length() const = 0; // Vector length |
396 virtual uint length() const = 0; // Vector length |
397 |
397 |
615 virtual BasicType elt_basic_type() const = 0; // Vector element basic type |
615 virtual BasicType elt_basic_type() const = 0; // Vector element basic type |
616 |
616 |
617 public: |
617 public: |
618 VectorStoreNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) |
618 VectorStoreNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) |
619 : StoreNode(c,mem,adr,at,val) { |
619 : StoreNode(c,mem,adr,at,val) { |
620 init_flags(Flag_is_Vector); |
620 init_class_id(Class_VectorStore); |
621 } |
621 } |
622 virtual int Opcode() const; |
622 virtual int Opcode() const; |
623 |
623 |
624 virtual uint length() const = 0; // Vector length |
624 virtual uint length() const = 0; // Vector length |
625 |
625 |
633 |
633 |
634 // Vector opcode from scalar opcode |
634 // Vector opcode from scalar opcode |
635 static int opcode(int sopc, uint vlen); |
635 static int opcode(int sopc, uint vlen); |
636 |
636 |
637 static VectorStoreNode* make(Compile* C, int opc, Node* ctl, Node* mem, |
637 static VectorStoreNode* make(Compile* C, int opc, Node* ctl, Node* mem, |
638 Node* adr, const TypePtr* atyp, VectorNode* val, |
638 Node* adr, const TypePtr* atyp, Node* val, |
639 uint vlen); |
639 uint vlen); |
640 }; |
640 }; |
641 |
641 |
642 //------------------------------Store16BNode-------------------------------------- |
642 //------------------------------Store16BNode-------------------------------------- |
643 // Vector store of 16 bytes (8bits signed) to memory |
643 // Vector store of 16 bytes (8bits signed) to memory |