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

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: Print out types in error messages. Created 6 years, 5 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,
165 Pxor,
164 Ret, 166 Ret,
165 Sar, 167 Sar,
166 Sbb, 168 Sbb,
167 Shl, 169 Shl,
168 Shld, 170 Shld,
169 Shr, 171 Shr,
170 Shrd, 172 Shrd,
171 Store, 173 Store,
172 StoreQ, 174 StoreQ,
173 Sub, 175 Sub,
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 397
396 typedef InstX8632Binop<InstX8632::Add> InstX8632Add; 398 typedef InstX8632Binop<InstX8632::Add> InstX8632Add;
397 typedef InstX8632Binop<InstX8632::Adc> InstX8632Adc; 399 typedef InstX8632Binop<InstX8632::Adc> InstX8632Adc;
398 typedef InstX8632Binop<InstX8632::Addss> InstX8632Addss; 400 typedef InstX8632Binop<InstX8632::Addss> InstX8632Addss;
399 typedef InstX8632Binop<InstX8632::Sub> InstX8632Sub; 401 typedef InstX8632Binop<InstX8632::Sub> InstX8632Sub;
400 typedef InstX8632Binop<InstX8632::Subss> InstX8632Subss; 402 typedef InstX8632Binop<InstX8632::Subss> InstX8632Subss;
401 typedef InstX8632Binop<InstX8632::Sbb> InstX8632Sbb; 403 typedef InstX8632Binop<InstX8632::Sbb> InstX8632Sbb;
402 typedef InstX8632Binop<InstX8632::And> InstX8632And; 404 typedef InstX8632Binop<InstX8632::And> InstX8632And;
403 typedef InstX8632Binop<InstX8632::Or> InstX8632Or; 405 typedef InstX8632Binop<InstX8632::Or> InstX8632Or;
404 typedef InstX8632Binop<InstX8632::Xor> InstX8632Xor; 406 typedef InstX8632Binop<InstX8632::Xor> InstX8632Xor;
407 typedef InstX8632Binop<InstX8632::Pxor> InstX8632Pxor;
405 typedef InstX8632Binop<InstX8632::Imul> InstX8632Imul; 408 typedef InstX8632Binop<InstX8632::Imul> InstX8632Imul;
406 typedef InstX8632Binop<InstX8632::Mulss> InstX8632Mulss; 409 typedef InstX8632Binop<InstX8632::Mulss> InstX8632Mulss;
407 typedef InstX8632Binop<InstX8632::Divss> InstX8632Divss; 410 typedef InstX8632Binop<InstX8632::Divss> InstX8632Divss;
408 typedef InstX8632Binop<InstX8632::Shl, true> InstX8632Shl; 411 typedef InstX8632Binop<InstX8632::Shl, true> InstX8632Shl;
409 typedef InstX8632Binop<InstX8632::Shr, true> InstX8632Shr; 412 typedef InstX8632Binop<InstX8632::Shr, true> InstX8632Shr;
410 typedef InstX8632Binop<InstX8632::Sar, true> InstX8632Sar; 413 typedef InstX8632Binop<InstX8632::Sar, true> InstX8632Sar;
411 typedef InstX8632Ternop<InstX8632::Idiv> InstX8632Idiv; 414 typedef InstX8632Ternop<InstX8632::Idiv> InstX8632Idiv;
412 typedef InstX8632Ternop<InstX8632::Div> InstX8632Div; 415 typedef InstX8632Ternop<InstX8632::Div> InstX8632Div;
413 416
414 // Mul instruction - unsigned multiply. 417 // Mul instruction - unsigned multiply.
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 virtual void dump(const Cfg *Func) const; 634 virtual void dump(const Cfg *Func) const;
632 static bool classof(const Inst *Inst) { return isClassof(Inst, Mov); } 635 static bool classof(const Inst *Inst) { return isClassof(Inst, Mov); }
633 636
634 private: 637 private:
635 InstX8632Mov(Cfg *Func, Variable *Dest, Operand *Source); 638 InstX8632Mov(Cfg *Func, Variable *Dest, Operand *Source);
636 InstX8632Mov(const InstX8632Mov &) LLVM_DELETED_FUNCTION; 639 InstX8632Mov(const InstX8632Mov &) LLVM_DELETED_FUNCTION;
637 InstX8632Mov &operator=(const InstX8632Mov &) LLVM_DELETED_FUNCTION; 640 InstX8632Mov &operator=(const InstX8632Mov &) LLVM_DELETED_FUNCTION;
638 virtual ~InstX8632Mov() {} 641 virtual ~InstX8632Mov() {}
639 }; 642 };
640 643
644 // Move packed - copy 128 bit values between XMM registers or mem128 and
645 // XMM registers
646 class InstX8632Movp : public InstX8632 {
647 public:
648 static InstX8632Movp *create(Cfg *Func, Variable *Dest, Operand *Source) {
649 return new (Func->allocate<InstX8632Movp>())
650 InstX8632Movp(Func, Dest, Source);
651 }
652 virtual bool isRedundantAssign() const;
653 virtual void emit(const Cfg *Func) const;
654 virtual void dump(const Cfg *Func) const;
655 static bool classof(const Inst *Inst) { return isClassof(Inst, Movp); }
656
657 private:
658 InstX8632Movp(Cfg *Func, Variable *Dest, Operand *Source);
659 InstX8632Movp(const InstX8632Movp &) LLVM_DELETED_FUNCTION;
660 InstX8632Movp &operator=(const InstX8632Movp &) LLVM_DELETED_FUNCTION;
661 virtual ~InstX8632Movp() {}
662 };
663
641 // This is essentially a "movq" instruction with an OperandX8632Mem 664 // This is essentially a "movq" instruction with an OperandX8632Mem
642 // operand instead of Variable as the destination. It's important 665 // operand instead of Variable as the destination. It's important
643 // for liveness that there is no Dest operand. 666 // for liveness that there is no Dest operand.
644 class InstX8632StoreQ : public InstX8632 { 667 class InstX8632StoreQ : public InstX8632 {
645 public: 668 public:
646 static InstX8632StoreQ *create(Cfg *Func, Operand *Value, OperandX8632 *Mem) { 669 static InstX8632StoreQ *create(Cfg *Func, Operand *Value, OperandX8632 *Mem) {
647 return new (Func->allocate<InstX8632StoreQ>()) 670 return new (Func->allocate<InstX8632StoreQ>())
648 InstX8632StoreQ(Func, Value, Mem); 671 InstX8632StoreQ(Func, Value, Mem);
649 } 672 }
650 virtual void emit(const Cfg *Func) const; 673 virtual void emit(const Cfg *Func) const;
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 850
828 InstX8632Xadd(Cfg *Func, Operand *Dest, Variable *Source, bool Locked); 851 InstX8632Xadd(Cfg *Func, Operand *Dest, Variable *Source, bool Locked);
829 InstX8632Xadd(const InstX8632Xadd &) LLVM_DELETED_FUNCTION; 852 InstX8632Xadd(const InstX8632Xadd &) LLVM_DELETED_FUNCTION;
830 InstX8632Xadd &operator=(const InstX8632Xadd &) LLVM_DELETED_FUNCTION; 853 InstX8632Xadd &operator=(const InstX8632Xadd &) LLVM_DELETED_FUNCTION;
831 virtual ~InstX8632Xadd() {} 854 virtual ~InstX8632Xadd() {}
832 }; 855 };
833 856
834 } // end of namespace Ice 857 } // end of namespace Ice
835 858
836 #endif // SUBZERO_SRC_ICEINSTX8632_H 859 #endif // SUBZERO_SRC_ICEINSTX8632_H
OLDNEW
« no previous file with comments | « src/IceGlobalContext.cpp ('k') | src/IceInstX8632.cpp » ('j') | src/IceTargetLoweringX8632.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698