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 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 | 334 |
335 // Conditional and unconditional branch instruction. | 335 // Conditional and unconditional branch instruction. |
336 class InstX8632Br : public InstX8632 { | 336 class InstX8632Br : public InstX8632 { |
337 InstX8632Br(const InstX8632Br &) = delete; | 337 InstX8632Br(const InstX8632Br &) = delete; |
338 InstX8632Br &operator=(const InstX8632Br &) = delete; | 338 InstX8632Br &operator=(const InstX8632Br &) = delete; |
339 | 339 |
340 public: | 340 public: |
341 // Create a conditional branch to a node. | 341 // Create a conditional branch to a node. |
342 static InstX8632Br *create(Cfg *Func, CfgNode *TargetTrue, | 342 static InstX8632Br *create(Cfg *Func, CfgNode *TargetTrue, |
343 CfgNode *TargetFalse, CondX86::BrCond Condition) { | 343 CfgNode *TargetFalse, CondX86::BrCond Condition) { |
| 344 assert(Condition != CondX86::Br_None); |
344 const InstX8632Label *NoLabel = NULL; | 345 const InstX8632Label *NoLabel = NULL; |
345 return new (Func->allocate<InstX8632Br>()) | 346 return new (Func->allocate<InstX8632Br>()) |
346 InstX8632Br(Func, TargetTrue, TargetFalse, NoLabel, Condition); | 347 InstX8632Br(Func, TargetTrue, TargetFalse, NoLabel, Condition); |
347 } | 348 } |
348 // Create an unconditional branch to a node. | 349 // Create an unconditional branch to a node. |
349 static InstX8632Br *create(Cfg *Func, CfgNode *Target) { | 350 static InstX8632Br *create(Cfg *Func, CfgNode *Target) { |
350 const CfgNode *NoCondTarget = NULL; | 351 const CfgNode *NoCondTarget = NULL; |
351 const InstX8632Label *NoLabel = NULL; | 352 const InstX8632Label *NoLabel = NULL; |
352 return new (Func->allocate<InstX8632Br>()) | 353 return new (Func->allocate<InstX8632Br>()) |
353 InstX8632Br(Func, NoCondTarget, Target, NoLabel, CondX86::Br_None); | 354 InstX8632Br(Func, NoCondTarget, Target, NoLabel, CondX86::Br_None); |
354 } | 355 } |
355 // Create a non-terminator conditional branch to a node, with a | 356 // Create a non-terminator conditional branch to a node, with a |
356 // fallthrough to the next instruction in the current node. This is | 357 // fallthrough to the next instruction in the current node. This is |
357 // used for switch lowering. | 358 // used for switch lowering. |
358 static InstX8632Br *create(Cfg *Func, CfgNode *Target, | 359 static InstX8632Br *create(Cfg *Func, CfgNode *Target, |
359 CondX86::BrCond Condition) { | 360 CondX86::BrCond Condition) { |
| 361 assert(Condition != CondX86::Br_None); |
360 const CfgNode *NoUncondTarget = NULL; | 362 const CfgNode *NoUncondTarget = NULL; |
361 const InstX8632Label *NoLabel = NULL; | 363 const InstX8632Label *NoLabel = NULL; |
362 return new (Func->allocate<InstX8632Br>()) | 364 return new (Func->allocate<InstX8632Br>()) |
363 InstX8632Br(Func, Target, NoUncondTarget, NoLabel, Condition); | 365 InstX8632Br(Func, Target, NoUncondTarget, NoLabel, Condition); |
364 } | 366 } |
365 // Create a conditional intra-block branch (or unconditional, if | 367 // Create a conditional intra-block branch (or unconditional, if |
366 // Condition==Br_None) to a label in the current block. | 368 // Condition==Br_None) to a label in the current block. |
367 static InstX8632Br *create(Cfg *Func, InstX8632Label *Label, | 369 static InstX8632Br *create(Cfg *Func, InstX8632Label *Label, |
368 CondX86::BrCond Condition) { | 370 CondX86::BrCond Condition) { |
369 const CfgNode *NoCondTarget = NULL; | 371 const CfgNode *NoCondTarget = NULL; |
(...skipping 1174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1544 template <> void InstX8632Pinsr::emitIAS(const Cfg *Func) const; | 1546 template <> void InstX8632Pinsr::emitIAS(const Cfg *Func) const; |
1545 template <> void InstX8632Movsx::emitIAS(const Cfg *Func) const; | 1547 template <> void InstX8632Movsx::emitIAS(const Cfg *Func) const; |
1546 template <> void InstX8632Movzx::emitIAS(const Cfg *Func) const; | 1548 template <> void InstX8632Movzx::emitIAS(const Cfg *Func) const; |
1547 template <> void InstX8632Pmull::emitIAS(const Cfg *Func) const; | 1549 template <> void InstX8632Pmull::emitIAS(const Cfg *Func) const; |
1548 template <> void InstX8632Pshufd::emitIAS(const Cfg *Func) const; | 1550 template <> void InstX8632Pshufd::emitIAS(const Cfg *Func) const; |
1549 template <> void InstX8632Shufps::emitIAS(const Cfg *Func) const; | 1551 template <> void InstX8632Shufps::emitIAS(const Cfg *Func) const; |
1550 | 1552 |
1551 } // end of namespace Ice | 1553 } // end of namespace Ice |
1552 | 1554 |
1553 #endif // SUBZERO_SRC_ICEINSTX8632_H | 1555 #endif // SUBZERO_SRC_ICEINSTX8632_H |
OLD | NEW |