OLD | NEW |
1 //===- subzero/src/IceInstX86Base.h - Generic x86 instructions -*- C++ -*--===// | 1 //===- subzero/src/IceInstX86Base.h - Generic 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 /// \file | 10 /// \file |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 Cvt, | 61 Cvt, |
62 Div, | 62 Div, |
63 Divps, | 63 Divps, |
64 Divss, | 64 Divss, |
65 FakeRMW, | 65 FakeRMW, |
66 Fld, | 66 Fld, |
67 Fstp, | 67 Fstp, |
68 Icmp, | 68 Icmp, |
69 Idiv, | 69 Idiv, |
70 Imul, | 70 Imul, |
| 71 ImulImm, |
71 Insertps, | 72 Insertps, |
72 Jmp, | 73 Jmp, |
73 Label, | 74 Label, |
74 Lea, | 75 Lea, |
75 Load, | 76 Load, |
76 Mfence, | 77 Mfence, |
77 Mov, | 78 Mov, |
78 Movd, | 79 Movd, |
79 Movp, | 80 Movp, |
80 Movq, | 81 Movq, |
(...skipping 1534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1615 void emit(const Cfg *Func) const override; | 1616 void emit(const Cfg *Func) const override; |
1616 void emitIAS(const Cfg *Func) const override; | 1617 void emitIAS(const Cfg *Func) const override; |
1617 | 1618 |
1618 private: | 1619 private: |
1619 InstX86Imul(Cfg *Func, Variable *Dest, Operand *Source) | 1620 InstX86Imul(Cfg *Func, Variable *Dest, Operand *Source) |
1620 : InstX86BaseBinopGPR<Machine, InstX86Base<Machine>::Imul>(Func, Dest, | 1621 : InstX86BaseBinopGPR<Machine, InstX86Base<Machine>::Imul>(Func, Dest, |
1621 Source) {} | 1622 Source) {} |
1622 }; | 1623 }; |
1623 | 1624 |
1624 template <class Machine> | 1625 template <class Machine> |
| 1626 class InstX86ImulImm |
| 1627 : public InstX86BaseThreeAddressop<Machine, InstX86Base<Machine>::ImulImm> { |
| 1628 public: |
| 1629 static InstX86ImulImm *create(Cfg *Func, Variable *Dest, Operand *Source0, |
| 1630 Operand *Source1) { |
| 1631 return new (Func->allocate<InstX86ImulImm>()) |
| 1632 InstX86ImulImm(Func, Dest, Source0, Source1); |
| 1633 } |
| 1634 |
| 1635 void emit(const Cfg *Func) const override; |
| 1636 void emitIAS(const Cfg *Func) const override; |
| 1637 |
| 1638 private: |
| 1639 InstX86ImulImm(Cfg *Func, Variable *Dest, Operand *Source0, Operand *Source1) |
| 1640 : InstX86BaseThreeAddressop<Machine, InstX86Base<Machine>::ImulImm>( |
| 1641 Func, Dest, Source0, Source1) {} |
| 1642 }; |
| 1643 |
| 1644 template <class Machine> |
1625 class InstX86Mulps | 1645 class InstX86Mulps |
1626 : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulps, true> { | 1646 : public InstX86BaseBinopXmm<Machine, InstX86Base<Machine>::Mulps, true> { |
1627 public: | 1647 public: |
1628 static InstX86Mulps *create(Cfg *Func, Variable *Dest, Operand *Source) { | 1648 static InstX86Mulps *create(Cfg *Func, Variable *Dest, Operand *Source) { |
1629 return new (Func->allocate<InstX86Mulps>()) | 1649 return new (Func->allocate<InstX86Mulps>()) |
1630 InstX86Mulps(Func, Dest, Source); | 1650 InstX86Mulps(Func, Dest, Source); |
1631 } | 1651 } |
1632 | 1652 |
1633 private: | 1653 private: |
1634 InstX86Mulps(Cfg *Func, Variable *Dest, Operand *Source) | 1654 InstX86Mulps(Cfg *Func, Variable *Dest, Operand *Source) |
(...skipping 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2783 using AndRMW = InstX86AndRMW<Machine>; | 2803 using AndRMW = InstX86AndRMW<Machine>; |
2784 using Pand = InstX86Pand<Machine>; | 2804 using Pand = InstX86Pand<Machine>; |
2785 using Pandn = InstX86Pandn<Machine>; | 2805 using Pandn = InstX86Pandn<Machine>; |
2786 using Or = InstX86Or<Machine>; | 2806 using Or = InstX86Or<Machine>; |
2787 using OrRMW = InstX86OrRMW<Machine>; | 2807 using OrRMW = InstX86OrRMW<Machine>; |
2788 using Por = InstX86Por<Machine>; | 2808 using Por = InstX86Por<Machine>; |
2789 using Xor = InstX86Xor<Machine>; | 2809 using Xor = InstX86Xor<Machine>; |
2790 using XorRMW = InstX86XorRMW<Machine>; | 2810 using XorRMW = InstX86XorRMW<Machine>; |
2791 using Pxor = InstX86Pxor<Machine>; | 2811 using Pxor = InstX86Pxor<Machine>; |
2792 using Imul = InstX86Imul<Machine>; | 2812 using Imul = InstX86Imul<Machine>; |
| 2813 using ImulImm = InstX86ImulImm<Machine>; |
2793 using Mulps = InstX86Mulps<Machine>; | 2814 using Mulps = InstX86Mulps<Machine>; |
2794 using Mulss = InstX86Mulss<Machine>; | 2815 using Mulss = InstX86Mulss<Machine>; |
2795 using Pmull = InstX86Pmull<Machine>; | 2816 using Pmull = InstX86Pmull<Machine>; |
2796 using Pmuludq = InstX86Pmuludq<Machine>; | 2817 using Pmuludq = InstX86Pmuludq<Machine>; |
2797 using Divps = InstX86Divps<Machine>; | 2818 using Divps = InstX86Divps<Machine>; |
2798 using Divss = InstX86Divss<Machine>; | 2819 using Divss = InstX86Divss<Machine>; |
2799 using Rol = InstX86Rol<Machine>; | 2820 using Rol = InstX86Rol<Machine>; |
2800 using Shl = InstX86Shl<Machine>; | 2821 using Shl = InstX86Shl<Machine>; |
2801 using Psll = InstX86Psll<Machine>; | 2822 using Psll = InstX86Psll<Machine>; |
2802 using Psrl = InstX86Psrl<Machine>; | 2823 using Psrl = InstX86Psrl<Machine>; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2890 template <> const char *InstX86AndRMW<Machine>::Base::Opcode = "and"; \ | 2911 template <> const char *InstX86AndRMW<Machine>::Base::Opcode = "and"; \ |
2891 template <> const char *InstX86Pand<Machine>::Base::Opcode = "pand"; \ | 2912 template <> const char *InstX86Pand<Machine>::Base::Opcode = "pand"; \ |
2892 template <> const char *InstX86Pandn<Machine>::Base::Opcode = "pandn"; \ | 2913 template <> const char *InstX86Pandn<Machine>::Base::Opcode = "pandn"; \ |
2893 template <> const char *InstX86Or<Machine>::Base::Opcode = "or"; \ | 2914 template <> const char *InstX86Or<Machine>::Base::Opcode = "or"; \ |
2894 template <> const char *InstX86OrRMW<Machine>::Base::Opcode = "or"; \ | 2915 template <> const char *InstX86OrRMW<Machine>::Base::Opcode = "or"; \ |
2895 template <> const char *InstX86Por<Machine>::Base::Opcode = "por"; \ | 2916 template <> const char *InstX86Por<Machine>::Base::Opcode = "por"; \ |
2896 template <> const char *InstX86Xor<Machine>::Base::Opcode = "xor"; \ | 2917 template <> const char *InstX86Xor<Machine>::Base::Opcode = "xor"; \ |
2897 template <> const char *InstX86XorRMW<Machine>::Base::Opcode = "xor"; \ | 2918 template <> const char *InstX86XorRMW<Machine>::Base::Opcode = "xor"; \ |
2898 template <> const char *InstX86Pxor<Machine>::Base::Opcode = "pxor"; \ | 2919 template <> const char *InstX86Pxor<Machine>::Base::Opcode = "pxor"; \ |
2899 template <> const char *InstX86Imul<Machine>::Base::Opcode = "imul"; \ | 2920 template <> const char *InstX86Imul<Machine>::Base::Opcode = "imul"; \ |
| 2921 template <> const char *InstX86ImulImm<Machine>::Base::Opcode = "imul"; \ |
2900 template <> const char *InstX86Mulps<Machine>::Base::Opcode = "mulps"; \ | 2922 template <> const char *InstX86Mulps<Machine>::Base::Opcode = "mulps"; \ |
2901 template <> const char *InstX86Mulss<Machine>::Base::Opcode = "mulss"; \ | 2923 template <> const char *InstX86Mulss<Machine>::Base::Opcode = "mulss"; \ |
2902 template <> const char *InstX86Pmull<Machine>::Base::Opcode = "pmull"; \ | 2924 template <> const char *InstX86Pmull<Machine>::Base::Opcode = "pmull"; \ |
2903 template <> const char *InstX86Pmuludq<Machine>::Base::Opcode = "pmuludq"; \ | 2925 template <> const char *InstX86Pmuludq<Machine>::Base::Opcode = "pmuludq"; \ |
2904 template <> const char *InstX86Div<Machine>::Base::Opcode = "div"; \ | 2926 template <> const char *InstX86Div<Machine>::Base::Opcode = "div"; \ |
2905 template <> const char *InstX86Divps<Machine>::Base::Opcode = "divps"; \ | 2927 template <> const char *InstX86Divps<Machine>::Base::Opcode = "divps"; \ |
2906 template <> const char *InstX86Idiv<Machine>::Base::Opcode = "idiv"; \ | 2928 template <> const char *InstX86Idiv<Machine>::Base::Opcode = "idiv"; \ |
2907 template <> const char *InstX86Divss<Machine>::Base::Opcode = "divss"; \ | 2929 template <> const char *InstX86Divss<Machine>::Base::Opcode = "divss"; \ |
2908 template <> const char *InstX86Rol<Machine>::Base::Opcode = "rol"; \ | 2930 template <> const char *InstX86Rol<Machine>::Base::Opcode = "rol"; \ |
2909 template <> const char *InstX86Shl<Machine>::Base::Opcode = "shl"; \ | 2931 template <> const char *InstX86Shl<Machine>::Base::Opcode = "shl"; \ |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3197 &InstX86Base<Machine>::Traits::Assembler::psrl}; \ | 3219 &InstX86Base<Machine>::Traits::Assembler::psrl}; \ |
3198 } \ | 3220 } \ |
3199 } | 3221 } |
3200 | 3222 |
3201 } // end of namespace X86Internal | 3223 } // end of namespace X86Internal |
3202 } // end of namespace Ice | 3224 } // end of namespace Ice |
3203 | 3225 |
3204 #include "IceInstX86BaseImpl.h" | 3226 #include "IceInstX86BaseImpl.h" |
3205 | 3227 |
3206 #endif // SUBZERO_SRC_ICEINSTX86BASE_H | 3228 #endif // SUBZERO_SRC_ICEINSTX86BASE_H |
OLD | NEW |