OLD | NEW |
1 //===- subzero/src/IceInstX8632.h - x86-32 machine instructions -*- C++ -*-===// | 1 //===- subzero/src/IceInstX8632.h - x86-32 machine 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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 | 168 |
169 class InstX8632 : public InstTarget { | 169 class InstX8632 : public InstTarget { |
170 InstX8632() = delete; | 170 InstX8632() = delete; |
171 InstX8632(const InstX8632 &) = delete; | 171 InstX8632(const InstX8632 &) = delete; |
172 InstX8632 &operator=(const InstX8632 &) = delete; | 172 InstX8632 &operator=(const InstX8632 &) = delete; |
173 | 173 |
174 public: | 174 public: |
175 enum InstKindX8632 { | 175 enum InstKindX8632 { |
176 k__Start = Inst::Target, | 176 k__Start = Inst::Target, |
177 Adc, | 177 Adc, |
| 178 AdcRMW, |
178 Add, | 179 Add, |
179 AddRMW, | 180 AddRMW, |
180 Addps, | 181 Addps, |
181 Addss, | 182 Addss, |
182 Adjuststack, | 183 Adjuststack, |
183 And, | 184 And, |
| 185 AndRMW, |
184 Blendvps, | 186 Blendvps, |
185 Br, | 187 Br, |
186 Bsf, | 188 Bsf, |
187 Bsr, | 189 Bsr, |
188 Bswap, | 190 Bswap, |
189 Call, | 191 Call, |
190 Cbwdq, | 192 Cbwdq, |
191 Cmov, | 193 Cmov, |
192 Cmpps, | 194 Cmpps, |
193 Cmpxchg, | 195 Cmpxchg, |
(...skipping 20 matching lines...) Expand all Loading... |
214 Movq, | 216 Movq, |
215 MovssRegs, | 217 MovssRegs, |
216 Movsx, | 218 Movsx, |
217 Movzx, | 219 Movzx, |
218 Mul, | 220 Mul, |
219 Mulps, | 221 Mulps, |
220 Mulss, | 222 Mulss, |
221 Neg, | 223 Neg, |
222 Nop, | 224 Nop, |
223 Or, | 225 Or, |
| 226 OrRMW, |
224 Padd, | 227 Padd, |
225 Pand, | 228 Pand, |
226 Pandn, | 229 Pandn, |
227 Pblendvb, | 230 Pblendvb, |
228 Pcmpeq, | 231 Pcmpeq, |
229 Pcmpgt, | 232 Pcmpgt, |
230 Pextr, | 233 Pextr, |
231 Pinsr, | 234 Pinsr, |
232 Pmull, | 235 Pmull, |
233 Pmuludq, | 236 Pmuludq, |
234 Pop, | 237 Pop, |
235 Por, | 238 Por, |
236 Pshufd, | 239 Pshufd, |
237 Psll, | 240 Psll, |
238 Psra, | 241 Psra, |
239 Psrl, | 242 Psrl, |
240 Psub, | 243 Psub, |
241 Push, | 244 Push, |
242 Pxor, | 245 Pxor, |
243 Ret, | 246 Ret, |
244 Rol, | 247 Rol, |
245 Sar, | 248 Sar, |
246 Sbb, | 249 Sbb, |
| 250 SbbRMW, |
247 Setcc, | 251 Setcc, |
248 Shl, | 252 Shl, |
249 Shld, | 253 Shld, |
250 Shr, | 254 Shr, |
251 Shrd, | 255 Shrd, |
252 Shufps, | 256 Shufps, |
253 Sqrtss, | 257 Sqrtss, |
254 Store, | 258 Store, |
255 StoreP, | 259 StoreP, |
256 StoreQ, | 260 StoreQ, |
257 Sub, | 261 Sub, |
| 262 SubRMW, |
258 Subps, | 263 Subps, |
259 Subss, | 264 Subss, |
260 Test, | 265 Test, |
261 Ucomiss, | 266 Ucomiss, |
262 UD2, | 267 UD2, |
263 Xadd, | 268 Xadd, |
264 Xchg, | 269 Xchg, |
265 Xor | 270 Xor, |
| 271 XorRMW |
266 }; | 272 }; |
267 | 273 |
268 static const char *getWidthString(Type Ty); | 274 static const char *getWidthString(Type Ty); |
269 static const char *getFldString(Type Ty); | 275 static const char *getFldString(Type Ty); |
270 static CondX86::BrCond getOppositeCondition(CondX86::BrCond Cond); | 276 static CondX86::BrCond getOppositeCondition(CondX86::BrCond Cond); |
271 void dump(const Cfg *Func) const override; | 277 void dump(const Cfg *Func) const override; |
272 | 278 |
273 // Shared emit routines for common forms of instructions. | 279 // Shared emit routines for common forms of instructions. |
274 // See the definition of emitTwoAddress() for a description of | 280 // See the definition of emitTwoAddress() for a description of |
275 // ShiftHack. | 281 // ShiftHack. |
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1096 typedef InstX8632Movlike<InstX8632::Mov> InstX8632Mov; | 1102 typedef InstX8632Movlike<InstX8632::Mov> InstX8632Mov; |
1097 // Move packed - copy 128 bit values between XMM registers, or mem128 | 1103 // Move packed - copy 128 bit values between XMM registers, or mem128 |
1098 // and XMM registers. | 1104 // and XMM registers. |
1099 typedef InstX8632Movlike<InstX8632::Movp> InstX8632Movp; | 1105 typedef InstX8632Movlike<InstX8632::Movp> InstX8632Movp; |
1100 // Movq - copy between XMM registers, or mem64 and XMM registers. | 1106 // Movq - copy between XMM registers, or mem64 and XMM registers. |
1101 typedef InstX8632Movlike<InstX8632::Movq> InstX8632Movq; | 1107 typedef InstX8632Movlike<InstX8632::Movq> InstX8632Movq; |
1102 typedef InstX8632BinopGPR<InstX8632::Add> InstX8632Add; | 1108 typedef InstX8632BinopGPR<InstX8632::Add> InstX8632Add; |
1103 typedef InstX8632BinopRMW<InstX8632::AddRMW> InstX8632AddRMW; | 1109 typedef InstX8632BinopRMW<InstX8632::AddRMW> InstX8632AddRMW; |
1104 typedef InstX8632BinopXmm<InstX8632::Addps, true> InstX8632Addps; | 1110 typedef InstX8632BinopXmm<InstX8632::Addps, true> InstX8632Addps; |
1105 typedef InstX8632BinopGPR<InstX8632::Adc> InstX8632Adc; | 1111 typedef InstX8632BinopGPR<InstX8632::Adc> InstX8632Adc; |
| 1112 typedef InstX8632BinopRMW<InstX8632::AdcRMW> InstX8632AdcRMW; |
1106 typedef InstX8632BinopXmm<InstX8632::Addss, false> InstX8632Addss; | 1113 typedef InstX8632BinopXmm<InstX8632::Addss, false> InstX8632Addss; |
1107 typedef InstX8632BinopXmm<InstX8632::Padd, true> InstX8632Padd; | 1114 typedef InstX8632BinopXmm<InstX8632::Padd, true> InstX8632Padd; |
1108 typedef InstX8632BinopGPR<InstX8632::Sub> InstX8632Sub; | 1115 typedef InstX8632BinopGPR<InstX8632::Sub> InstX8632Sub; |
| 1116 typedef InstX8632BinopRMW<InstX8632::SubRMW> InstX8632SubRMW; |
1109 typedef InstX8632BinopXmm<InstX8632::Subps, true> InstX8632Subps; | 1117 typedef InstX8632BinopXmm<InstX8632::Subps, true> InstX8632Subps; |
1110 typedef InstX8632BinopXmm<InstX8632::Subss, false> InstX8632Subss; | 1118 typedef InstX8632BinopXmm<InstX8632::Subss, false> InstX8632Subss; |
1111 typedef InstX8632BinopGPR<InstX8632::Sbb> InstX8632Sbb; | 1119 typedef InstX8632BinopGPR<InstX8632::Sbb> InstX8632Sbb; |
| 1120 typedef InstX8632BinopRMW<InstX8632::SbbRMW> InstX8632SbbRMW; |
1112 typedef InstX8632BinopXmm<InstX8632::Psub, true> InstX8632Psub; | 1121 typedef InstX8632BinopXmm<InstX8632::Psub, true> InstX8632Psub; |
1113 typedef InstX8632BinopGPR<InstX8632::And> InstX8632And; | 1122 typedef InstX8632BinopGPR<InstX8632::And> InstX8632And; |
| 1123 typedef InstX8632BinopRMW<InstX8632::AndRMW> InstX8632AndRMW; |
1114 typedef InstX8632BinopXmm<InstX8632::Pand, false> InstX8632Pand; | 1124 typedef InstX8632BinopXmm<InstX8632::Pand, false> InstX8632Pand; |
1115 typedef InstX8632BinopXmm<InstX8632::Pandn, false> InstX8632Pandn; | 1125 typedef InstX8632BinopXmm<InstX8632::Pandn, false> InstX8632Pandn; |
1116 typedef InstX8632BinopGPR<InstX8632::Or> InstX8632Or; | 1126 typedef InstX8632BinopGPR<InstX8632::Or> InstX8632Or; |
| 1127 typedef InstX8632BinopRMW<InstX8632::OrRMW> InstX8632OrRMW; |
1117 typedef InstX8632BinopXmm<InstX8632::Por, false> InstX8632Por; | 1128 typedef InstX8632BinopXmm<InstX8632::Por, false> InstX8632Por; |
1118 typedef InstX8632BinopGPR<InstX8632::Xor> InstX8632Xor; | 1129 typedef InstX8632BinopGPR<InstX8632::Xor> InstX8632Xor; |
| 1130 typedef InstX8632BinopRMW<InstX8632::XorRMW> InstX8632XorRMW; |
1119 typedef InstX8632BinopXmm<InstX8632::Pxor, false> InstX8632Pxor; | 1131 typedef InstX8632BinopXmm<InstX8632::Pxor, false> InstX8632Pxor; |
1120 typedef InstX8632BinopGPR<InstX8632::Imul> InstX8632Imul; | 1132 typedef InstX8632BinopGPR<InstX8632::Imul> InstX8632Imul; |
1121 typedef InstX8632BinopXmm<InstX8632::Mulps, true> InstX8632Mulps; | 1133 typedef InstX8632BinopXmm<InstX8632::Mulps, true> InstX8632Mulps; |
1122 typedef InstX8632BinopXmm<InstX8632::Mulss, false> InstX8632Mulss; | 1134 typedef InstX8632BinopXmm<InstX8632::Mulss, false> InstX8632Mulss; |
1123 typedef InstX8632BinopXmm<InstX8632::Pmull, true> InstX8632Pmull; | 1135 typedef InstX8632BinopXmm<InstX8632::Pmull, true> InstX8632Pmull; |
1124 typedef InstX8632BinopXmm<InstX8632::Pmuludq, false> InstX8632Pmuludq; | 1136 typedef InstX8632BinopXmm<InstX8632::Pmuludq, false> InstX8632Pmuludq; |
1125 typedef InstX8632BinopXmm<InstX8632::Divps, true> InstX8632Divps; | 1137 typedef InstX8632BinopXmm<InstX8632::Divps, true> InstX8632Divps; |
1126 typedef InstX8632BinopXmm<InstX8632::Divss, false> InstX8632Divss; | 1138 typedef InstX8632BinopXmm<InstX8632::Divss, false> InstX8632Divss; |
1127 typedef InstX8632BinopGPRShift<InstX8632::Rol> InstX8632Rol; | 1139 typedef InstX8632BinopGPRShift<InstX8632::Rol> InstX8632Rol; |
1128 typedef InstX8632BinopGPRShift<InstX8632::Shl> InstX8632Shl; | 1140 typedef InstX8632BinopGPRShift<InstX8632::Shl> InstX8632Shl; |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1789 template <> void InstX8632Pinsr::emitIAS(const Cfg *Func) const; | 1801 template <> void InstX8632Pinsr::emitIAS(const Cfg *Func) const; |
1790 template <> void InstX8632Movsx::emitIAS(const Cfg *Func) const; | 1802 template <> void InstX8632Movsx::emitIAS(const Cfg *Func) const; |
1791 template <> void InstX8632Movzx::emitIAS(const Cfg *Func) const; | 1803 template <> void InstX8632Movzx::emitIAS(const Cfg *Func) const; |
1792 template <> void InstX8632Pmull::emitIAS(const Cfg *Func) const; | 1804 template <> void InstX8632Pmull::emitIAS(const Cfg *Func) const; |
1793 template <> void InstX8632Pshufd::emitIAS(const Cfg *Func) const; | 1805 template <> void InstX8632Pshufd::emitIAS(const Cfg *Func) const; |
1794 template <> void InstX8632Shufps::emitIAS(const Cfg *Func) const; | 1806 template <> void InstX8632Shufps::emitIAS(const Cfg *Func) const; |
1795 | 1807 |
1796 } // end of namespace Ice | 1808 } // end of namespace Ice |
1797 | 1809 |
1798 #endif // SUBZERO_SRC_ICEINSTX8632_H | 1810 #endif // SUBZERO_SRC_ICEINSTX8632_H |
OLD | NEW |