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, |
164 Ret, | 165 Ret, |
165 Sar, | 166 Sar, |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 |
OLD | NEW |