OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |