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

Side by Side Diff: src/IceInstMIPS32.h

Issue 1993993004: Subzero, MIPS32: Introduction of floating point registers (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Added floating point register pairs Created 4 years, 6 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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 /// Base class for Mips instructions. 112 /// Base class for Mips instructions.
113 class InstMIPS32 : public InstTarget { 113 class InstMIPS32 : public InstTarget {
114 InstMIPS32() = delete; 114 InstMIPS32() = delete;
115 InstMIPS32(const InstMIPS32 &) = delete; 115 InstMIPS32(const InstMIPS32 &) = delete;
116 InstMIPS32 &operator=(const InstMIPS32 &) = delete; 116 InstMIPS32 &operator=(const InstMIPS32 &) = delete;
117 117
118 public: 118 public:
119 enum InstKindMIPS32 { 119 enum InstKindMIPS32 {
120 k__Start = Inst::Target, 120 k__Start = Inst::Target,
121 Add, 121 Add,
122 Add_d,
123 Add_s,
122 Addiu, 124 Addiu,
123 Addu, 125 Addu,
124 And, 126 And,
125 Andi, 127 Andi,
126 Br, 128 Br,
127 Call, 129 Call,
128 Div, 130 Div,
131 Div_d,
132 Div_s,
129 Divu, 133 Divu,
130 La, 134 La,
131 Label, 135 Label,
132 Lui, 136 Lui,
137 Mfc1,
133 Mfhi, 138 Mfhi,
134 Mflo, 139 Mflo,
135 Mov, // actually a pseudo op for addi rd, rs, 0 140 Mov, // actually a pseudo op for addi rd, rs, 0
141 Mov_d,
142 Mov_s,
143 Mtc1,
136 Mthi, 144 Mthi,
137 Mtlo, 145 Mtlo,
138 Mul, 146 Mul,
147 Mul_d,
148 Mul_s,
139 Mult, 149 Mult,
140 Multu, 150 Multu,
141 Or, 151 Or,
142 Ori, 152 Ori,
143 Ret, 153 Ret,
144 Sll, 154 Sll,
145 Sllv, 155 Sllv,
146 Slt, 156 Slt,
147 Slti, 157 Slti,
148 Sltiu, 158 Sltiu,
149 Sltu, 159 Sltu,
150 Sra, 160 Sra,
151 Srav, 161 Srav,
152 Srl, 162 Srl,
153 Srlv, 163 Srlv,
154 Sub, 164 Sub,
165 Sub_d,
166 Sub_s,
155 Subu, 167 Subu,
156 Xor, 168 Xor,
157 Xori 169 Xori
158 }; 170 };
159 171
160 static const char *getWidthString(Type Ty); 172 static const char *getWidthString(Type Ty);
161 173
162 void dump(const Cfg *Func) const override; 174 void dump(const Cfg *Func) const override;
163 175
164 void dumpOpcode(Ostream &Str, const char *Opcode, Type Ty) const { 176 void dumpOpcode(Ostream &Str, const char *Opcode, Type Ty) const {
165 Str << Opcode << "." << Ty; 177 Str << Opcode << "." << Ty;
166 } 178 }
167 179
168 // TODO(rkotler): while branching is not implemented 180 // TODO(rkotler): while branching is not implemented
169 bool repointEdges(CfgNode *, CfgNode *) override { return true; } 181 bool repointEdges(CfgNode *, CfgNode *) override { return true; }
170 182
171 /// Shared emit routines for common forms of instructions. 183 /// Shared emit routines for common forms of instructions.
172 static void emitUnaryopGPR(const char *Opcode, const InstMIPS32 *Inst, 184 static void emitUnaryopGPR(const char *Opcode, const InstMIPS32 *Inst,
173 const Cfg *Func); 185 const Cfg *Func);
174 static void emitUnaryopGPRFLoHi(const char *Opcode, const InstMIPS32 *Inst, 186 static void emitUnaryopGPRFLoHi(const char *Opcode, const InstMIPS32 *Inst,
175 const Cfg *Func); 187 const Cfg *Func);
176 static void emitUnaryopGPRTLoHi(const char *Opcode, const InstMIPS32 *Inst, 188 static void emitUnaryopGPRTLoHi(const char *Opcode, const InstMIPS32 *Inst,
177 const Cfg *Func); 189 const Cfg *Func);
190 static void emitTwoAddr(const char *Opcode, const InstMIPS32 *Inst,
191 const Cfg *Func);
178 static void emitThreeAddr(const char *Opcode, const InstMIPS32 *Inst, 192 static void emitThreeAddr(const char *Opcode, const InstMIPS32 *Inst,
179 const Cfg *Func); 193 const Cfg *Func);
180 static void emitThreeAddrLoHi(const char *Opcode, const InstMIPS32 *Inst, 194 static void emitThreeAddrLoHi(const char *Opcode, const InstMIPS32 *Inst,
181 const Cfg *Func); 195 const Cfg *Func);
182 196
183 protected: 197 protected:
184 InstMIPS32(Cfg *Func, InstKindMIPS32 Kind, SizeT Maxsrcs, Variable *Dest) 198 InstMIPS32(Cfg *Func, InstKindMIPS32 Kind, SizeT Maxsrcs, Variable *Dest)
185 : InstTarget(Func, static_cast<InstKind>(Kind), Maxsrcs, Dest) {} 199 : InstTarget(Func, static_cast<InstKind>(Kind), Maxsrcs, Dest) {}
186 static bool isClassof(const Inst *Inst, InstKindMIPS32 MyKind) { 200 static bool isClassof(const Inst *Inst, InstKindMIPS32 MyKind) {
187 return Inst->getKind() == static_cast<InstKind>(MyKind); 201 return Inst->getKind() == static_cast<InstKind>(MyKind);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 protected: 266 protected:
253 InstMIPS32UnaryopGPR(Cfg *Func, Variable *Dest, Operand *Src) 267 InstMIPS32UnaryopGPR(Cfg *Func, Variable *Dest, Operand *Src)
254 : InstMIPS32(Func, K, 1, Dest) { 268 : InstMIPS32(Func, K, 1, Dest) {
255 addSource(Src); 269 addSource(Src);
256 } 270 }
257 271
258 private: 272 private:
259 static const char *Opcode; 273 static const char *Opcode;
260 }; 274 };
261 275
276 /// Instructions of the form opcode reg, reg.
277 template <InstMIPS32::InstKindMIPS32 K>
278 class InstMIPS32TwoAddrFPR : public InstMIPS32 {
279 InstMIPS32TwoAddrFPR() = delete;
280 InstMIPS32TwoAddrFPR(const InstMIPS32TwoAddrFPR &) = delete;
281 InstMIPS32TwoAddrFPR &operator=(const InstMIPS32TwoAddrFPR &) = delete;
282
283 public:
284 static InstMIPS32TwoAddrFPR *create(Cfg *Func, Variable *Dest,
285 Variable *Src0) {
286 return new (Func->allocate<InstMIPS32TwoAddrFPR>())
287 InstMIPS32TwoAddrFPR(Func, Dest, Src0);
288 }
289 void emit(const Cfg *Func) const override {
290 if (!BuildDefs::dump())
291 return;
292 emitTwoAddr(Opcode, this, Func);
293 }
294 void emitIAS(const Cfg *Func) const override {
295 (void)Func;
296 llvm_unreachable("Not yet implemented");
297 }
298
299 void dump(const Cfg *Func) const override {
300 if (!BuildDefs::dump())
301 return;
302 Ostream &Str = Func->getContext()->getStrDump();
303 dumpDest(Func);
304 Str << " = ";
305 dumpOpcode(Str, Opcode, getDest()->getType());
306 Str << " ";
307 dumpSources(Func);
308 }
309 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
310
311 private:
312 InstMIPS32TwoAddrFPR(Cfg *Func, Variable *Dest, Variable *Src0)
313 : InstMIPS32(Func, K, 1, Dest) {
314 addSource(Src0);
315 }
316
317 static const char *Opcode;
318 };
319
320 /// Instructions of the form opcode reg, reg.
321 template <InstMIPS32::InstKindMIPS32 K>
322 class InstMIPS32TwoAddrGPR : public InstMIPS32 {
323 InstMIPS32TwoAddrGPR() = delete;
324 InstMIPS32TwoAddrGPR(const InstMIPS32TwoAddrGPR &) = delete;
325 InstMIPS32TwoAddrGPR &operator=(const InstMIPS32TwoAddrGPR &) = delete;
326
327 public:
328 static InstMIPS32TwoAddrGPR *create(Cfg *Func, Variable *Dest,
329 Variable *Src0) {
330 return new (Func->allocate<InstMIPS32TwoAddrGPR>())
331 InstMIPS32TwoAddrGPR(Func, Dest, Src0);
332 }
333 void emit(const Cfg *Func) const override {
334 if (!BuildDefs::dump())
335 return;
336 emitTwoAddr(Opcode, this, Func);
337 }
338 void emitIAS(const Cfg *Func) const override {
339 (void)Func;
340 llvm_unreachable("Not yet implemented");
341 }
342
343 void dump(const Cfg *Func) const override {
344 if (!BuildDefs::dump())
345 return;
346 Ostream &Str = Func->getContext()->getStrDump();
347 dumpDest(Func);
348 Str << " = ";
349 dumpOpcode(Str, Opcode, getDest()->getType());
350 Str << " ";
351 dumpSources(Func);
352 }
353 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
354
355 private:
356 InstMIPS32TwoAddrGPR(Cfg *Func, Variable *Dest, Variable *Src0)
357 : InstMIPS32(Func, K, 1, Dest) {
358 addSource(Src0);
359 }
360
361 static const char *Opcode;
362 };
363
262 /// Instructions of the form x := y op z. May have the side-effect of setting 364 /// Instructions of the form x := y op z. May have the side-effect of setting
263 /// status flags. 365 /// status flags.
264 template <InstMIPS32::InstKindMIPS32 K> 366 template <InstMIPS32::InstKindMIPS32 K>
367 class InstMIPS32ThreeAddrFPR : public InstMIPS32 {
368 InstMIPS32ThreeAddrFPR() = delete;
369 InstMIPS32ThreeAddrFPR(const InstMIPS32ThreeAddrFPR &) = delete;
370 InstMIPS32ThreeAddrFPR &operator=(const InstMIPS32ThreeAddrFPR &) = delete;
371
372 public:
373 /// Create an ordinary binary-op instruction like add, and sub. Dest and Src1
374 /// must be registers.
375 static InstMIPS32ThreeAddrFPR *create(Cfg *Func, Variable *Dest,
376 Variable *Src0, Variable *Src1) {
377 return new (Func->allocate<InstMIPS32ThreeAddrFPR>())
378 InstMIPS32ThreeAddrFPR(Func, Dest, Src0, Src1);
379 }
380 void emit(const Cfg *Func) const override {
381 if (!BuildDefs::dump())
382 return;
383 emitThreeAddr(Opcode, this, Func);
384 }
385 void emitIAS(const Cfg *Func) const override {
386 (void)Func;
387 llvm_unreachable("Not yet implemented");
388 }
389
390 void dump(const Cfg *Func) const override {
391 if (!BuildDefs::dump())
392 return;
393 Ostream &Str = Func->getContext()->getStrDump();
394 dumpDest(Func);
395 Str << " = ";
396 dumpOpcode(Str, Opcode, getDest()->getType());
397 Str << " ";
398 dumpSources(Func);
399 }
400 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
401
402 private:
403 InstMIPS32ThreeAddrFPR(Cfg *Func, Variable *Dest, Variable *Src0,
404 Variable *Src1)
405 : InstMIPS32(Func, K, 2, Dest) {
406 addSource(Src0);
407 addSource(Src1);
408 }
409
410 static const char *Opcode;
411 };
412
413 /// Instructions of the form x := y op z. May have the side-effect of setting
414 /// status flags.
415 template <InstMIPS32::InstKindMIPS32 K>
265 class InstMIPS32ThreeAddrGPR : public InstMIPS32 { 416 class InstMIPS32ThreeAddrGPR : public InstMIPS32 {
266 InstMIPS32ThreeAddrGPR() = delete; 417 InstMIPS32ThreeAddrGPR() = delete;
267 InstMIPS32ThreeAddrGPR(const InstMIPS32ThreeAddrGPR &) = delete; 418 InstMIPS32ThreeAddrGPR(const InstMIPS32ThreeAddrGPR &) = delete;
268 InstMIPS32ThreeAddrGPR &operator=(const InstMIPS32ThreeAddrGPR &) = delete; 419 InstMIPS32ThreeAddrGPR &operator=(const InstMIPS32ThreeAddrGPR &) = delete;
269 420
270 public: 421 public:
271 /// Create an ordinary binary-op instruction like add, and sub. Dest and Src1 422 /// Create an ordinary binary-op instruction like add, and sub. Dest and Src1
272 /// must be registers. 423 /// must be registers.
273 static InstMIPS32ThreeAddrGPR *create(Cfg *Func, Variable *Dest, 424 static InstMIPS32ThreeAddrGPR *create(Cfg *Func, Variable *Dest,
274 Variable *Src0, Variable *Src1) { 425 Variable *Src0, Variable *Src1) {
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 642
492 InstMIPS32Imm16(Cfg *Func, Variable *Dest, uint32_t Imm) 643 InstMIPS32Imm16(Cfg *Func, Variable *Dest, uint32_t Imm)
493 : InstMIPS32(Func, K, 0, Dest), Imm(Imm) {} 644 : InstMIPS32(Func, K, 0, Dest), Imm(Imm) {}
494 645
495 static const char *Opcode; 646 static const char *Opcode;
496 647
497 const uint32_t Imm; 648 const uint32_t Imm;
498 }; 649 };
499 650
500 using InstMIPS32Add = InstMIPS32ThreeAddrGPR<InstMIPS32::Add>; 651 using InstMIPS32Add = InstMIPS32ThreeAddrGPR<InstMIPS32::Add>;
652 using InstMIPS32Add_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Add_d>;
653 using InstMIPS32Add_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Add_s>;
501 using InstMIPS32Addu = InstMIPS32ThreeAddrGPR<InstMIPS32::Addu>; 654 using InstMIPS32Addu = InstMIPS32ThreeAddrGPR<InstMIPS32::Addu>;
502 using InstMIPS32Addiu = InstMIPS32Imm16<InstMIPS32::Addiu, true>; 655 using InstMIPS32Addiu = InstMIPS32Imm16<InstMIPS32::Addiu, true>;
503 using InstMIPS32And = InstMIPS32ThreeAddrGPR<InstMIPS32::And>; 656 using InstMIPS32And = InstMIPS32ThreeAddrGPR<InstMIPS32::And>;
504 using InstMIPS32Andi = InstMIPS32Imm16<InstMIPS32::Andi>; 657 using InstMIPS32Andi = InstMIPS32Imm16<InstMIPS32::Andi>;
505 using InstMIPS32Div = InstMIPS32ThreeAddrGPR<InstMIPS32::Div>; 658 using InstMIPS32Div = InstMIPS32ThreeAddrGPR<InstMIPS32::Div>;
659 using InstMIPS32Div_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Div_d>;
660 using InstMIPS32Div_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Div_s>;
506 using InstMIPS32Divu = InstMIPS32ThreeAddrGPR<InstMIPS32::Divu>; 661 using InstMIPS32Divu = InstMIPS32ThreeAddrGPR<InstMIPS32::Divu>;
507 using InstMIPS32Lui = InstMIPS32Imm16<InstMIPS32::Lui>; 662 using InstMIPS32Lui = InstMIPS32Imm16<InstMIPS32::Lui>;
508 using InstMIPS32La = InstMIPS32UnaryopGPR<InstMIPS32::La>; 663 using InstMIPS32La = InstMIPS32UnaryopGPR<InstMIPS32::La>;
664 using InstMIPS32Mfc1 = InstMIPS32TwoAddrGPR<InstMIPS32::Mfc1>;
509 using InstMIPS32Mfhi = InstMIPS32UnaryopGPR<InstMIPS32::Mfhi>; 665 using InstMIPS32Mfhi = InstMIPS32UnaryopGPR<InstMIPS32::Mfhi>;
510 using InstMIPS32Mflo = InstMIPS32UnaryopGPR<InstMIPS32::Mflo>; 666 using InstMIPS32Mflo = InstMIPS32UnaryopGPR<InstMIPS32::Mflo>;
667 using InstMIPS32Mov_d = InstMIPS32TwoAddrFPR<InstMIPS32::Mov_d>;
668 using InstMIPS32Mov_s = InstMIPS32TwoAddrFPR<InstMIPS32::Mov_s>;
669 using InstMIPS32Mtc1 = InstMIPS32TwoAddrGPR<InstMIPS32::Mtc1>;
511 using InstMIPS32Mthi = InstMIPS32UnaryopGPR<InstMIPS32::Mthi>; 670 using InstMIPS32Mthi = InstMIPS32UnaryopGPR<InstMIPS32::Mthi>;
512 using InstMIPS32Mtlo = InstMIPS32UnaryopGPR<InstMIPS32::Mtlo>; 671 using InstMIPS32Mtlo = InstMIPS32UnaryopGPR<InstMIPS32::Mtlo>;
513 using InstMIPS32Mul = InstMIPS32ThreeAddrGPR<InstMIPS32::Mul>; 672 using InstMIPS32Mul = InstMIPS32ThreeAddrGPR<InstMIPS32::Mul>;
673 using InstMIPS32Mul_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Mul_d>;
674 using InstMIPS32Mul_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Mul_s>;
514 using InstMIPS32Mult = InstMIPS32ThreeAddrGPR<InstMIPS32::Mult>; 675 using InstMIPS32Mult = InstMIPS32ThreeAddrGPR<InstMIPS32::Mult>;
515 using InstMIPS32Multu = InstMIPS32ThreeAddrGPR<InstMIPS32::Multu>; 676 using InstMIPS32Multu = InstMIPS32ThreeAddrGPR<InstMIPS32::Multu>;
516 using InstMIPS32Or = InstMIPS32ThreeAddrGPR<InstMIPS32::Or>; 677 using InstMIPS32Or = InstMIPS32ThreeAddrGPR<InstMIPS32::Or>;
517 using InstMIPS32Ori = InstMIPS32Imm16<InstMIPS32::Ori>; 678 using InstMIPS32Ori = InstMIPS32Imm16<InstMIPS32::Ori>;
518 using InstMIPS32Sll = InstMIPS32Imm16<InstMIPS32::Sll>; 679 using InstMIPS32Sll = InstMIPS32Imm16<InstMIPS32::Sll>;
519 using InstMIPS32Sllv = InstMIPS32ThreeAddrGPR<InstMIPS32::Sllv>; 680 using InstMIPS32Sllv = InstMIPS32ThreeAddrGPR<InstMIPS32::Sllv>;
520 using InstMIPS32Slt = InstMIPS32ThreeAddrGPR<InstMIPS32::Slt>; 681 using InstMIPS32Slt = InstMIPS32ThreeAddrGPR<InstMIPS32::Slt>;
521 using InstMIPS32Slti = InstMIPS32Imm16<InstMIPS32::Slti>; 682 using InstMIPS32Slti = InstMIPS32Imm16<InstMIPS32::Slti>;
522 using InstMIPS32Sltiu = InstMIPS32Imm16<InstMIPS32::Sltiu>; 683 using InstMIPS32Sltiu = InstMIPS32Imm16<InstMIPS32::Sltiu>;
523 using InstMIPS32Sltu = InstMIPS32ThreeAddrGPR<InstMIPS32::Sltu>; 684 using InstMIPS32Sltu = InstMIPS32ThreeAddrGPR<InstMIPS32::Sltu>;
524 using InstMIPS32Sra = InstMIPS32Imm16<InstMIPS32::Sra>; 685 using InstMIPS32Sra = InstMIPS32Imm16<InstMIPS32::Sra>;
525 using InstMIPS32Srav = InstMIPS32ThreeAddrGPR<InstMIPS32::Srav>; 686 using InstMIPS32Srav = InstMIPS32ThreeAddrGPR<InstMIPS32::Srav>;
526 using InstMIPS32Srl = InstMIPS32Imm16<InstMIPS32::Srl>; 687 using InstMIPS32Srl = InstMIPS32Imm16<InstMIPS32::Srl>;
527 using InstMIPS32Srlv = InstMIPS32ThreeAddrGPR<InstMIPS32::Srlv>; 688 using InstMIPS32Srlv = InstMIPS32ThreeAddrGPR<InstMIPS32::Srlv>;
528 using InstMIPS32Sub = InstMIPS32ThreeAddrGPR<InstMIPS32::Sub>; 689 using InstMIPS32Sub = InstMIPS32ThreeAddrGPR<InstMIPS32::Sub>;
690 using InstMIPS32Sub_d = InstMIPS32ThreeAddrFPR<InstMIPS32::Sub_d>;
691 using InstMIPS32Sub_s = InstMIPS32ThreeAddrFPR<InstMIPS32::Sub_s>;
529 using InstMIPS32Subu = InstMIPS32ThreeAddrGPR<InstMIPS32::Subu>; 692 using InstMIPS32Subu = InstMIPS32ThreeAddrGPR<InstMIPS32::Subu>;
530 using InstMIPS32Ori = InstMIPS32Imm16<InstMIPS32::Ori>; 693 using InstMIPS32Ori = InstMIPS32Imm16<InstMIPS32::Ori>;
531 using InstMIPS32Xor = InstMIPS32ThreeAddrGPR<InstMIPS32::Xor>; 694 using InstMIPS32Xor = InstMIPS32ThreeAddrGPR<InstMIPS32::Xor>;
532 using InstMIPS32Xori = InstMIPS32Imm16<InstMIPS32::Xori>; 695 using InstMIPS32Xori = InstMIPS32Imm16<InstMIPS32::Xori>;
533 696
534 /// Handles (some of) vmov's various formats. 697 /// Handles (some of) vmov's various formats.
535 class InstMIPS32Mov final : public InstMIPS32 { 698 class InstMIPS32Mov final : public InstMIPS32 {
536 InstMIPS32Mov() = delete; 699 InstMIPS32Mov() = delete;
537 InstMIPS32Mov(const InstMIPS32Mov &) = delete; 700 InstMIPS32Mov(const InstMIPS32Mov &) = delete;
538 InstMIPS32Mov &operator=(const InstMIPS32Mov &) = delete; 701 InstMIPS32Mov &operator=(const InstMIPS32Mov &) = delete;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 template <> void InstMIPS32Mfhi::emit(const Cfg *Func) const; 741 template <> void InstMIPS32Mfhi::emit(const Cfg *Func) const;
579 template <> void InstMIPS32Mtlo::emit(const Cfg *Func) const; 742 template <> void InstMIPS32Mtlo::emit(const Cfg *Func) const;
580 template <> void InstMIPS32Mthi::emit(const Cfg *Func) const; 743 template <> void InstMIPS32Mthi::emit(const Cfg *Func) const;
581 template <> void InstMIPS32Mult::emit(const Cfg *Func) const; 744 template <> void InstMIPS32Mult::emit(const Cfg *Func) const;
582 template <> void InstMIPS32Multu::emit(const Cfg *Func) const; 745 template <> void InstMIPS32Multu::emit(const Cfg *Func) const;
583 746
584 } // end of namespace MIPS32 747 } // end of namespace MIPS32
585 } // end of namespace Ice 748 } // end of namespace Ice
586 749
587 #endif // SUBZERO_SRC_ICEINSTMIPS32_H 750 #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