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 17 matching lines...) Expand all Loading... |
28 // OperandX8632 extends the Operand hierarchy. Its subclasses are | 28 // OperandX8632 extends the Operand hierarchy. Its subclasses are |
29 // OperandX8632Mem and VariableSplit. | 29 // OperandX8632Mem and VariableSplit. |
30 class OperandX8632 : public Operand { | 30 class OperandX8632 : public Operand { |
31 public: | 31 public: |
32 enum OperandKindX8632 { | 32 enum OperandKindX8632 { |
33 k__Start = Operand::kTarget, | 33 k__Start = Operand::kTarget, |
34 kMem, | 34 kMem, |
35 kSplit | 35 kSplit |
36 }; | 36 }; |
37 virtual void emit(const Cfg *Func) const = 0; | 37 virtual void emit(const Cfg *Func) const = 0; |
38 void dump(const Cfg *Func) const; | 38 using Operand::dump; |
| 39 virtual void dump(const Cfg *, Ostream &Str) const { |
| 40 Str << "<OperandX8632>"; |
| 41 } |
39 | 42 |
40 protected: | 43 protected: |
41 OperandX8632(OperandKindX8632 Kind, Type Ty) | 44 OperandX8632(OperandKindX8632 Kind, Type Ty) |
42 : Operand(static_cast<OperandKind>(Kind), Ty) {} | 45 : Operand(static_cast<OperandKind>(Kind), Ty) {} |
43 virtual ~OperandX8632() {} | 46 virtual ~OperandX8632() {} |
44 | 47 |
45 private: | 48 private: |
46 OperandX8632(const OperandX8632 &) LLVM_DELETED_FUNCTION; | 49 OperandX8632(const OperandX8632 &) LLVM_DELETED_FUNCTION; |
47 OperandX8632 &operator=(const OperandX8632 &) LLVM_DELETED_FUNCTION; | 50 OperandX8632 &operator=(const OperandX8632 &) LLVM_DELETED_FUNCTION; |
48 }; | 51 }; |
(...skipping 16 matching lines...) Expand all Loading... |
65 SegmentRegisters SegmentReg = DefaultSegment) { | 68 SegmentRegisters SegmentReg = DefaultSegment) { |
66 return new (Func->allocate<OperandX8632Mem>()) | 69 return new (Func->allocate<OperandX8632Mem>()) |
67 OperandX8632Mem(Func, Ty, Base, Offset, Index, Shift, SegmentReg); | 70 OperandX8632Mem(Func, Ty, Base, Offset, Index, Shift, SegmentReg); |
68 } | 71 } |
69 Variable *getBase() const { return Base; } | 72 Variable *getBase() const { return Base; } |
70 Constant *getOffset() const { return Offset; } | 73 Constant *getOffset() const { return Offset; } |
71 Variable *getIndex() const { return Index; } | 74 Variable *getIndex() const { return Index; } |
72 uint16_t getShift() const { return Shift; } | 75 uint16_t getShift() const { return Shift; } |
73 SegmentRegisters getSegmentRegister() const { return SegmentReg; } | 76 SegmentRegisters getSegmentRegister() const { return SegmentReg; } |
74 virtual void emit(const Cfg *Func) const; | 77 virtual void emit(const Cfg *Func) const; |
75 virtual void dump(const Cfg *Func) const; | 78 using OperandX8632::dump; |
| 79 virtual void dump(const Cfg *Func, Ostream &Str) const; |
76 | 80 |
77 static bool classof(const Operand *Operand) { | 81 static bool classof(const Operand *Operand) { |
78 return Operand->getKind() == static_cast<OperandKind>(kMem); | 82 return Operand->getKind() == static_cast<OperandKind>(kMem); |
79 } | 83 } |
80 | 84 |
81 private: | 85 private: |
82 OperandX8632Mem(Cfg *Func, Type Ty, Variable *Base, Constant *Offset, | 86 OperandX8632Mem(Cfg *Func, Type Ty, Variable *Base, Constant *Offset, |
83 Variable *Index, uint16_t Shift, SegmentRegisters SegmentReg); | 87 Variable *Index, uint16_t Shift, SegmentRegisters SegmentReg); |
84 OperandX8632Mem(const OperandX8632Mem &) LLVM_DELETED_FUNCTION; | 88 OperandX8632Mem(const OperandX8632Mem &) LLVM_DELETED_FUNCTION; |
85 OperandX8632Mem &operator=(const OperandX8632Mem &) LLVM_DELETED_FUNCTION; | 89 OperandX8632Mem &operator=(const OperandX8632Mem &) LLVM_DELETED_FUNCTION; |
(...skipping 14 matching lines...) Expand all Loading... |
100 class VariableSplit : public OperandX8632 { | 104 class VariableSplit : public OperandX8632 { |
101 public: | 105 public: |
102 enum Portion { | 106 enum Portion { |
103 Low, | 107 Low, |
104 High | 108 High |
105 }; | 109 }; |
106 static VariableSplit *create(Cfg *Func, Variable *Var, Portion Part) { | 110 static VariableSplit *create(Cfg *Func, Variable *Var, Portion Part) { |
107 return new (Func->allocate<VariableSplit>()) VariableSplit(Func, Var, Part); | 111 return new (Func->allocate<VariableSplit>()) VariableSplit(Func, Var, Part); |
108 } | 112 } |
109 virtual void emit(const Cfg *Func) const; | 113 virtual void emit(const Cfg *Func) const; |
110 virtual void dump(const Cfg *Func) const; | 114 using OperandX8632::dump; |
| 115 virtual void dump(const Cfg *Func, Ostream &Str) const; |
111 | 116 |
112 static bool classof(const Operand *Operand) { | 117 static bool classof(const Operand *Operand) { |
113 return Operand->getKind() == static_cast<OperandKind>(kSplit); | 118 return Operand->getKind() == static_cast<OperandKind>(kSplit); |
114 } | 119 } |
115 | 120 |
116 private: | 121 private: |
117 VariableSplit(Cfg *Func, Variable *Var, Portion Part) | 122 VariableSplit(Cfg *Func, Variable *Var, Portion Part) |
118 : OperandX8632(kSplit, IceType_i32), Func(Func), Var(Var), Part(Part) { | 123 : OperandX8632(kSplit, IceType_i32), Func(Func), Var(Var), Part(Part) { |
119 assert(Var->getType() == IceType_f64); | 124 assert(Var->getType() == IceType_f64); |
120 Vars = Func->allocateArrayOf<Variable *>(1); | 125 Vars = Func->allocateArrayOf<Variable *>(1); |
(...skipping 1119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1240 template <> void InstX8632Pmuludq::emit(const Cfg *Func) const; | 1245 template <> void InstX8632Pmuludq::emit(const Cfg *Func) const; |
1241 template <> void InstX8632Psll::emit(const Cfg *Func) const; | 1246 template <> void InstX8632Psll::emit(const Cfg *Func) const; |
1242 template <> void InstX8632Psra::emit(const Cfg *Func) const; | 1247 template <> void InstX8632Psra::emit(const Cfg *Func) const; |
1243 template <> void InstX8632Psub::emit(const Cfg *Func) const; | 1248 template <> void InstX8632Psub::emit(const Cfg *Func) const; |
1244 template <> void InstX8632Sqrtss::emit(const Cfg *Func) const; | 1249 template <> void InstX8632Sqrtss::emit(const Cfg *Func) const; |
1245 template <> void InstX8632Subss::emit(const Cfg *Func) const; | 1250 template <> void InstX8632Subss::emit(const Cfg *Func) const; |
1246 | 1251 |
1247 } // end of namespace Ice | 1252 } // end of namespace Ice |
1248 | 1253 |
1249 #endif // SUBZERO_SRC_ICEINSTX8632_H | 1254 #endif // SUBZERO_SRC_ICEINSTX8632_H |
OLD | NEW |