Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: src/IceInstX8632.h

Issue 353553004: Add support for vector types and vector constants. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: 1) Fix alignment in type table. 2) Add VECT128_BYTES constant. 3) add _movp() function. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===- subzero/src/IceInstX8632.h - Low-level x86 instructions --*- C++ -*-===// 1 //===- subzero/src/IceInstX8632.h - Low-level x86 instructions --*- C++ -*-===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // This file declares the InstX8632 and OperandX8632 classes and 10 // This file declares the InstX8632 and OperandX8632 classes and
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 Divss, 146 Divss,
147 Fld, 147 Fld,
148 Fstp, 148 Fstp,
149 Icmp, 149 Icmp,
150 Idiv, 150 Idiv,
151 Imul, 151 Imul,
152 Label, 152 Label,
153 Load, 153 Load,
154 Mfence, 154 Mfence,
155 Mov, 155 Mov,
156 Movp,
156 Movq, 157 Movq,
157 Movsx, 158 Movsx,
158 Movzx, 159 Movzx,
159 Mul, 160 Mul,
160 Mulss, 161 Mulss,
161 Or, 162 Or,
162 Pop, 163 Pop,
163 Push, 164 Push,
164 Ret, 165 Ret,
165 Sar, 166 Sar,
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 virtual void dump(const Cfg *Func) const; 632 virtual void dump(const Cfg *Func) const;
632 static bool classof(const Inst *Inst) { return isClassof(Inst, Mov); } 633 static bool classof(const Inst *Inst) { return isClassof(Inst, Mov); }
633 634
634 private: 635 private:
635 InstX8632Mov(Cfg *Func, Variable *Dest, Operand *Source); 636 InstX8632Mov(Cfg *Func, Variable *Dest, Operand *Source);
636 InstX8632Mov(const InstX8632Mov &) LLVM_DELETED_FUNCTION; 637 InstX8632Mov(const InstX8632Mov &) LLVM_DELETED_FUNCTION;
637 InstX8632Mov &operator=(const InstX8632Mov &) LLVM_DELETED_FUNCTION; 638 InstX8632Mov &operator=(const InstX8632Mov &) LLVM_DELETED_FUNCTION;
638 virtual ~InstX8632Mov() {} 639 virtual ~InstX8632Mov() {}
639 }; 640 };
640 641
642 // Move packed - copy 128 bit values between XMM registers or mem128 and
643 // XMM registers
644 class InstX8632Movp : public InstX8632 {
645 public:
646 static InstX8632Movp *create(Cfg *Func, Variable *Dest, Operand *Source) {
647 return new (Func->allocate<InstX8632Movp>())
648 InstX8632Movp(Func, Dest, Source);
649 }
650 virtual bool isRedundantAssign() const;
651 virtual void emit(const Cfg *Func) const;
652 virtual void dump(const Cfg *Func) const;
653 static bool classof(const Inst *Inst) { return isClassof(Inst, Movp); }
654
655 private:
656 InstX8632Movp(Cfg *Func, Variable *Dest, Operand *Source);
657 InstX8632Movp(const InstX8632Movp &) LLVM_DELETED_FUNCTION;
658 InstX8632Movp &operator=(const InstX8632Movp &) LLVM_DELETED_FUNCTION;
659 virtual ~InstX8632Movp() {}
660 };
661
641 // This is essentially a "movq" instruction with an OperandX8632Mem 662 // This is essentially a "movq" instruction with an OperandX8632Mem
642 // operand instead of Variable as the destination. It's important 663 // operand instead of Variable as the destination. It's important
643 // for liveness that there is no Dest operand. 664 // for liveness that there is no Dest operand.
644 class InstX8632StoreQ : public InstX8632 { 665 class InstX8632StoreQ : public InstX8632 {
645 public: 666 public:
646 static InstX8632StoreQ *create(Cfg *Func, Operand *Value, OperandX8632 *Mem) { 667 static InstX8632StoreQ *create(Cfg *Func, Operand *Value, OperandX8632 *Mem) {
647 return new (Func->allocate<InstX8632StoreQ>()) 668 return new (Func->allocate<InstX8632StoreQ>())
648 InstX8632StoreQ(Func, Value, Mem); 669 InstX8632StoreQ(Func, Value, Mem);
649 } 670 }
650 virtual void emit(const Cfg *Func) const; 671 virtual void emit(const Cfg *Func) const;
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 848
828 InstX8632Xadd(Cfg *Func, Operand *Dest, Variable *Source, bool Locked); 849 InstX8632Xadd(Cfg *Func, Operand *Dest, Variable *Source, bool Locked);
829 InstX8632Xadd(const InstX8632Xadd &) LLVM_DELETED_FUNCTION; 850 InstX8632Xadd(const InstX8632Xadd &) LLVM_DELETED_FUNCTION;
830 InstX8632Xadd &operator=(const InstX8632Xadd &) LLVM_DELETED_FUNCTION; 851 InstX8632Xadd &operator=(const InstX8632Xadd &) LLVM_DELETED_FUNCTION;
831 virtual ~InstX8632Xadd() {} 852 virtual ~InstX8632Xadd() {}
832 }; 853 };
833 854
834 } // end of namespace Ice 855 } // end of namespace Ice
835 856
836 #endif // SUBZERO_SRC_ICEINSTX8632_H 857 #endif // SUBZERO_SRC_ICEINSTX8632_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698