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

Side by Side Diff: src/IceInstX8632.h

Issue 604873003: Handle add, adc, etc., mfence, div, idiv, mul in the assembler. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 6 years, 2 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/IceInstX8632.cpp » ('j') | src/IceInstX8632.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | src/IceInstX8632.cpp » ('j') | src/IceInstX8632.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698