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

Side by Side Diff: src/IceInstX8632.h

Issue 1114223002: Rename AssemblerX86 to AssemblerX8632 so it works with SZTargets.def. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 7 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') | 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/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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | src/IceInstX8632.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698