Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(657)

Side by Side Diff: src/IceInstMIPS32.h

Issue 2047043002: Subzero, MIPS32: Floating point comparison (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addressing review comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/IceInstMIPS32.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceInstMIPS32.h - MIPS32 machine instrs --*- C++ -*-----===// 1 //===- subzero/src/IceInstMIPS32.h - MIPS32 machine instrs --*- 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 /// OperandMips32 extends the Operand hierarchy. 48 /// OperandMips32 extends the Operand hierarchy.
49 // 49 //
50 class OperandMIPS32 : public Operand { 50 class OperandMIPS32 : public Operand {
51 OperandMIPS32() = delete; 51 OperandMIPS32() = delete;
52 OperandMIPS32(const OperandMIPS32 &) = delete; 52 OperandMIPS32(const OperandMIPS32 &) = delete;
53 OperandMIPS32 &operator=(const OperandMIPS32 &) = delete; 53 OperandMIPS32 &operator=(const OperandMIPS32 &) = delete;
54 54
55 public: 55 public:
56 enum OperandKindMIPS32 { 56 enum OperandKindMIPS32 {
57 k__Start = Operand::kTarget, 57 k__Start = Operand::kTarget,
58 kFCC,
58 kMem, 59 kMem,
59 }; 60 };
60 61
61 using Operand::dump; 62 using Operand::dump;
62 void dump(const Cfg *, Ostream &Str) const override { 63 void dump(const Cfg *, Ostream &Str) const override {
63 if (BuildDefs::dump()) 64 if (BuildDefs::dump())
64 Str << "<OperandMIPS32>"; 65 Str << "<OperandMIPS32>";
65 } 66 }
66 67
67 protected: 68 protected:
68 OperandMIPS32(OperandKindMIPS32 Kind, Type Ty) 69 OperandMIPS32(OperandKindMIPS32 Kind, Type Ty)
69 : Operand(static_cast<OperandKind>(Kind), Ty) {} 70 : Operand(static_cast<OperandKind>(Kind), Ty) {}
70 }; 71 };
71 72
73 class OperandMIPS32FCC : public OperandMIPS32 {
74 OperandMIPS32FCC() = delete;
75 OperandMIPS32FCC(const OperandMIPS32FCC &) = delete;
76 OperandMIPS32FCC &operator=(const OperandMIPS32FCC &) = delete;
77
78 public:
79 enum FCC { FCC0 = 0, FCC1, FCC2, FCC3, FCC4, FCC5, FCC6, FCC7 };
80 static OperandMIPS32FCC *create(Cfg *Func,
81 OperandMIPS32FCC::FCC FCC) {
82 return new (Func->allocate<OperandMIPS32FCC>())
83 OperandMIPS32FCC(FCC);
84 }
85
86 void emit(const Cfg *Func) const override {
87 if (!BuildDefs::dump())
88 return;
89 Ostream &Str = Func->getContext()->getStrEmit();
90 Str << "$fcc" << static_cast<uint16_t>(FCC);
91 }
92
93 static bool classof(const Operand *Operand) {
94 return Operand->getKind() == static_cast<OperandKind>(kFCC);
95 }
96
97 void dump(const Cfg *Func, Ostream &Str) const override {
98 (void)Func;
99 (void)Str;
100 }
101
102 private:
103 OperandMIPS32FCC(OperandMIPS32FCC::FCC FCC)
104 : OperandMIPS32(kFCC, IceType_i32), FCC(FCC) {
105 };
106
107 const OperandMIPS32FCC::FCC FCC;
108 };
109
72 class OperandMIPS32Mem : public OperandMIPS32 { 110 class OperandMIPS32Mem : public OperandMIPS32 {
73 OperandMIPS32Mem() = delete; 111 OperandMIPS32Mem() = delete;
74 OperandMIPS32Mem(const OperandMIPS32Mem &) = delete; 112 OperandMIPS32Mem(const OperandMIPS32Mem &) = delete;
75 OperandMIPS32Mem &operator=(const OperandMIPS32Mem &) = delete; 113 OperandMIPS32Mem &operator=(const OperandMIPS32Mem &) = delete;
76 114
77 public: 115 public:
78 /// Memory operand addressing mode. 116 /// Memory operand addressing mode.
79 /// The enum value also carries the encoding. 117 /// The enum value also carries the encoding.
80 // TODO(jvoung): unify with the assembler. 118 // TODO(jvoung): unify with the assembler.
81 enum AddrMode { Offset }; 119 enum AddrMode { Offset };
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 Abs_d, 186 Abs_d,
149 Abs_s, 187 Abs_s,
150 Add, 188 Add,
151 Add_d, 189 Add_d,
152 Add_s, 190 Add_s,
153 Addiu, 191 Addiu,
154 Addu, 192 Addu,
155 And, 193 And,
156 Andi, 194 Andi,
157 Br, 195 Br,
196 C_eq_d,
197 C_eq_s,
198 C_ole_d,
199 C_ole_s,
200 C_olt_d,
201 C_olt_s,
202 C_ueq_d,
203 C_ueq_s,
204 C_ule_d,
205 C_ule_s,
206 C_ult_d,
207 C_ult_s,
208 C_un_d,
209 C_un_s,
158 Call, 210 Call,
159 Cvt_d_l, 211 Cvt_d_l,
160 Cvt_d_s, 212 Cvt_d_s,
161 Cvt_d_w, 213 Cvt_d_w,
162 Cvt_s_d, 214 Cvt_s_d,
163 Cvt_s_l, 215 Cvt_s_l,
164 Cvt_s_w, 216 Cvt_s_w,
165 Div, 217 Div,
166 Div_d, 218 Div_d,
167 Div_s, 219 Div_s,
168 Divu, 220 Divu,
169 La, 221 La,
170 Label, 222 Label,
171 Ldc1, 223 Ldc1,
172 Lui, 224 Lui,
173 Lw, 225 Lw,
174 Lwc1, 226 Lwc1,
175 Mfc1, 227 Mfc1,
176 Mfhi, 228 Mfhi,
177 Mflo, 229 Mflo,
178 Mov, // actually a pseudo op for addi rd, rs, 0 230 Mov, // actually a pseudo op for addi rd, rs, 0
179 Mov_d, 231 Mov_d,
180 Mov_s, 232 Mov_s,
233 Movf,
234 Movt,
181 Mtc1, 235 Mtc1,
182 Mthi, 236 Mthi,
183 Mtlo, 237 Mtlo,
184 Mul, 238 Mul,
185 Mul_d, 239 Mul_d,
186 Mul_s, 240 Mul_s,
187 Mult, 241 Mult,
188 Multu, 242 Multu,
189 Or, 243 Or,
190 Ori, 244 Ori,
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 Operand *getCallTarget() const { return getSrc(0); } 853 Operand *getCallTarget() const { return getSrc(0); }
800 void emit(const Cfg *Func) const override; 854 void emit(const Cfg *Func) const override;
801 void emitIAS(const Cfg *Func) const override; 855 void emitIAS(const Cfg *Func) const override;
802 void dump(const Cfg *Func) const override; 856 void dump(const Cfg *Func) const override;
803 static bool classof(const Inst *Inst) { return isClassof(Inst, Call); } 857 static bool classof(const Inst *Inst) { return isClassof(Inst, Call); }
804 858
805 private: 859 private:
806 InstMIPS32Call(Cfg *Func, Variable *Dest, Operand *CallTarget); 860 InstMIPS32Call(Cfg *Func, Variable *Dest, Operand *CallTarget);
807 }; 861 };
808 862
863 template <InstMIPS32::InstKindMIPS32 K>
864 class InstMIPS32FPCmp : public InstMIPS32 {
865 InstMIPS32FPCmp() = delete;
866 InstMIPS32FPCmp(const InstMIPS32FPCmp &) = delete;
867 InstMIPS32Call &operator=(const InstMIPS32FPCmp &) = delete;
868
869 public:
870 static InstMIPS32FPCmp *create(Cfg *Func, Variable *Src0, Variable *Src1) {
871 return new (Func->allocate<InstMIPS32FPCmp>())
872 InstMIPS32FPCmp(Func, Src0, Src1);
873 }
874
875 void emit(const Cfg *Func) const override {
876 if (!BuildDefs::dump())
877 return;
878 Ostream &Str = Func->getContext()->getStrEmit();
879 assert(getSrcSize() == 2);
880 Str << "\t" << Opcode << "\t";
881 getSrc(0)->emit(Func);
882 Str << ", ";
883 getSrc(1)->emit(Func);
884 }
885
886 void emitIAS(const Cfg *Func) const override {
887 (void)Func;
888 llvm_unreachable("Not yet implemented");
889 }
890
891 void dump(const Cfg *Func) const override {
892 (void)Func;
893 if (!BuildDefs::dump())
894 return;
895 Ostream &Str = Func->getContext()->getStrDump();
896 dumpOpcode(Str, Opcode, getSrc(0)->getType());
897 Str << " ";
898 dumpSources(Func);
899 }
900
901 static bool classof(const Inst *Inst) { return isClassof(Inst, Call); }
902
903 private:
904 InstMIPS32FPCmp(Cfg *Func, Variable *Src0, Variable *Src1)
905 : InstMIPS32(Func, K, 2, nullptr) {
906 addSource(Src0);
907 addSource(Src1);
908 };
909
910 static const char *Opcode;
911 };
912
809 template <InstMIPS32::InstKindMIPS32 K, bool Signed = false> 913 template <InstMIPS32::InstKindMIPS32 K, bool Signed = false>
810 class InstMIPS32Imm16 : public InstMIPS32 { 914 class InstMIPS32Imm16 : public InstMIPS32 {
811 InstMIPS32Imm16() = delete; 915 InstMIPS32Imm16() = delete;
812 InstMIPS32Imm16(const InstMIPS32Imm16 &) = delete; 916 InstMIPS32Imm16(const InstMIPS32Imm16 &) = delete;
813 InstMIPS32Imm16 &operator=(const InstMIPS32Imm16 &) = delete; 917 InstMIPS32Imm16 &operator=(const InstMIPS32Imm16 &) = delete;
814 918
815 public: 919 public:
816 static InstMIPS32Imm16 *create(Cfg *Func, Variable *Dest, Operand *Source, 920 static InstMIPS32Imm16 *create(Cfg *Func, Variable *Dest, Operand *Source,
817 uint32_t Imm) { 921 uint32_t Imm) {
818 return new (Func->allocate<InstMIPS32Imm16>()) 922 return new (Func->allocate<InstMIPS32Imm16>())
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 } 974 }
871 975
872 InstMIPS32Imm16(Cfg *Func, Variable *Dest, uint32_t Imm) 976 InstMIPS32Imm16(Cfg *Func, Variable *Dest, uint32_t Imm)
873 : InstMIPS32(Func, K, 0, Dest), Imm(Imm) {} 977 : InstMIPS32(Func, K, 0, Dest), Imm(Imm) {}
874 978
875 static const char *Opcode; 979 static const char *Opcode;
876 980
877 const uint32_t Imm; 981 const uint32_t Imm;
878 }; 982 };
879 983
984 /// Conditional mov
985 template <InstMIPS32::InstKindMIPS32 K>
986 class InstMIPS32MovConditional : public InstMIPS32 {
987 InstMIPS32MovConditional() = delete;
988 InstMIPS32MovConditional(const InstMIPS32MovConditional &) = delete;
989 InstMIPS32MovConditional &
990 operator=(const InstMIPS32MovConditional &) = delete;
991
992 public:
993 static InstMIPS32MovConditional *create(Cfg *Func, Variable *Dest,
994 Variable *Src, Operand *FCC) {
995 return new (Func->allocate<InstMIPS32MovConditional>())
996 InstMIPS32MovConditional(Func, Dest, Src, FCC);
997 }
998
999 void emit(const Cfg *Func) const override {
1000 if (!BuildDefs::dump())
1001 return;
1002 Ostream &Str = Func->getContext()->getStrEmit();
1003 assert(getSrcSize() == 2);
1004 Str << "\t" << Opcode << "\t";
1005 getDest()->emit(Func);
1006 Str << ", ";
1007 getSrc(0)->emit(Func);
1008 Str << ", ";
1009 getSrc(1)->emit(Func);
1010 }
1011
1012 void emitIAS(const Cfg *Func) const override {
1013 (void)Func;
1014 llvm_unreachable("Not yet implemented");
1015 }
1016
1017 void dump(const Cfg *Func) const override {
1018 if (!BuildDefs::dump())
1019 return;
1020 Ostream &Str = Func->getContext()->getStrDump();
1021 dumpDest(Func);
1022 Str << " = ";
1023 dumpOpcode(Str, Opcode, getDest()->getType());
1024 Str << " ";
1025 dumpSources(Func);
1026 }
1027 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
1028
1029 private:
1030 InstMIPS32MovConditional(Cfg *Func, Variable *Dest, Variable *Src,
1031 Operand *FCC)
1032 : InstMIPS32(Func, K, 2, Dest) {
1033 addSource(Src);
1034 addSource(FCC);
1035 }
1036
1037 static const char *Opcode;
1038 };
1039
880 using InstMIPS32Abs_d = InstMIPS32TwoAddrFPR<InstMIPS32::Abs_d>; 1040 using InstMIPS32Abs_d = InstMIPS32TwoAddrFPR<InstMIPS32::Abs_d>;
881 using InstMIPS32Abs_s = InstMIPS32TwoAddrFPR<InstMIPS32::Abs_s>; 1041 using InstMIPS32Abs_s = InstMIPS32TwoAddrFPR<InstMIPS32::Abs_s>;
882 using InstMIPS32Add = InstMIPS32ThreeAddrGPR<InstMIPS32::Add>; 1042 using InstMIPS32Add = InstMIPS32ThreeAddrGPR<InstMIPS32::Add>;
883 using InstMIPS32Add_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Add_d>; 1043 using InstMIPS32Add_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Add_d>;
884 using InstMIPS32Add_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Add_s>; 1044 using InstMIPS32Add_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Add_s>;
885 using InstMIPS32Addu = InstMIPS32ThreeAddrGPR<InstMIPS32::Addu>; 1045 using InstMIPS32Addu = InstMIPS32ThreeAddrGPR<InstMIPS32::Addu>;
886 using InstMIPS32Addiu = InstMIPS32Imm16<InstMIPS32::Addiu, true>; 1046 using InstMIPS32Addiu = InstMIPS32Imm16<InstMIPS32::Addiu, true>;
887 using InstMIPS32And = InstMIPS32ThreeAddrGPR<InstMIPS32::And>; 1047 using InstMIPS32And = InstMIPS32ThreeAddrGPR<InstMIPS32::And>;
888 using InstMIPS32Andi = InstMIPS32Imm16<InstMIPS32::Andi>; 1048 using InstMIPS32Andi = InstMIPS32Imm16<InstMIPS32::Andi>;
1049 using InstMIPS32C_eq_d = InstMIPS32FPCmp<InstMIPS32::C_eq_d>;
1050 using InstMIPS32C_eq_s = InstMIPS32FPCmp<InstMIPS32::C_eq_s>;
1051 using InstMIPS32C_ole_d = InstMIPS32FPCmp<InstMIPS32::C_ole_d>;
1052 using InstMIPS32C_ole_s = InstMIPS32FPCmp<InstMIPS32::C_ole_s>;
1053 using InstMIPS32C_olt_d = InstMIPS32FPCmp<InstMIPS32::C_olt_d>;
1054 using InstMIPS32C_olt_s = InstMIPS32FPCmp<InstMIPS32::C_olt_s>;
1055 using InstMIPS32C_ueq_d = InstMIPS32FPCmp<InstMIPS32::C_ueq_d>;
1056 using InstMIPS32C_ueq_s = InstMIPS32FPCmp<InstMIPS32::C_ueq_s>;
1057 using InstMIPS32C_ule_d = InstMIPS32FPCmp<InstMIPS32::C_ule_d>;
1058 using InstMIPS32C_ule_s = InstMIPS32FPCmp<InstMIPS32::C_ule_s>;
1059 using InstMIPS32C_ult_d = InstMIPS32FPCmp<InstMIPS32::C_ult_d>;
1060 using InstMIPS32C_ult_s = InstMIPS32FPCmp<InstMIPS32::C_ult_s>;
1061 using InstMIPS32C_un_d = InstMIPS32FPCmp<InstMIPS32::C_un_d>;
1062 using InstMIPS32C_un_s = InstMIPS32FPCmp<InstMIPS32::C_un_s>;
889 using InstMIPS32Cvt_d_s = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_d_s>; 1063 using InstMIPS32Cvt_d_s = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_d_s>;
890 using InstMIPS32Cvt_d_l = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_d_l>; 1064 using InstMIPS32Cvt_d_l = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_d_l>;
891 using InstMIPS32Cvt_d_w = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_d_w>; 1065 using InstMIPS32Cvt_d_w = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_d_w>;
892 using InstMIPS32Cvt_s_d = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_s_d>; 1066 using InstMIPS32Cvt_s_d = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_s_d>;
893 using InstMIPS32Cvt_s_l = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_s_l>; 1067 using InstMIPS32Cvt_s_l = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_s_l>;
894 using InstMIPS32Cvt_s_w = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_s_w>; 1068 using InstMIPS32Cvt_s_w = InstMIPS32TwoAddrFPR<InstMIPS32::Cvt_s_w>;
895 using InstMIPS32Div = InstMIPS32ThreeAddrGPR<InstMIPS32::Div>; 1069 using InstMIPS32Div = InstMIPS32ThreeAddrGPR<InstMIPS32::Div>;
896 using InstMIPS32Div_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Div_d>; 1070 using InstMIPS32Div_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Div_d>;
897 using InstMIPS32Div_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Div_s>; 1071 using InstMIPS32Div_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Div_s>;
898 using InstMIPS32Divu = InstMIPS32ThreeAddrGPR<InstMIPS32::Divu>; 1072 using InstMIPS32Divu = InstMIPS32ThreeAddrGPR<InstMIPS32::Divu>;
899 using InstMIPS32La = InstMIPS32UnaryopGPR<InstMIPS32::La>; 1073 using InstMIPS32La = InstMIPS32UnaryopGPR<InstMIPS32::La>;
900 using InstMIPS32Ldc1 = InstMIPS32Load<InstMIPS32::Ldc1>; 1074 using InstMIPS32Ldc1 = InstMIPS32Load<InstMIPS32::Ldc1>;
901 using InstMIPS32Lui = InstMIPS32UnaryopGPR<InstMIPS32::Lui>; 1075 using InstMIPS32Lui = InstMIPS32UnaryopGPR<InstMIPS32::Lui>;
902 using InstMIPS32Lw = InstMIPS32Load<InstMIPS32::Lw>; 1076 using InstMIPS32Lw = InstMIPS32Load<InstMIPS32::Lw>;
903 using InstMIPS32Lwc1 = InstMIPS32Load<InstMIPS32::Lwc1>; 1077 using InstMIPS32Lwc1 = InstMIPS32Load<InstMIPS32::Lwc1>;
904 using InstMIPS32Mfc1 = InstMIPS32TwoAddrGPR<InstMIPS32::Mfc1>; 1078 using InstMIPS32Mfc1 = InstMIPS32TwoAddrGPR<InstMIPS32::Mfc1>;
905 using InstMIPS32Mfhi = InstMIPS32UnaryopGPR<InstMIPS32::Mfhi>; 1079 using InstMIPS32Mfhi = InstMIPS32UnaryopGPR<InstMIPS32::Mfhi>;
906 using InstMIPS32Mflo = InstMIPS32UnaryopGPR<InstMIPS32::Mflo>; 1080 using InstMIPS32Mflo = InstMIPS32UnaryopGPR<InstMIPS32::Mflo>;
907 using InstMIPS32Mov_d = InstMIPS32TwoAddrFPR<InstMIPS32::Mov_d>; 1081 using InstMIPS32Mov_d = InstMIPS32TwoAddrFPR<InstMIPS32::Mov_d>;
908 using InstMIPS32Mov_s = InstMIPS32TwoAddrFPR<InstMIPS32::Mov_s>; 1082 using InstMIPS32Mov_s = InstMIPS32TwoAddrFPR<InstMIPS32::Mov_s>;
1083 using InstMIPS32Movf = InstMIPS32MovConditional<InstMIPS32::Movf>;
1084 using InstMIPS32Movt = InstMIPS32MovConditional<InstMIPS32::Movt>;
909 using InstMIPS32Mtc1 = InstMIPS32TwoAddrGPR<InstMIPS32::Mtc1>; 1085 using InstMIPS32Mtc1 = InstMIPS32TwoAddrGPR<InstMIPS32::Mtc1>;
910 using InstMIPS32Mthi = InstMIPS32UnaryopGPR<InstMIPS32::Mthi>; 1086 using InstMIPS32Mthi = InstMIPS32UnaryopGPR<InstMIPS32::Mthi>;
911 using InstMIPS32Mtlo = InstMIPS32UnaryopGPR<InstMIPS32::Mtlo>; 1087 using InstMIPS32Mtlo = InstMIPS32UnaryopGPR<InstMIPS32::Mtlo>;
912 using InstMIPS32Mul = InstMIPS32ThreeAddrGPR<InstMIPS32::Mul>; 1088 using InstMIPS32Mul = InstMIPS32ThreeAddrGPR<InstMIPS32::Mul>;
913 using InstMIPS32Mul_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Mul_d>; 1089 using InstMIPS32Mul_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Mul_d>;
914 using InstMIPS32Mul_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Mul_s>; 1090 using InstMIPS32Mul_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Mul_s>;
915 using InstMIPS32Mult = InstMIPS32ThreeAddrGPR<InstMIPS32::Mult>; 1091 using InstMIPS32Mult = InstMIPS32ThreeAddrGPR<InstMIPS32::Mult>;
916 using InstMIPS32Multu = InstMIPS32ThreeAddrGPR<InstMIPS32::Multu>; 1092 using InstMIPS32Multu = InstMIPS32ThreeAddrGPR<InstMIPS32::Multu>;
917 using InstMIPS32Or = InstMIPS32ThreeAddrGPR<InstMIPS32::Or>; 1093 using InstMIPS32Or = InstMIPS32ThreeAddrGPR<InstMIPS32::Or>;
918 using InstMIPS32Ori = InstMIPS32Imm16<InstMIPS32::Ori>; 1094 using InstMIPS32Ori = InstMIPS32Imm16<InstMIPS32::Ori>;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 template <> void InstMIPS32Mtlo::emit(const Cfg *Func) const; 1167 template <> void InstMIPS32Mtlo::emit(const Cfg *Func) const;
992 template <> void InstMIPS32Mthi::emit(const Cfg *Func) const; 1168 template <> void InstMIPS32Mthi::emit(const Cfg *Func) const;
993 template <> void InstMIPS32Mult::emit(const Cfg *Func) const; 1169 template <> void InstMIPS32Mult::emit(const Cfg *Func) const;
994 template <> void InstMIPS32Multu::emit(const Cfg *Func) const; 1170 template <> void InstMIPS32Multu::emit(const Cfg *Func) const;
995 template <> void InstMIPS32Lui::emit(const Cfg *Func) const; 1171 template <> void InstMIPS32Lui::emit(const Cfg *Func) const;
996 1172
997 } // end of namespace MIPS32 1173 } // end of namespace MIPS32
998 } // end of namespace Ice 1174 } // end of namespace Ice
999 1175
1000 #endif // SUBZERO_SRC_ICEINSTMIPS32_H 1176 #endif // SUBZERO_SRC_ICEINSTMIPS32_H
OLDNEW
« no previous file with comments | « no previous file | src/IceInstMIPS32.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698