| 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 class InstX8632 : public InstTarget { | 132 class InstX8632 : public InstTarget { |
| 133 public: | 133 public: |
| 134 enum InstKindX8632 { | 134 enum InstKindX8632 { |
| 135 k__Start = Inst::Target, | 135 k__Start = Inst::Target, |
| 136 Adc, | 136 Adc, |
| 137 Add, | 137 Add, |
| 138 Addps, | 138 Addps, |
| 139 Addss, | 139 Addss, |
| 140 And, | 140 And, |
| 141 Br, | 141 Br, |
| 142 Bsf, |
| 143 Bsr, |
| 142 Call, | 144 Call, |
| 143 Cdq, | 145 Cdq, |
| 146 Cmov, |
| 144 Cmpxchg, | 147 Cmpxchg, |
| 145 Cmpxchg8b, | 148 Cmpxchg8b, |
| 146 Cvt, | 149 Cvt, |
| 147 Div, | 150 Div, |
| 148 Divps, | 151 Divps, |
| 149 Divss, | 152 Divss, |
| 150 Fld, | 153 Fld, |
| 151 Fstp, | 154 Fstp, |
| 152 Icmp, | 155 Icmp, |
| 153 Idiv, | 156 Idiv, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 181 Sub, | 184 Sub, |
| 182 Subps, | 185 Subps, |
| 183 Subss, | 186 Subss, |
| 184 Test, | 187 Test, |
| 185 Ucomiss, | 188 Ucomiss, |
| 186 UD2, | 189 UD2, |
| 187 Xadd, | 190 Xadd, |
| 188 Xchg, | 191 Xchg, |
| 189 Xor | 192 Xor |
| 190 }; | 193 }; |
| 194 |
| 195 enum BrCond { |
| 196 #define X(tag, dump, emit) tag, |
| 197 ICEINSTX8632BR_TABLE |
| 198 #undef X |
| 199 Br_None |
| 200 }; |
| 201 |
| 191 static const char *getWidthString(Type Ty); | 202 static const char *getWidthString(Type Ty); |
| 192 virtual void emit(const Cfg *Func) const = 0; | 203 virtual void emit(const Cfg *Func) const = 0; |
| 193 virtual void dump(const Cfg *Func) const; | 204 virtual void dump(const Cfg *Func) const; |
| 194 | 205 |
| 195 protected: | 206 protected: |
| 196 InstX8632(Cfg *Func, InstKindX8632 Kind, SizeT Maxsrcs, Variable *Dest) | 207 InstX8632(Cfg *Func, InstKindX8632 Kind, SizeT Maxsrcs, Variable *Dest) |
| 197 : InstTarget(Func, static_cast<InstKind>(Kind), Maxsrcs, Dest) {} | 208 : InstTarget(Func, static_cast<InstKind>(Kind), Maxsrcs, Dest) {} |
| 198 virtual ~InstX8632() {} | 209 virtual ~InstX8632() {} |
| 199 static bool isClassof(const Inst *Inst, InstKindX8632 MyKind) { | 210 static bool isClassof(const Inst *Inst, InstKindX8632 MyKind) { |
| 200 return Inst->getKind() == static_cast<InstKind>(MyKind); | 211 return Inst->getKind() == static_cast<InstKind>(MyKind); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 InstX8632Label(Cfg *Func, TargetX8632 *Target); | 266 InstX8632Label(Cfg *Func, TargetX8632 *Target); |
| 256 InstX8632Label(const InstX8632Label &) LLVM_DELETED_FUNCTION; | 267 InstX8632Label(const InstX8632Label &) LLVM_DELETED_FUNCTION; |
| 257 InstX8632Label &operator=(const InstX8632Label &) LLVM_DELETED_FUNCTION; | 268 InstX8632Label &operator=(const InstX8632Label &) LLVM_DELETED_FUNCTION; |
| 258 virtual ~InstX8632Label() {} | 269 virtual ~InstX8632Label() {} |
| 259 SizeT Number; // used only for unique label string generation | 270 SizeT Number; // used only for unique label string generation |
| 260 }; | 271 }; |
| 261 | 272 |
| 262 // Conditional and unconditional branch instruction. | 273 // Conditional and unconditional branch instruction. |
| 263 class InstX8632Br : public InstX8632 { | 274 class InstX8632Br : public InstX8632 { |
| 264 public: | 275 public: |
| 265 enum BrCond { | |
| 266 #define X(tag, dump, emit) tag, | |
| 267 ICEINSTX8632BR_TABLE | |
| 268 #undef X | |
| 269 Br_None | |
| 270 }; | |
| 271 | |
| 272 // Create a conditional branch to a node. | 276 // Create a conditional branch to a node. |
| 273 static InstX8632Br *create(Cfg *Func, CfgNode *TargetTrue, | 277 static InstX8632Br *create(Cfg *Func, CfgNode *TargetTrue, |
| 274 CfgNode *TargetFalse, BrCond Condition) { | 278 CfgNode *TargetFalse, BrCond Condition) { |
| 275 return new (Func->allocate<InstX8632Br>()) | 279 return new (Func->allocate<InstX8632Br>()) |
| 276 InstX8632Br(Func, TargetTrue, TargetFalse, NULL, Condition); | 280 InstX8632Br(Func, TargetTrue, TargetFalse, NULL, Condition); |
| 277 } | 281 } |
| 278 // Create an unconditional branch to a node. | 282 // Create an unconditional branch to a node. |
| 279 static InstX8632Br *create(Cfg *Func, CfgNode *Target) { | 283 static InstX8632Br *create(Cfg *Func, CfgNode *Target) { |
| 280 return new (Func->allocate<InstX8632Br>()) | 284 return new (Func->allocate<InstX8632Br>()) |
| 281 InstX8632Br(Func, NULL, Target, NULL, Br_None); | 285 InstX8632Br(Func, NULL, Target, NULL, Br_None); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 private: | 331 private: |
| 328 InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget); | 332 InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget); |
| 329 InstX8632Call(const InstX8632Call &) LLVM_DELETED_FUNCTION; | 333 InstX8632Call(const InstX8632Call &) LLVM_DELETED_FUNCTION; |
| 330 InstX8632Call &operator=(const InstX8632Call &) LLVM_DELETED_FUNCTION; | 334 InstX8632Call &operator=(const InstX8632Call &) LLVM_DELETED_FUNCTION; |
| 331 virtual ~InstX8632Call() {} | 335 virtual ~InstX8632Call() {} |
| 332 }; | 336 }; |
| 333 | 337 |
| 334 template <InstX8632::InstKindX8632 K> | 338 template <InstX8632::InstKindX8632 K> |
| 335 class InstX8632Unaryop : public InstX8632 { | 339 class InstX8632Unaryop : public InstX8632 { |
| 336 public: | 340 public: |
| 337 // Create an unary-op instruction like neg. | 341 static InstX8632Unaryop *create(Cfg *Func, Variable *Dest, Operand *Src) { |
| 338 // The source and dest are the same variable. | |
| 339 static InstX8632Unaryop *create(Cfg *Func, Operand *SrcDest) { | |
| 340 return new (Func->allocate<InstX8632Unaryop>()) | 342 return new (Func->allocate<InstX8632Unaryop>()) |
| 341 InstX8632Unaryop(Func, SrcDest); | 343 InstX8632Unaryop(Func, Dest, Src); |
| 342 } | 344 } |
| 343 virtual void emit(const Cfg *Func) const { | 345 virtual void emit(const Cfg *Func) const { |
| 344 Ostream &Str = Func->getContext()->getStrEmit(); | 346 Ostream &Str = Func->getContext()->getStrEmit(); |
| 345 assert(getSrcSize() == 1); | 347 assert(getSrcSize() == 1); |
| 346 Str << "\t" << Opcode << "\t"; | 348 Str << "\t" << Opcode << "\t"; |
| 349 getDest()->emit(Func); |
| 350 Str << ", "; |
| 347 getSrc(0)->emit(Func); | 351 getSrc(0)->emit(Func); |
| 348 Str << "\n"; | 352 Str << "\n"; |
| 349 } | 353 } |
| 350 virtual void dump(const Cfg *Func) const { | 354 virtual void dump(const Cfg *Func) const { |
| 351 Ostream &Str = Func->getContext()->getStrDump(); | 355 Ostream &Str = Func->getContext()->getStrDump(); |
| 352 dumpDest(Func); | 356 dumpDest(Func); |
| 353 Str << " = " << Opcode << "." << getDest()->getType() << " "; | 357 Str << " = " << Opcode << "." << getDest()->getType() << " "; |
| 354 dumpSources(Func); | 358 dumpSources(Func); |
| 355 } | 359 } |
| 356 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 360 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
| 357 | 361 |
| 358 private: | 362 private: |
| 359 InstX8632Unaryop(Cfg *Func, Operand *SrcDest) | 363 InstX8632Unaryop(Cfg *Func, Variable *Dest, Operand *Src) |
| 360 : InstX8632(Func, K, 1, llvm::dyn_cast<Variable>(SrcDest)) { | 364 : InstX8632(Func, K, 1, Dest) { |
| 361 addSource(SrcDest); | 365 addSource(Src); |
| 362 } | 366 } |
| 363 InstX8632Unaryop(const InstX8632Unaryop &) LLVM_DELETED_FUNCTION; | 367 InstX8632Unaryop(const InstX8632Unaryop &) LLVM_DELETED_FUNCTION; |
| 364 InstX8632Unaryop &operator=(const InstX8632Unaryop &) LLVM_DELETED_FUNCTION; | 368 InstX8632Unaryop &operator=(const InstX8632Unaryop &) LLVM_DELETED_FUNCTION; |
| 365 virtual ~InstX8632Unaryop() {} | 369 virtual ~InstX8632Unaryop() {} |
| 366 static const char *Opcode; | 370 static const char *Opcode; |
| 367 }; | 371 }; |
| 368 | 372 |
| 369 // See the definition of emitTwoAddress() for a description of | 373 // See the definition of emitTwoAddress() for a description of |
| 370 // ShiftHack. | 374 // ShiftHack. |
| 371 void emitTwoAddress(const char *Opcode, const Inst *Inst, const Cfg *Func, | 375 void emitTwoAddress(const char *Opcode, const Inst *Inst, const Cfg *Func, |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 addSource(Dest); | 435 addSource(Dest); |
| 432 addSource(Source1); | 436 addSource(Source1); |
| 433 addSource(Source2); | 437 addSource(Source2); |
| 434 } | 438 } |
| 435 InstX8632Ternop(const InstX8632Ternop &) LLVM_DELETED_FUNCTION; | 439 InstX8632Ternop(const InstX8632Ternop &) LLVM_DELETED_FUNCTION; |
| 436 InstX8632Ternop &operator=(const InstX8632Ternop &) LLVM_DELETED_FUNCTION; | 440 InstX8632Ternop &operator=(const InstX8632Ternop &) LLVM_DELETED_FUNCTION; |
| 437 virtual ~InstX8632Ternop() {} | 441 virtual ~InstX8632Ternop() {} |
| 438 static const char *Opcode; | 442 static const char *Opcode; |
| 439 }; | 443 }; |
| 440 | 444 |
| 441 typedef InstX8632Unaryop<InstX8632::Neg> InstX8632Neg; | 445 typedef InstX8632Unaryop<InstX8632::Bsf> InstX8632Bsf; |
| 446 typedef InstX8632Unaryop<InstX8632::Bsr> InstX8632Bsr; |
| 447 typedef InstX8632Unaryop<InstX8632::Sqrtss> InstX8632Sqrtss; |
| 442 typedef InstX8632Binop<InstX8632::Add> InstX8632Add; | 448 typedef InstX8632Binop<InstX8632::Add> InstX8632Add; |
| 443 typedef InstX8632Binop<InstX8632::Addps> InstX8632Addps; | 449 typedef InstX8632Binop<InstX8632::Addps> InstX8632Addps; |
| 444 typedef InstX8632Binop<InstX8632::Adc> InstX8632Adc; | 450 typedef InstX8632Binop<InstX8632::Adc> InstX8632Adc; |
| 445 typedef InstX8632Binop<InstX8632::Addss> InstX8632Addss; | 451 typedef InstX8632Binop<InstX8632::Addss> InstX8632Addss; |
| 446 typedef InstX8632Binop<InstX8632::Sub> InstX8632Sub; | 452 typedef InstX8632Binop<InstX8632::Sub> InstX8632Sub; |
| 447 typedef InstX8632Binop<InstX8632::Subps> InstX8632Subps; | 453 typedef InstX8632Binop<InstX8632::Subps> InstX8632Subps; |
| 448 typedef InstX8632Binop<InstX8632::Subss> InstX8632Subss; | 454 typedef InstX8632Binop<InstX8632::Subss> InstX8632Subss; |
| 449 typedef InstX8632Binop<InstX8632::Sbb> InstX8632Sbb; | 455 typedef InstX8632Binop<InstX8632::Sbb> InstX8632Sbb; |
| 450 typedef InstX8632Binop<InstX8632::And> InstX8632And; | 456 typedef InstX8632Binop<InstX8632::And> InstX8632And; |
| 451 typedef InstX8632Binop<InstX8632::Or> InstX8632Or; | 457 typedef InstX8632Binop<InstX8632::Or> InstX8632Or; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 virtual void dump(const Cfg *Func) const; | 502 virtual void dump(const Cfg *Func) const; |
| 497 static bool classof(const Inst *Inst) { return isClassof(Inst, Mul); } | 503 static bool classof(const Inst *Inst) { return isClassof(Inst, Mul); } |
| 498 | 504 |
| 499 private: | 505 private: |
| 500 InstX8632Mul(Cfg *Func, Variable *Dest, Variable *Source1, Operand *Source2); | 506 InstX8632Mul(Cfg *Func, Variable *Dest, Variable *Source1, Operand *Source2); |
| 501 InstX8632Mul(const InstX8632Mul &) LLVM_DELETED_FUNCTION; | 507 InstX8632Mul(const InstX8632Mul &) LLVM_DELETED_FUNCTION; |
| 502 InstX8632Mul &operator=(const InstX8632Mul &) LLVM_DELETED_FUNCTION; | 508 InstX8632Mul &operator=(const InstX8632Mul &) LLVM_DELETED_FUNCTION; |
| 503 virtual ~InstX8632Mul() {} | 509 virtual ~InstX8632Mul() {} |
| 504 }; | 510 }; |
| 505 | 511 |
| 512 // Neg instruction - Two's complement negation. |
| 513 class InstX8632Neg : public InstX8632 { |
| 514 public: |
| 515 static InstX8632Neg *create(Cfg *Func, Operand *SrcDest) { |
| 516 return new (Func->allocate<InstX8632Neg>()) InstX8632Neg(Func, SrcDest); |
| 517 } |
| 518 virtual void emit(const Cfg *Func) const; |
| 519 virtual void dump(const Cfg *Func) const; |
| 520 static bool classof(const Inst *Inst) { return isClassof(Inst, Neg); } |
| 521 |
| 522 private: |
| 523 InstX8632Neg(Cfg *Func, Operand *SrcDest); |
| 524 InstX8632Neg(const InstX8632Neg &) LLVM_DELETED_FUNCTION; |
| 525 InstX8632Neg &operator=(const InstX8632Neg &) LLVM_DELETED_FUNCTION; |
| 526 virtual ~InstX8632Neg() {} |
| 527 }; |
| 528 |
| 506 // Shld instruction - shift across a pair of operands. TODO: Verify | 529 // Shld instruction - shift across a pair of operands. TODO: Verify |
| 507 // that the validator accepts the shld instruction. | 530 // that the validator accepts the shld instruction. |
| 508 class InstX8632Shld : public InstX8632 { | 531 class InstX8632Shld : public InstX8632 { |
| 509 public: | 532 public: |
| 510 static InstX8632Shld *create(Cfg *Func, Variable *Dest, Variable *Source1, | 533 static InstX8632Shld *create(Cfg *Func, Variable *Dest, Variable *Source1, |
| 511 Variable *Source2) { | 534 Variable *Source2) { |
| 512 return new (Func->allocate<InstX8632Shld>()) | 535 return new (Func->allocate<InstX8632Shld>()) |
| 513 InstX8632Shld(Func, Dest, Source1, Source2); | 536 InstX8632Shld(Func, Dest, Source1, Source2); |
| 514 } | 537 } |
| 515 virtual void emit(const Cfg *Func) const; | 538 virtual void emit(const Cfg *Func) const; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 virtual void dump(const Cfg *Func) const; | 579 virtual void dump(const Cfg *Func) const; |
| 557 static bool classof(const Inst *Inst) { return isClassof(Inst, Cdq); } | 580 static bool classof(const Inst *Inst) { return isClassof(Inst, Cdq); } |
| 558 | 581 |
| 559 private: | 582 private: |
| 560 InstX8632Cdq(Cfg *Func, Variable *Dest, Operand *Source); | 583 InstX8632Cdq(Cfg *Func, Variable *Dest, Operand *Source); |
| 561 InstX8632Cdq(const InstX8632Cdq &) LLVM_DELETED_FUNCTION; | 584 InstX8632Cdq(const InstX8632Cdq &) LLVM_DELETED_FUNCTION; |
| 562 InstX8632Cdq &operator=(const InstX8632Cdq &) LLVM_DELETED_FUNCTION; | 585 InstX8632Cdq &operator=(const InstX8632Cdq &) LLVM_DELETED_FUNCTION; |
| 563 virtual ~InstX8632Cdq() {} | 586 virtual ~InstX8632Cdq() {} |
| 564 }; | 587 }; |
| 565 | 588 |
| 589 // Conditional move instruction. |
| 590 class InstX8632Cmov : public InstX8632 { |
| 591 public: |
| 592 static InstX8632Cmov *create(Cfg *Func, Variable *Dest, Operand *Source, |
| 593 BrCond Cond) { |
| 594 return new (Func->allocate<InstX8632Cmov>()) |
| 595 InstX8632Cmov(Func, Dest, Source, Cond); |
| 596 } |
| 597 virtual void emit(const Cfg *Func) const; |
| 598 virtual void dump(const Cfg *Func) const; |
| 599 static bool classof(const Inst *Inst) { return isClassof(Inst, Cmov); } |
| 600 |
| 601 private: |
| 602 InstX8632Cmov(Cfg *Func, Variable *Dest, Operand *Source, BrCond Cond); |
| 603 InstX8632Cmov(const InstX8632Cmov &) LLVM_DELETED_FUNCTION; |
| 604 InstX8632Cmov &operator=(const InstX8632Cmov &) LLVM_DELETED_FUNCTION; |
| 605 virtual ~InstX8632Cmov() {} |
| 606 |
| 607 BrCond Condition; |
| 608 }; |
| 609 |
| 566 // Cmpxchg instruction - cmpxchg <dest>, <desired> will compare if <dest> | 610 // Cmpxchg instruction - cmpxchg <dest>, <desired> will compare if <dest> |
| 567 // equals eax. If so, the ZF is set and <desired> is stored in <dest>. | 611 // equals eax. If so, the ZF is set and <desired> is stored in <dest>. |
| 568 // If not, ZF is cleared and <dest> is copied to eax (or subregister). | 612 // If not, ZF is cleared and <dest> is copied to eax (or subregister). |
| 569 // <dest> can be a register or memory, while <desired> must be a register. | 613 // <dest> can be a register or memory, while <desired> must be a register. |
| 570 // It is the user's responsiblity to mark eax with a FakeDef. | 614 // It is the user's responsiblity to mark eax with a FakeDef. |
| 571 class InstX8632Cmpxchg : public InstX8632Lockable { | 615 class InstX8632Cmpxchg : public InstX8632Lockable { |
| 572 public: | 616 public: |
| 573 static InstX8632Cmpxchg *create(Cfg *Func, Operand *DestOrAddr, Variable *Eax, | 617 static InstX8632Cmpxchg *create(Cfg *Func, Operand *DestOrAddr, Variable *Eax, |
| 574 Variable *Desired, bool Locked) { | 618 Variable *Desired, bool Locked) { |
| 575 return new (Func->allocate<InstX8632Cmpxchg>()) | 619 return new (Func->allocate<InstX8632Cmpxchg>()) |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 941 virtual void dump(const Cfg *Func) const; | 985 virtual void dump(const Cfg *Func) const; |
| 942 static bool classof(const Inst *Inst) { return isClassof(Inst, Ret); } | 986 static bool classof(const Inst *Inst) { return isClassof(Inst, Ret); } |
| 943 | 987 |
| 944 private: | 988 private: |
| 945 InstX8632Ret(Cfg *Func, Variable *Source); | 989 InstX8632Ret(Cfg *Func, Variable *Source); |
| 946 InstX8632Ret(const InstX8632Ret &) LLVM_DELETED_FUNCTION; | 990 InstX8632Ret(const InstX8632Ret &) LLVM_DELETED_FUNCTION; |
| 947 InstX8632Ret &operator=(const InstX8632Ret &) LLVM_DELETED_FUNCTION; | 991 InstX8632Ret &operator=(const InstX8632Ret &) LLVM_DELETED_FUNCTION; |
| 948 virtual ~InstX8632Ret() {} | 992 virtual ~InstX8632Ret() {} |
| 949 }; | 993 }; |
| 950 | 994 |
| 951 // Sqrtss - Scalar sqrt of a float or double. | |
| 952 class InstX8632Sqrtss : public InstX8632 { | |
| 953 public: | |
| 954 static InstX8632Sqrtss *create(Cfg *Func, Variable *Dest, Operand *Source) { | |
| 955 return new (Func->allocate<InstX8632Sqrtss>()) | |
| 956 InstX8632Sqrtss(Func, Dest, Source); | |
| 957 } | |
| 958 virtual void emit(const Cfg *Func) const; | |
| 959 virtual void dump(const Cfg *Func) const; | |
| 960 static bool classof(const Inst *Inst) { return isClassof(Inst, Sqrtss); } | |
| 961 | |
| 962 private: | |
| 963 InstX8632Sqrtss(Cfg *Func, Variable *Dest, Operand *Source); | |
| 964 InstX8632Sqrtss(const InstX8632Sqrtss &) LLVM_DELETED_FUNCTION; | |
| 965 InstX8632Sqrtss &operator=(const InstX8632Sqrtss &) LLVM_DELETED_FUNCTION; | |
| 966 virtual ~InstX8632Sqrtss() {} | |
| 967 }; | |
| 968 | |
| 969 // Exchanging Add instruction. Exchanges the first operand (destination | 995 // Exchanging Add instruction. Exchanges the first operand (destination |
| 970 // operand) with the second operand (source operand), then loads the sum | 996 // operand) with the second operand (source operand), then loads the sum |
| 971 // of the two values into the destination operand. The destination may be | 997 // of the two values into the destination operand. The destination may be |
| 972 // a register or memory, while the source must be a register. | 998 // a register or memory, while the source must be a register. |
| 973 // | 999 // |
| 974 // Both the dest and source are updated. The caller should then insert a | 1000 // Both the dest and source are updated. The caller should then insert a |
| 975 // FakeDef to reflect the second udpate. | 1001 // FakeDef to reflect the second udpate. |
| 976 class InstX8632Xadd : public InstX8632Lockable { | 1002 class InstX8632Xadd : public InstX8632Lockable { |
| 977 public: | 1003 public: |
| 978 static InstX8632Xadd *create(Cfg *Func, Operand *Dest, Variable *Source, | 1004 static InstX8632Xadd *create(Cfg *Func, Operand *Dest, Variable *Source, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1010 private: | 1036 private: |
| 1011 InstX8632Xchg(Cfg *Func, Operand *Dest, Variable *Source); | 1037 InstX8632Xchg(Cfg *Func, Operand *Dest, Variable *Source); |
| 1012 InstX8632Xchg(const InstX8632Xchg &) LLVM_DELETED_FUNCTION; | 1038 InstX8632Xchg(const InstX8632Xchg &) LLVM_DELETED_FUNCTION; |
| 1013 InstX8632Xchg &operator=(const InstX8632Xchg &) LLVM_DELETED_FUNCTION; | 1039 InstX8632Xchg &operator=(const InstX8632Xchg &) LLVM_DELETED_FUNCTION; |
| 1014 virtual ~InstX8632Xchg() {} | 1040 virtual ~InstX8632Xchg() {} |
| 1015 }; | 1041 }; |
| 1016 | 1042 |
| 1017 } // end of namespace Ice | 1043 } // end of namespace Ice |
| 1018 | 1044 |
| 1019 #endif // SUBZERO_SRC_ICEINSTX8632_H | 1045 #endif // SUBZERO_SRC_ICEINSTX8632_H |
| OLD | NEW |