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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 uint16_t Shift = 0, | 69 uint16_t Shift = 0, |
70 SegmentRegisters SegmentReg = DefaultSegment) { | 70 SegmentRegisters SegmentReg = DefaultSegment) { |
71 return new (Func->allocate<OperandX8632Mem>()) | 71 return new (Func->allocate<OperandX8632Mem>()) |
72 OperandX8632Mem(Func, Ty, Base, Offset, Index, Shift, SegmentReg); | 72 OperandX8632Mem(Func, Ty, Base, Offset, Index, Shift, SegmentReg); |
73 } | 73 } |
74 Variable *getBase() const { return Base; } | 74 Variable *getBase() const { return Base; } |
75 Constant *getOffset() const { return Offset; } | 75 Constant *getOffset() const { return Offset; } |
76 Variable *getIndex() const { return Index; } | 76 Variable *getIndex() const { return Index; } |
77 uint16_t getShift() const { return Shift; } | 77 uint16_t getShift() const { return Shift; } |
78 SegmentRegisters getSegmentRegister() const { return SegmentReg; } | 78 SegmentRegisters getSegmentRegister() const { return SegmentReg; } |
79 void emitSegmentOverride(x86::AssemblerX86 *Asm) const; | 79 void emitSegmentOverride(X8632::AssemblerX8632 *Asm) const; |
80 x86::Address toAsmAddress(Assembler *Asm) const; | 80 X8632::Address toAsmAddress(Assembler *Asm) const; |
81 void emit(const Cfg *Func) const override; | 81 void emit(const Cfg *Func) const override; |
82 using OperandX8632::dump; | 82 using OperandX8632::dump; |
83 void dump(const Cfg *Func, Ostream &Str) const override; | 83 void dump(const Cfg *Func, Ostream &Str) const override; |
84 | 84 |
85 static bool classof(const Operand *Operand) { | 85 static bool classof(const Operand *Operand) { |
86 return Operand->getKind() == static_cast<OperandKind>(kMem); | 86 return Operand->getKind() == static_cast<OperandKind>(kMem); |
87 } | 87 } |
88 | 88 |
89 private: | 89 private: |
90 OperandX8632Mem(Cfg *Func, Type Ty, Variable *Base, Constant *Offset, | 90 OperandX8632Mem(Cfg *Func, Type Ty, Variable *Base, Constant *Offset, |
(...skipping 17 matching lines...) Expand all Loading... |
108 VariableSplit(const VariableSplit &) = delete; | 108 VariableSplit(const VariableSplit &) = delete; |
109 VariableSplit &operator=(const VariableSplit &) = delete; | 109 VariableSplit &operator=(const VariableSplit &) = delete; |
110 | 110 |
111 public: | 111 public: |
112 enum Portion { Low, High }; | 112 enum Portion { Low, High }; |
113 static VariableSplit *create(Cfg *Func, Variable *Var, Portion Part) { | 113 static VariableSplit *create(Cfg *Func, Variable *Var, Portion Part) { |
114 return new (Func->allocate<VariableSplit>()) VariableSplit(Func, Var, Part); | 114 return new (Func->allocate<VariableSplit>()) VariableSplit(Func, Var, Part); |
115 } | 115 } |
116 int32_t getOffset() const { return Part == High ? 4 : 0; } | 116 int32_t getOffset() const { return Part == High ? 4 : 0; } |
117 | 117 |
118 x86::Address toAsmAddress(const Cfg *Func) const; | 118 X8632::Address toAsmAddress(const Cfg *Func) const; |
119 void emit(const Cfg *Func) const override; | 119 void emit(const Cfg *Func) const override; |
120 using OperandX8632::dump; | 120 using OperandX8632::dump; |
121 void dump(const Cfg *Func, Ostream &Str) const override; | 121 void dump(const Cfg *Func, Ostream &Str) const override; |
122 | 122 |
123 static bool classof(const Operand *Operand) { | 123 static bool classof(const Operand *Operand) { |
124 return Operand->getKind() == static_cast<OperandKind>(kSplit); | 124 return Operand->getKind() == static_cast<OperandKind>(kSplit); |
125 } | 125 } |
126 | 126 |
127 private: | 127 private: |
128 VariableSplit(Cfg *Func, Variable *Var, Portion Part) | 128 VariableSplit(Cfg *Func, Variable *Var, Portion Part) |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 void dump(const Cfg *Func) const override; | 494 void dump(const Cfg *Func) const override; |
495 static bool classof(const Inst *Inst) { return isClassof(Inst, Call); } | 495 static bool classof(const Inst *Inst) { return isClassof(Inst, Call); } |
496 | 496 |
497 private: | 497 private: |
498 InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget); | 498 InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget); |
499 ~InstX8632Call() override {} | 499 ~InstX8632Call() override {} |
500 }; | 500 }; |
501 | 501 |
502 // Emit a one-operand (GPR) instruction. | 502 // Emit a one-operand (GPR) instruction. |
503 void emitIASOpTyGPR(const Cfg *Func, Type Ty, const Operand *Var, | 503 void emitIASOpTyGPR(const Cfg *Func, Type Ty, const Operand *Var, |
504 const x86::AssemblerX86::GPREmitterOneOp &Emitter); | 504 const X8632::AssemblerX8632::GPREmitterOneOp &Emitter); |
505 | 505 |
506 // Instructions of the form x := op(x). | 506 // Instructions of the form x := op(x). |
507 template <InstX8632::InstKindX8632 K> | 507 template <InstX8632::InstKindX8632 K> |
508 class InstX8632InplaceopGPR : public InstX8632 { | 508 class InstX8632InplaceopGPR : public InstX8632 { |
509 InstX8632InplaceopGPR() = delete; | 509 InstX8632InplaceopGPR() = delete; |
510 InstX8632InplaceopGPR(const InstX8632InplaceopGPR &) = delete; | 510 InstX8632InplaceopGPR(const InstX8632InplaceopGPR &) = delete; |
511 InstX8632InplaceopGPR &operator=(const InstX8632InplaceopGPR &) = delete; | 511 InstX8632InplaceopGPR &operator=(const InstX8632InplaceopGPR &) = delete; |
512 | 512 |
513 public: | 513 public: |
514 static InstX8632InplaceopGPR *create(Cfg *Func, Operand *SrcDest) { | 514 static InstX8632InplaceopGPR *create(Cfg *Func, Operand *SrcDest) { |
(...skipping 24 matching lines...) Expand all Loading... |
539 } | 539 } |
540 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 540 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
541 | 541 |
542 private: | 542 private: |
543 InstX8632InplaceopGPR(Cfg *Func, Operand *SrcDest) | 543 InstX8632InplaceopGPR(Cfg *Func, Operand *SrcDest) |
544 : InstX8632(Func, K, 1, llvm::dyn_cast<Variable>(SrcDest)) { | 544 : InstX8632(Func, K, 1, llvm::dyn_cast<Variable>(SrcDest)) { |
545 addSource(SrcDest); | 545 addSource(SrcDest); |
546 } | 546 } |
547 ~InstX8632InplaceopGPR() override {} | 547 ~InstX8632InplaceopGPR() override {} |
548 static const char *Opcode; | 548 static const char *Opcode; |
549 static const x86::AssemblerX86::GPREmitterOneOp Emitter; | 549 static const X8632::AssemblerX8632::GPREmitterOneOp Emitter; |
550 }; | 550 }; |
551 | 551 |
552 // Emit a two-operand (GPR) instruction, where the dest operand is a | 552 // Emit a two-operand (GPR) instruction, where the dest operand is a |
553 // Variable that's guaranteed to be a register. | 553 // Variable that's guaranteed to be a register. |
554 template <bool VarCanBeByte = true, bool SrcCanBeByte = true> | 554 template <bool VarCanBeByte = true, bool SrcCanBeByte = true> |
555 void emitIASRegOpTyGPR(const Cfg *Func, Type Ty, const Variable *Dst, | 555 void emitIASRegOpTyGPR(const Cfg *Func, Type Ty, const Variable *Dst, |
556 const Operand *Src, | 556 const Operand *Src, |
557 const x86::AssemblerX86::GPREmitterRegOp &Emitter); | 557 const X8632::AssemblerX8632::GPREmitterRegOp &Emitter); |
558 | 558 |
559 // Instructions of the form x := op(y). | 559 // Instructions of the form x := op(y). |
560 template <InstX8632::InstKindX8632 K> | 560 template <InstX8632::InstKindX8632 K> |
561 class InstX8632UnaryopGPR : public InstX8632 { | 561 class InstX8632UnaryopGPR : public InstX8632 { |
562 InstX8632UnaryopGPR() = delete; | 562 InstX8632UnaryopGPR() = delete; |
563 InstX8632UnaryopGPR(const InstX8632UnaryopGPR &) = delete; | 563 InstX8632UnaryopGPR(const InstX8632UnaryopGPR &) = delete; |
564 InstX8632UnaryopGPR &operator=(const InstX8632UnaryopGPR &) = delete; | 564 InstX8632UnaryopGPR &operator=(const InstX8632UnaryopGPR &) = delete; |
565 | 565 |
566 public: | 566 public: |
567 static InstX8632UnaryopGPR *create(Cfg *Func, Variable *Dest, Operand *Src) { | 567 static InstX8632UnaryopGPR *create(Cfg *Func, Variable *Dest, Operand *Src) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 } | 603 } |
604 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 604 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
605 | 605 |
606 private: | 606 private: |
607 InstX8632UnaryopGPR(Cfg *Func, Variable *Dest, Operand *Src) | 607 InstX8632UnaryopGPR(Cfg *Func, Variable *Dest, Operand *Src) |
608 : InstX8632(Func, K, 1, Dest) { | 608 : InstX8632(Func, K, 1, Dest) { |
609 addSource(Src); | 609 addSource(Src); |
610 } | 610 } |
611 ~InstX8632UnaryopGPR() override {} | 611 ~InstX8632UnaryopGPR() override {} |
612 static const char *Opcode; | 612 static const char *Opcode; |
613 static const x86::AssemblerX86::GPREmitterRegOp Emitter; | 613 static const X8632::AssemblerX8632::GPREmitterRegOp Emitter; |
614 }; | 614 }; |
615 | 615 |
616 void emitIASRegOpTyXMM(const Cfg *Func, Type Ty, const Variable *Var, | 616 void emitIASRegOpTyXMM(const Cfg *Func, Type Ty, const Variable *Var, |
617 const Operand *Src, | 617 const Operand *Src, |
618 const x86::AssemblerX86::XmmEmitterRegOp &Emitter); | 618 const X8632::AssemblerX8632::XmmEmitterRegOp &Emitter); |
619 | 619 |
620 template <InstX8632::InstKindX8632 K> | 620 template <InstX8632::InstKindX8632 K> |
621 class InstX8632UnaryopXmm : public InstX8632 { | 621 class InstX8632UnaryopXmm : public InstX8632 { |
622 InstX8632UnaryopXmm() = delete; | 622 InstX8632UnaryopXmm() = delete; |
623 InstX8632UnaryopXmm(const InstX8632UnaryopXmm &) = delete; | 623 InstX8632UnaryopXmm(const InstX8632UnaryopXmm &) = delete; |
624 InstX8632UnaryopXmm &operator=(const InstX8632UnaryopXmm &) = delete; | 624 InstX8632UnaryopXmm &operator=(const InstX8632UnaryopXmm &) = delete; |
625 | 625 |
626 public: | 626 public: |
627 static InstX8632UnaryopXmm *create(Cfg *Func, Variable *Dest, Operand *Src) { | 627 static InstX8632UnaryopXmm *create(Cfg *Func, Variable *Dest, Operand *Src) { |
628 return new (Func->allocate<InstX8632UnaryopXmm>()) | 628 return new (Func->allocate<InstX8632UnaryopXmm>()) |
(...skipping 24 matching lines...) Expand all Loading... |
653 } | 653 } |
654 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 654 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
655 | 655 |
656 private: | 656 private: |
657 InstX8632UnaryopXmm(Cfg *Func, Variable *Dest, Operand *Src) | 657 InstX8632UnaryopXmm(Cfg *Func, Variable *Dest, Operand *Src) |
658 : InstX8632(Func, K, 1, Dest) { | 658 : InstX8632(Func, K, 1, Dest) { |
659 addSource(Src); | 659 addSource(Src); |
660 } | 660 } |
661 ~InstX8632UnaryopXmm() override {} | 661 ~InstX8632UnaryopXmm() override {} |
662 static const char *Opcode; | 662 static const char *Opcode; |
663 static const x86::AssemblerX86::XmmEmitterRegOp Emitter; | 663 static const X8632::AssemblerX8632::XmmEmitterRegOp Emitter; |
664 }; | 664 }; |
665 | 665 |
666 // See the definition of emitTwoAddress() for a description of | 666 // See the definition of emitTwoAddress() for a description of |
667 // ShiftHack. | 667 // ShiftHack. |
668 void emitTwoAddress(const char *Opcode, const Inst *Inst, const Cfg *Func, | 668 void emitTwoAddress(const char *Opcode, const Inst *Inst, const Cfg *Func, |
669 bool ShiftHack = false); | 669 bool ShiftHack = false); |
670 | 670 |
671 void emitIASGPRShift(const Cfg *Func, Type Ty, const Variable *Var, | 671 void emitIASGPRShift(const Cfg *Func, Type Ty, const Variable *Var, |
672 const Operand *Src, | 672 const Operand *Src, |
673 const x86::AssemblerX86::GPREmitterShiftOp &Emitter); | 673 const X8632::AssemblerX8632::GPREmitterShiftOp &Emitter); |
674 | 674 |
675 template <InstX8632::InstKindX8632 K> | 675 template <InstX8632::InstKindX8632 K> |
676 class InstX8632BinopGPRShift : public InstX8632 { | 676 class InstX8632BinopGPRShift : public InstX8632 { |
677 InstX8632BinopGPRShift() = delete; | 677 InstX8632BinopGPRShift() = delete; |
678 InstX8632BinopGPRShift(const InstX8632BinopGPRShift &) = delete; | 678 InstX8632BinopGPRShift(const InstX8632BinopGPRShift &) = delete; |
679 InstX8632BinopGPRShift &operator=(const InstX8632BinopGPRShift &) = delete; | 679 InstX8632BinopGPRShift &operator=(const InstX8632BinopGPRShift &) = delete; |
680 | 680 |
681 public: | 681 public: |
682 // Create a binary-op GPR shift instruction. | 682 // Create a binary-op GPR shift instruction. |
683 static InstX8632BinopGPRShift *create(Cfg *Func, Variable *Dest, | 683 static InstX8632BinopGPRShift *create(Cfg *Func, Variable *Dest, |
(...skipping 23 matching lines...) Expand all Loading... |
707 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 707 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
708 | 708 |
709 private: | 709 private: |
710 InstX8632BinopGPRShift(Cfg *Func, Variable *Dest, Operand *Source) | 710 InstX8632BinopGPRShift(Cfg *Func, Variable *Dest, Operand *Source) |
711 : InstX8632(Func, K, 2, Dest) { | 711 : InstX8632(Func, K, 2, Dest) { |
712 addSource(Dest); | 712 addSource(Dest); |
713 addSource(Source); | 713 addSource(Source); |
714 } | 714 } |
715 ~InstX8632BinopGPRShift() override {} | 715 ~InstX8632BinopGPRShift() override {} |
716 static const char *Opcode; | 716 static const char *Opcode; |
717 static const x86::AssemblerX86::GPREmitterShiftOp Emitter; | 717 static const X8632::AssemblerX8632::GPREmitterShiftOp Emitter; |
718 }; | 718 }; |
719 | 719 |
720 template <InstX8632::InstKindX8632 K> | 720 template <InstX8632::InstKindX8632 K> |
721 class InstX8632BinopGPR : public InstX8632 { | 721 class InstX8632BinopGPR : public InstX8632 { |
722 InstX8632BinopGPR() = delete; | 722 InstX8632BinopGPR() = delete; |
723 InstX8632BinopGPR(const InstX8632BinopGPR &) = delete; | 723 InstX8632BinopGPR(const InstX8632BinopGPR &) = delete; |
724 InstX8632BinopGPR &operator=(const InstX8632BinopGPR &) = delete; | 724 InstX8632BinopGPR &operator=(const InstX8632BinopGPR &) = delete; |
725 | 725 |
726 public: | 726 public: |
727 // Create an ordinary binary-op instruction like add or sub. | 727 // Create an ordinary binary-op instruction like add or sub. |
(...skipping 23 matching lines...) Expand all Loading... |
751 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 751 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
752 | 752 |
753 private: | 753 private: |
754 InstX8632BinopGPR(Cfg *Func, Variable *Dest, Operand *Source) | 754 InstX8632BinopGPR(Cfg *Func, Variable *Dest, Operand *Source) |
755 : InstX8632(Func, K, 2, Dest) { | 755 : InstX8632(Func, K, 2, Dest) { |
756 addSource(Dest); | 756 addSource(Dest); |
757 addSource(Source); | 757 addSource(Source); |
758 } | 758 } |
759 ~InstX8632BinopGPR() override {} | 759 ~InstX8632BinopGPR() override {} |
760 static const char *Opcode; | 760 static const char *Opcode; |
761 static const x86::AssemblerX86::GPREmitterRegOp Emitter; | 761 static const X8632::AssemblerX8632::GPREmitterRegOp Emitter; |
762 }; | 762 }; |
763 | 763 |
764 template <InstX8632::InstKindX8632 K, bool NeedsElementType> | 764 template <InstX8632::InstKindX8632 K, bool NeedsElementType> |
765 class InstX8632BinopXmm : public InstX8632 { | 765 class InstX8632BinopXmm : public InstX8632 { |
766 InstX8632BinopXmm() = delete; | 766 InstX8632BinopXmm() = delete; |
767 InstX8632BinopXmm(const InstX8632BinopXmm &) = delete; | 767 InstX8632BinopXmm(const InstX8632BinopXmm &) = delete; |
768 InstX8632BinopXmm &operator=(const InstX8632BinopXmm &) = delete; | 768 InstX8632BinopXmm &operator=(const InstX8632BinopXmm &) = delete; |
769 | 769 |
770 public: | 770 public: |
771 // Create an XMM binary-op instruction like addss or addps. | 771 // Create an XMM binary-op instruction like addss or addps. |
(...skipping 27 matching lines...) Expand all Loading... |
799 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 799 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
800 | 800 |
801 private: | 801 private: |
802 InstX8632BinopXmm(Cfg *Func, Variable *Dest, Operand *Source) | 802 InstX8632BinopXmm(Cfg *Func, Variable *Dest, Operand *Source) |
803 : InstX8632(Func, K, 2, Dest) { | 803 : InstX8632(Func, K, 2, Dest) { |
804 addSource(Dest); | 804 addSource(Dest); |
805 addSource(Source); | 805 addSource(Source); |
806 } | 806 } |
807 ~InstX8632BinopXmm() override {} | 807 ~InstX8632BinopXmm() override {} |
808 static const char *Opcode; | 808 static const char *Opcode; |
809 static const x86::AssemblerX86::XmmEmitterRegOp Emitter; | 809 static const X8632::AssemblerX8632::XmmEmitterRegOp Emitter; |
810 }; | 810 }; |
811 | 811 |
812 void emitIASXmmShift(const Cfg *Func, Type Ty, const Variable *Var, | 812 void emitIASXmmShift(const Cfg *Func, Type Ty, const Variable *Var, |
813 const Operand *Src, | 813 const Operand *Src, |
814 const x86::AssemblerX86::XmmEmitterShiftOp &Emitter); | 814 const X8632::AssemblerX8632::XmmEmitterShiftOp &Emitter); |
815 | 815 |
816 template <InstX8632::InstKindX8632 K, bool AllowAllTypes = false> | 816 template <InstX8632::InstKindX8632 K, bool AllowAllTypes = false> |
817 class InstX8632BinopXmmShift : public InstX8632 { | 817 class InstX8632BinopXmmShift : public InstX8632 { |
818 InstX8632BinopXmmShift() = delete; | 818 InstX8632BinopXmmShift() = delete; |
819 InstX8632BinopXmmShift(const InstX8632BinopXmmShift &) = delete; | 819 InstX8632BinopXmmShift(const InstX8632BinopXmmShift &) = delete; |
820 InstX8632BinopXmmShift &operator=(const InstX8632BinopXmmShift &) = delete; | 820 InstX8632BinopXmmShift &operator=(const InstX8632BinopXmmShift &) = delete; |
821 | 821 |
822 public: | 822 public: |
823 // Create an XMM binary-op shift operation. | 823 // Create an XMM binary-op shift operation. |
824 static InstX8632BinopXmmShift *create(Cfg *Func, Variable *Dest, | 824 static InstX8632BinopXmmShift *create(Cfg *Func, Variable *Dest, |
(...skipping 27 matching lines...) Expand all Loading... |
852 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } | 852 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } |
853 | 853 |
854 private: | 854 private: |
855 InstX8632BinopXmmShift(Cfg *Func, Variable *Dest, Operand *Source) | 855 InstX8632BinopXmmShift(Cfg *Func, Variable *Dest, Operand *Source) |
856 : InstX8632(Func, K, 2, Dest) { | 856 : InstX8632(Func, K, 2, Dest) { |
857 addSource(Dest); | 857 addSource(Dest); |
858 addSource(Source); | 858 addSource(Source); |
859 } | 859 } |
860 ~InstX8632BinopXmmShift() override {} | 860 ~InstX8632BinopXmmShift() override {} |
861 static const char *Opcode; | 861 static const char *Opcode; |
862 static const x86::AssemblerX86::XmmEmitterShiftOp Emitter; | 862 static const X8632::AssemblerX8632::XmmEmitterShiftOp Emitter; |
863 }; | 863 }; |
864 | 864 |
865 template <InstX8632::InstKindX8632 K> class InstX8632Ternop : public InstX8632 { | 865 template <InstX8632::InstKindX8632 K> class InstX8632Ternop : public InstX8632 { |
866 InstX8632Ternop() = delete; | 866 InstX8632Ternop() = delete; |
867 InstX8632Ternop(const InstX8632Ternop &) = delete; | 867 InstX8632Ternop(const InstX8632Ternop &) = delete; |
868 InstX8632Ternop &operator=(const InstX8632Ternop &) = delete; | 868 InstX8632Ternop &operator=(const InstX8632Ternop &) = delete; |
869 | 869 |
870 public: | 870 public: |
871 // Create a ternary-op instruction like div or idiv. | 871 // Create a ternary-op instruction like div or idiv. |
872 static InstX8632Ternop *create(Cfg *Func, Variable *Dest, Operand *Source1, | 872 static InstX8632Ternop *create(Cfg *Func, Variable *Dest, Operand *Source1, |
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1679 template <> void InstX8632Pinsr::emitIAS(const Cfg *Func) const; | 1679 template <> void InstX8632Pinsr::emitIAS(const Cfg *Func) const; |
1680 template <> void InstX8632Movsx::emitIAS(const Cfg *Func) const; | 1680 template <> void InstX8632Movsx::emitIAS(const Cfg *Func) const; |
1681 template <> void InstX8632Movzx::emitIAS(const Cfg *Func) const; | 1681 template <> void InstX8632Movzx::emitIAS(const Cfg *Func) const; |
1682 template <> void InstX8632Pmull::emitIAS(const Cfg *Func) const; | 1682 template <> void InstX8632Pmull::emitIAS(const Cfg *Func) const; |
1683 template <> void InstX8632Pshufd::emitIAS(const Cfg *Func) const; | 1683 template <> void InstX8632Pshufd::emitIAS(const Cfg *Func) const; |
1684 template <> void InstX8632Shufps::emitIAS(const Cfg *Func) const; | 1684 template <> void InstX8632Shufps::emitIAS(const Cfg *Func) const; |
1685 | 1685 |
1686 } // end of namespace Ice | 1686 } // end of namespace Ice |
1687 | 1687 |
1688 #endif // SUBZERO_SRC_ICEINSTX8632_H | 1688 #endif // SUBZERO_SRC_ICEINSTX8632_H |
OLD | NEW |