| 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 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 static bool classof(const Inst *Inst) { return isClassof(Inst, Call); } | 423 static bool classof(const Inst *Inst) { return isClassof(Inst, Call); } |
| 424 | 424 |
| 425 private: | 425 private: |
| 426 InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget); | 426 InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget); |
| 427 InstX8632Call(const InstX8632Call &) LLVM_DELETED_FUNCTION; | 427 InstX8632Call(const InstX8632Call &) LLVM_DELETED_FUNCTION; |
| 428 InstX8632Call &operator=(const InstX8632Call &) LLVM_DELETED_FUNCTION; | 428 InstX8632Call &operator=(const InstX8632Call &) LLVM_DELETED_FUNCTION; |
| 429 virtual ~InstX8632Call() {} | 429 virtual ~InstX8632Call() {} |
| 430 }; | 430 }; |
| 431 | 431 |
| 432 // Emit a one-operand (GPR) instruction. | 432 // Emit a one-operand (GPR) instruction. |
| 433 void emitIASVarTyGPR(const Cfg *Func, Type Ty, const Variable *Var, | 433 void emitIASOpTyGPR(const Cfg *Func, Type Ty, const Operand *Var, |
| 434 const x86::AssemblerX86::GPREmitterOneOp &Emitter); | 434 const x86::AssemblerX86::GPREmitterOneOp &Emitter); |
| 435 | 435 |
| 436 // Instructions of the form x := op(x). | 436 // Instructions of the form x := op(x). |
| 437 template <InstX8632::InstKindX8632 K> | 437 template <InstX8632::InstKindX8632 K> |
| 438 class InstX8632InplaceopGPR : public InstX8632 { | 438 class InstX8632InplaceopGPR : public InstX8632 { |
| 439 public: | 439 public: |
| 440 static InstX8632InplaceopGPR *create(Cfg *Func, Operand *SrcDest) { | 440 static InstX8632InplaceopGPR *create(Cfg *Func, Operand *SrcDest) { |
| 441 return new (Func->allocate<InstX8632InplaceopGPR>()) | 441 return new (Func->allocate<InstX8632InplaceopGPR>()) |
| 442 InstX8632InplaceopGPR(Func, SrcDest); | 442 InstX8632InplaceopGPR(Func, SrcDest); |
| 443 } | 443 } |
| 444 virtual void emit(const Cfg *Func) const { | 444 virtual void emit(const Cfg *Func) const { |
| 445 Ostream &Str = Func->getContext()->getStrEmit(); | 445 Ostream &Str = Func->getContext()->getStrEmit(); |
| 446 assert(getSrcSize() == 1); | 446 assert(getSrcSize() == 1); |
| 447 Str << "\t" << Opcode << "\t"; | 447 Str << "\t" << Opcode << "\t"; |
| 448 getSrc(0)->emit(Func); | 448 getSrc(0)->emit(Func); |
| 449 Str << "\n"; | 449 Str << "\n"; |
| 450 } | 450 } |
| 451 virtual void emitIAS(const Cfg *Func) const { | 451 virtual void emitIAS(const Cfg *Func) const { |
| 452 assert(getSrcSize() == 1); | 452 assert(getSrcSize() == 1); |
| 453 const Variable *Var = getDest(); | 453 const Variable *Var = getDest(); |
| 454 Type Ty = Var->getType(); | 454 Type Ty = Var->getType(); |
| 455 emitIASVarTyGPR(Func, Ty, Var, Emitter); | 455 emitIASOpTyGPR(Func, Ty, Var, Emitter); |
| 456 } | 456 } |
| 457 virtual void dump(const Cfg *Func) const { | 457 virtual void dump(const Cfg *Func) const { |
| 458 Ostream &Str = Func->getContext()->getStrDump(); | 458 Ostream &Str = Func->getContext()->getStrDump(); |
| 459 dumpDest(Func); | 459 dumpDest(Func); |
| 460 Str << " = " << Opcode << "." << getDest()->getType() << " "; | 460 Str << " = " << Opcode << "." << getDest()->getType() << " "; |
| 461 dumpSources(Func); | 461 dumpSources(Func); |
| 462 } | 462 } |
| 463 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 463 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
| 464 | 464 |
| 465 private: | 465 private: |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 }; | 573 }; |
| 574 | 574 |
| 575 // See the definition of emitTwoAddress() for a description of | 575 // See the definition of emitTwoAddress() for a description of |
| 576 // ShiftHack. | 576 // ShiftHack. |
| 577 void emitTwoAddress(const char *Opcode, const Inst *Inst, const Cfg *Func, | 577 void emitTwoAddress(const char *Opcode, const Inst *Inst, const Cfg *Func, |
| 578 bool ShiftHack = false); | 578 bool ShiftHack = false); |
| 579 | 579 |
| 580 template <InstX8632::InstKindX8632 K, bool ShiftHack = false> | 580 template <InstX8632::InstKindX8632 K, bool ShiftHack = false> |
| 581 class InstX8632Binop : public InstX8632 { | 581 class InstX8632Binop : public InstX8632 { |
| 582 public: | 582 public: |
| 583 // Create an ordinary binary-op instruction like add or sub. | 583 // Create a binary-op instruction like shifts. |
| 584 static InstX8632Binop *create(Cfg *Func, Variable *Dest, Operand *Source) { | 584 static InstX8632Binop *create(Cfg *Func, Variable *Dest, Operand *Source) { |
| 585 return new (Func->allocate<InstX8632Binop>()) | 585 return new (Func->allocate<InstX8632Binop>()) |
| 586 InstX8632Binop(Func, Dest, Source); | 586 InstX8632Binop(Func, Dest, Source); |
| 587 } | 587 } |
| 588 virtual void emit(const Cfg *Func) const { | 588 virtual void emit(const Cfg *Func) const { |
| 589 emitTwoAddress(Opcode, this, Func, ShiftHack); | 589 emitTwoAddress(Opcode, this, Func, ShiftHack); |
| 590 } | 590 } |
| 591 virtual void dump(const Cfg *Func) const { | 591 virtual void dump(const Cfg *Func) const { |
| 592 Ostream &Str = Func->getContext()->getStrDump(); | 592 Ostream &Str = Func->getContext()->getStrDump(); |
| 593 dumpDest(Func); | 593 dumpDest(Func); |
| 594 Str << " = " << Opcode << "." << getDest()->getType() << " "; | 594 Str << " = " << Opcode << "." << getDest()->getType() << " "; |
| 595 dumpSources(Func); | 595 dumpSources(Func); |
| 596 } | 596 } |
| 597 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 597 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
| 598 | 598 |
| 599 private: | 599 private: |
| 600 InstX8632Binop(Cfg *Func, Variable *Dest, Operand *Source) | 600 InstX8632Binop(Cfg *Func, Variable *Dest, Operand *Source) |
| 601 : InstX8632(Func, K, 2, Dest) { | 601 : InstX8632(Func, K, 2, Dest) { |
| 602 addSource(Dest); | 602 addSource(Dest); |
| 603 addSource(Source); | 603 addSource(Source); |
| 604 } | 604 } |
| 605 InstX8632Binop(const InstX8632Binop &) LLVM_DELETED_FUNCTION; | 605 InstX8632Binop(const InstX8632Binop &) LLVM_DELETED_FUNCTION; |
| 606 InstX8632Binop &operator=(const InstX8632Binop &) LLVM_DELETED_FUNCTION; | 606 InstX8632Binop &operator=(const InstX8632Binop &) LLVM_DELETED_FUNCTION; |
| 607 virtual ~InstX8632Binop() {} | 607 virtual ~InstX8632Binop() {} |
| 608 static const char *Opcode; | 608 static const char *Opcode; |
| 609 }; | 609 }; |
| 610 | 610 |
| 611 template <InstX8632::InstKindX8632 K> |
| 612 class InstX8632BinopGPR : public InstX8632 { |
| 613 public: |
| 614 // Create an ordinary binary-op instruction like add or sub. |
| 615 static InstX8632BinopGPR *create(Cfg *Func, Variable *Dest, Operand *Source) { |
| 616 return new (Func->allocate<InstX8632BinopGPR>()) |
| 617 InstX8632BinopGPR(Func, Dest, Source); |
| 618 } |
| 619 virtual void emit(const Cfg *Func) const { |
| 620 const bool ShiftHack = false; |
| 621 emitTwoAddress(Opcode, this, Func, ShiftHack); |
| 622 } |
| 623 virtual void emitIAS(const Cfg *Func) const { |
| 624 Type Ty = getDest()->getType(); |
| 625 assert(getSrcSize() == 2); |
| 626 emitIASRegOpTyGPR(Func, Ty, getDest(), getSrc(1), Emitter); |
| 627 } |
| 628 virtual void dump(const Cfg *Func) const { |
| 629 Ostream &Str = Func->getContext()->getStrDump(); |
| 630 dumpDest(Func); |
| 631 Str << " = " << Opcode << "." << getDest()->getType() << " "; |
| 632 dumpSources(Func); |
| 633 } |
| 634 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
| 635 |
| 636 private: |
| 637 InstX8632BinopGPR(Cfg *Func, Variable *Dest, Operand *Source) |
| 638 : InstX8632(Func, K, 2, Dest) { |
| 639 addSource(Dest); |
| 640 addSource(Source); |
| 641 } |
| 642 InstX8632BinopGPR(const InstX8632BinopGPR &) LLVM_DELETED_FUNCTION; |
| 643 InstX8632BinopGPR &operator=(const InstX8632BinopGPR &) LLVM_DELETED_FUNCTION; |
| 644 virtual ~InstX8632BinopGPR() {} |
| 645 static const char *Opcode; |
| 646 static const x86::AssemblerX86::GPREmitterRegOp Emitter; |
| 647 }; |
| 648 |
| 611 template <InstX8632::InstKindX8632 K, bool NeedsElementType> | 649 template <InstX8632::InstKindX8632 K, bool NeedsElementType> |
| 612 class InstX8632BinopXmm : public InstX8632 { | 650 class InstX8632BinopXmm : public InstX8632 { |
| 613 public: | 651 public: |
| 614 // Create an XMM binary-op instruction like addss or addps. | 652 // Create an XMM binary-op instruction like addss or addps. |
| 615 static InstX8632BinopXmm *create(Cfg *Func, Variable *Dest, Operand *Source) { | 653 static InstX8632BinopXmm *create(Cfg *Func, Variable *Dest, Operand *Source) { |
| 616 return new (Func->allocate<InstX8632BinopXmm>()) | 654 return new (Func->allocate<InstX8632BinopXmm>()) |
| 617 InstX8632BinopXmm(Func, Dest, Source); | 655 InstX8632BinopXmm(Func, Dest, Source); |
| 618 } | 656 } |
| 619 virtual void emit(const Cfg *Func) const { | 657 virtual void emit(const Cfg *Func) const { |
| 620 const bool ShiftHack = false; | 658 const bool ShiftHack = false; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 Ostream &Str = Func->getContext()->getStrEmit(); | 698 Ostream &Str = Func->getContext()->getStrEmit(); |
| 661 assert(getSrcSize() == 3); | 699 assert(getSrcSize() == 3); |
| 662 Str << "\t" << Opcode << "\t"; | 700 Str << "\t" << Opcode << "\t"; |
| 663 getDest()->emit(Func); | 701 getDest()->emit(Func); |
| 664 Str << ", "; | 702 Str << ", "; |
| 665 getSrc(1)->emit(Func); | 703 getSrc(1)->emit(Func); |
| 666 Str << ", "; | 704 Str << ", "; |
| 667 getSrc(2)->emit(Func); | 705 getSrc(2)->emit(Func); |
| 668 Str << "\n"; | 706 Str << "\n"; |
| 669 } | 707 } |
| 708 virtual void emitIAS(const Cfg *Func) const { emit(Func); } |
| 670 virtual void dump(const Cfg *Func) const { | 709 virtual void dump(const Cfg *Func) const { |
| 671 Ostream &Str = Func->getContext()->getStrDump(); | 710 Ostream &Str = Func->getContext()->getStrDump(); |
| 672 dumpDest(Func); | 711 dumpDest(Func); |
| 673 Str << " = " << Opcode << "." << getDest()->getType() << " "; | 712 Str << " = " << Opcode << "." << getDest()->getType() << " "; |
| 674 dumpSources(Func); | 713 dumpSources(Func); |
| 675 } | 714 } |
| 676 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 715 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
| 677 | 716 |
| 678 private: | 717 private: |
| 679 InstX8632Ternop(Cfg *Func, Variable *Dest, Operand *Source1, Operand *Source2) | 718 InstX8632Ternop(Cfg *Func, Variable *Dest, Operand *Source1, Operand *Source2) |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 775 typedef InstX8632UnaryopGPR<InstX8632::Cbwdq> InstX8632Cbwdq; | 814 typedef InstX8632UnaryopGPR<InstX8632::Cbwdq> InstX8632Cbwdq; |
| 776 typedef InstX8632UnaryopXmm<InstX8632::Movd> InstX8632Movd; | 815 typedef InstX8632UnaryopXmm<InstX8632::Movd> InstX8632Movd; |
| 777 typedef InstX8632UnaryopXmm<InstX8632::Sqrtss> InstX8632Sqrtss; | 816 typedef InstX8632UnaryopXmm<InstX8632::Sqrtss> InstX8632Sqrtss; |
| 778 // Move/assignment instruction - wrapper for mov/movss/movsd. | 817 // Move/assignment instruction - wrapper for mov/movss/movsd. |
| 779 typedef InstX8632Movlike<InstX8632::Mov> InstX8632Mov; | 818 typedef InstX8632Movlike<InstX8632::Mov> InstX8632Mov; |
| 780 // Move packed - copy 128 bit values between XMM registers, or mem128 | 819 // Move packed - copy 128 bit values between XMM registers, or mem128 |
| 781 // and XMM registers. | 820 // and XMM registers. |
| 782 typedef InstX8632Movlike<InstX8632::Movp> InstX8632Movp; | 821 typedef InstX8632Movlike<InstX8632::Movp> InstX8632Movp; |
| 783 // Movq - copy between XMM registers, or mem64 and XMM registers. | 822 // Movq - copy between XMM registers, or mem64 and XMM registers. |
| 784 typedef InstX8632Movlike<InstX8632::Movq> InstX8632Movq; | 823 typedef InstX8632Movlike<InstX8632::Movq> InstX8632Movq; |
| 785 typedef InstX8632Binop<InstX8632::Add> InstX8632Add; | 824 typedef InstX8632BinopGPR<InstX8632::Add> InstX8632Add; |
| 786 typedef InstX8632BinopXmm<InstX8632::Addps, true> InstX8632Addps; | 825 typedef InstX8632BinopXmm<InstX8632::Addps, true> InstX8632Addps; |
| 787 typedef InstX8632Binop<InstX8632::Adc> InstX8632Adc; | 826 typedef InstX8632BinopGPR<InstX8632::Adc> InstX8632Adc; |
| 788 typedef InstX8632BinopXmm<InstX8632::Addss, false> InstX8632Addss; | 827 typedef InstX8632BinopXmm<InstX8632::Addss, false> InstX8632Addss; |
| 789 typedef InstX8632BinopXmm<InstX8632::Padd, true> InstX8632Padd; | 828 typedef InstX8632BinopXmm<InstX8632::Padd, true> InstX8632Padd; |
| 790 typedef InstX8632Binop<InstX8632::Sub> InstX8632Sub; | 829 typedef InstX8632BinopGPR<InstX8632::Sub> InstX8632Sub; |
| 791 typedef InstX8632BinopXmm<InstX8632::Subps, true> InstX8632Subps; | 830 typedef InstX8632BinopXmm<InstX8632::Subps, true> InstX8632Subps; |
| 792 typedef InstX8632BinopXmm<InstX8632::Subss, false> InstX8632Subss; | 831 typedef InstX8632BinopXmm<InstX8632::Subss, false> InstX8632Subss; |
| 793 typedef InstX8632Binop<InstX8632::Sbb> InstX8632Sbb; | 832 typedef InstX8632BinopGPR<InstX8632::Sbb> InstX8632Sbb; |
| 794 typedef InstX8632BinopXmm<InstX8632::Psub, true> InstX8632Psub; | 833 typedef InstX8632BinopXmm<InstX8632::Psub, true> InstX8632Psub; |
| 795 typedef InstX8632Binop<InstX8632::And> InstX8632And; | 834 typedef InstX8632BinopGPR<InstX8632::And> InstX8632And; |
| 796 typedef InstX8632BinopXmm<InstX8632::Pand, false> InstX8632Pand; | 835 typedef InstX8632BinopXmm<InstX8632::Pand, false> InstX8632Pand; |
| 797 typedef InstX8632BinopXmm<InstX8632::Pandn, false> InstX8632Pandn; | 836 typedef InstX8632BinopXmm<InstX8632::Pandn, false> InstX8632Pandn; |
| 798 typedef InstX8632Binop<InstX8632::Or> InstX8632Or; | 837 typedef InstX8632BinopGPR<InstX8632::Or> InstX8632Or; |
| 799 typedef InstX8632BinopXmm<InstX8632::Por, false> InstX8632Por; | 838 typedef InstX8632BinopXmm<InstX8632::Por, false> InstX8632Por; |
| 800 typedef InstX8632Binop<InstX8632::Xor> InstX8632Xor; | 839 typedef InstX8632BinopGPR<InstX8632::Xor> InstX8632Xor; |
| 801 typedef InstX8632BinopXmm<InstX8632::Pxor, false> InstX8632Pxor; | 840 typedef InstX8632BinopXmm<InstX8632::Pxor, false> InstX8632Pxor; |
| 802 typedef InstX8632Binop<InstX8632::Imul> InstX8632Imul; | 841 typedef InstX8632Binop<InstX8632::Imul> InstX8632Imul; |
| 803 typedef InstX8632BinopXmm<InstX8632::Mulps, true> InstX8632Mulps; | 842 typedef InstX8632BinopXmm<InstX8632::Mulps, true> InstX8632Mulps; |
| 804 typedef InstX8632BinopXmm<InstX8632::Mulss, false> InstX8632Mulss; | 843 typedef InstX8632BinopXmm<InstX8632::Mulss, false> InstX8632Mulss; |
| 805 typedef InstX8632Binop<InstX8632::Pmull> InstX8632Pmull; | 844 typedef InstX8632Binop<InstX8632::Pmull> InstX8632Pmull; |
| 806 typedef InstX8632BinopXmm<InstX8632::Pmuludq, false> InstX8632Pmuludq; | 845 typedef InstX8632BinopXmm<InstX8632::Pmuludq, false> InstX8632Pmuludq; |
| 807 typedef InstX8632BinopXmm<InstX8632::Divps, true> InstX8632Divps; | 846 typedef InstX8632BinopXmm<InstX8632::Divps, true> InstX8632Divps; |
| 808 typedef InstX8632BinopXmm<InstX8632::Divss, false> InstX8632Divss; | 847 typedef InstX8632BinopXmm<InstX8632::Divss, false> InstX8632Divss; |
| 809 typedef InstX8632Binop<InstX8632::Rol, true> InstX8632Rol; | 848 typedef InstX8632Binop<InstX8632::Rol, true> InstX8632Rol; |
| 810 typedef InstX8632Binop<InstX8632::Shl, true> InstX8632Shl; | 849 typedef InstX8632Binop<InstX8632::Shl, true> InstX8632Shl; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 852 | 891 |
| 853 // Mul instruction - unsigned multiply. | 892 // Mul instruction - unsigned multiply. |
| 854 class InstX8632Mul : public InstX8632 { | 893 class InstX8632Mul : public InstX8632 { |
| 855 public: | 894 public: |
| 856 static InstX8632Mul *create(Cfg *Func, Variable *Dest, Variable *Source1, | 895 static InstX8632Mul *create(Cfg *Func, Variable *Dest, Variable *Source1, |
| 857 Operand *Source2) { | 896 Operand *Source2) { |
| 858 return new (Func->allocate<InstX8632Mul>()) | 897 return new (Func->allocate<InstX8632Mul>()) |
| 859 InstX8632Mul(Func, Dest, Source1, Source2); | 898 InstX8632Mul(Func, Dest, Source1, Source2); |
| 860 } | 899 } |
| 861 virtual void emit(const Cfg *Func) const; | 900 virtual void emit(const Cfg *Func) const; |
| 901 virtual void emitIAS(const Cfg *Func) const; |
| 862 virtual void dump(const Cfg *Func) const; | 902 virtual void dump(const Cfg *Func) const; |
| 863 static bool classof(const Inst *Inst) { return isClassof(Inst, Mul); } | 903 static bool classof(const Inst *Inst) { return isClassof(Inst, Mul); } |
| 864 | 904 |
| 865 private: | 905 private: |
| 866 InstX8632Mul(Cfg *Func, Variable *Dest, Variable *Source1, Operand *Source2); | 906 InstX8632Mul(Cfg *Func, Variable *Dest, Variable *Source1, Operand *Source2); |
| 867 InstX8632Mul(const InstX8632Mul &) LLVM_DELETED_FUNCTION; | 907 InstX8632Mul(const InstX8632Mul &) LLVM_DELETED_FUNCTION; |
| 868 InstX8632Mul &operator=(const InstX8632Mul &) LLVM_DELETED_FUNCTION; | 908 InstX8632Mul &operator=(const InstX8632Mul &) LLVM_DELETED_FUNCTION; |
| 869 virtual ~InstX8632Mul() {} | 909 virtual ~InstX8632Mul() {} |
| 870 }; | 910 }; |
| 871 | 911 |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1106 virtual ~InstX8632Test() {} | 1146 virtual ~InstX8632Test() {} |
| 1107 }; | 1147 }; |
| 1108 | 1148 |
| 1109 // Mfence instruction. | 1149 // Mfence instruction. |
| 1110 class InstX8632Mfence : public InstX8632 { | 1150 class InstX8632Mfence : public InstX8632 { |
| 1111 public: | 1151 public: |
| 1112 static InstX8632Mfence *create(Cfg *Func) { | 1152 static InstX8632Mfence *create(Cfg *Func) { |
| 1113 return new (Func->allocate<InstX8632Mfence>()) InstX8632Mfence(Func); | 1153 return new (Func->allocate<InstX8632Mfence>()) InstX8632Mfence(Func); |
| 1114 } | 1154 } |
| 1115 virtual void emit(const Cfg *Func) const; | 1155 virtual void emit(const Cfg *Func) const; |
| 1156 virtual void emitIAS(const Cfg *Func) const; |
| 1116 virtual void dump(const Cfg *Func) const; | 1157 virtual void dump(const Cfg *Func) const; |
| 1117 static bool classof(const Inst *Inst) { return isClassof(Inst, Mfence); } | 1158 static bool classof(const Inst *Inst) { return isClassof(Inst, Mfence); } |
| 1118 | 1159 |
| 1119 private: | 1160 private: |
| 1120 InstX8632Mfence(Cfg *Func); | 1161 InstX8632Mfence(Cfg *Func); |
| 1121 InstX8632Mfence(const InstX8632Mfence &) LLVM_DELETED_FUNCTION; | 1162 InstX8632Mfence(const InstX8632Mfence &) LLVM_DELETED_FUNCTION; |
| 1122 InstX8632Mfence &operator=(const InstX8632Mfence &) LLVM_DELETED_FUNCTION; | 1163 InstX8632Mfence &operator=(const InstX8632Mfence &) LLVM_DELETED_FUNCTION; |
| 1123 virtual ~InstX8632Mfence() {} | 1164 virtual ~InstX8632Mfence() {} |
| 1124 }; | 1165 }; |
| 1125 | 1166 |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1401 template <> void InstX8632Pextr::emit(const Cfg *Func) const; | 1442 template <> void InstX8632Pextr::emit(const Cfg *Func) const; |
| 1402 template <> void InstX8632Pinsr::emit(const Cfg *Func) const; | 1443 template <> void InstX8632Pinsr::emit(const Cfg *Func) const; |
| 1403 template <> void InstX8632Pmull::emit(const Cfg *Func) const; | 1444 template <> void InstX8632Pmull::emit(const Cfg *Func) const; |
| 1404 template <> void InstX8632Pmuludq::emit(const Cfg *Func) const; | 1445 template <> void InstX8632Pmuludq::emit(const Cfg *Func) const; |
| 1405 template <> void InstX8632Psll::emit(const Cfg *Func) const; | 1446 template <> void InstX8632Psll::emit(const Cfg *Func) const; |
| 1406 template <> void InstX8632Psra::emit(const Cfg *Func) const; | 1447 template <> void InstX8632Psra::emit(const Cfg *Func) const; |
| 1407 template <> void InstX8632Psub::emit(const Cfg *Func) const; | 1448 template <> void InstX8632Psub::emit(const Cfg *Func) const; |
| 1408 template <> void InstX8632Sqrtss::emit(const Cfg *Func) const; | 1449 template <> void InstX8632Sqrtss::emit(const Cfg *Func) const; |
| 1409 template <> void InstX8632Subss::emit(const Cfg *Func) const; | 1450 template <> void InstX8632Subss::emit(const Cfg *Func) const; |
| 1410 | 1451 |
| 1452 template <> void InstX8632Div::emitIAS(const Cfg *Func) const; |
| 1453 template <> void InstX8632Idiv::emitIAS(const Cfg *Func) const; |
| 1411 template <> void InstX8632Cbwdq::emitIAS(const Cfg *Func) const; | 1454 template <> void InstX8632Cbwdq::emitIAS(const Cfg *Func) const; |
| 1412 template <> void InstX8632Movd::emitIAS(const Cfg *Func) const; | 1455 template <> void InstX8632Movd::emitIAS(const Cfg *Func) const; |
| 1413 | 1456 |
| 1414 } // end of namespace Ice | 1457 } // end of namespace Ice |
| 1415 | 1458 |
| 1416 #endif // SUBZERO_SRC_ICEINSTX8632_H | 1459 #endif // SUBZERO_SRC_ICEINSTX8632_H |
| OLD | NEW |