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

Side by Side Diff: src/IceInstARM32.cpp

Issue 1891243002: Subzero. ARM32. De-scalarizes icmp and fcmp for vectors. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments. Created 4 years, 8 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 | « src/IceInstARM32.h ('k') | src/IceTargetLoweringARM32.h » ('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/IceInstARM32.cpp - ARM32 instruction implementation ----===// 1 //===- subzero/src/IceInstARM32.cpp - ARM32 instruction implementation ----===//
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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 Str << "\t" << Opcode << (SetFlags ? "s" : "") << Instr->getPredicate() 221 Str << "\t" << Opcode << (SetFlags ? "s" : "") << Instr->getPredicate()
222 << "\t"; 222 << "\t";
223 Instr->getDest()->emit(Func); 223 Instr->getDest()->emit(Func);
224 Str << ", "; 224 Str << ", ";
225 Instr->getSrc(0)->emit(Func); 225 Instr->getSrc(0)->emit(Func);
226 Str << ", "; 226 Str << ", ";
227 Instr->getSrc(1)->emit(Func); 227 Instr->getSrc(1)->emit(Func);
228 } 228 }
229 229
230 void InstARM32::emitThreeAddrFP(const char *Opcode, FPSign SignType, 230 void InstARM32::emitThreeAddrFP(const char *Opcode, FPSign SignType,
231 const InstARM32 *Instr, const Cfg *Func) { 231 const InstARM32 *Instr, const Cfg *Func,
232 Type OpType) {
232 if (!BuildDefs::dump()) 233 if (!BuildDefs::dump())
233 return; 234 return;
234 Ostream &Str = Func->getContext()->getStrEmit(); 235 Ostream &Str = Func->getContext()->getStrEmit();
235 assert(Instr->getSrcSize() == 2); 236 assert(Instr->getSrcSize() == 2);
236 Str << "\t" << Opcode 237 Str << "\t" << Opcode << getVWidthString(OpType, SignType) << "\t";
237 << getVWidthString(Instr->getDest()->getType(), SignType) << "\t";
238 Instr->getDest()->emit(Func); 238 Instr->getDest()->emit(Func);
239 Str << ", "; 239 Str << ", ";
240 Instr->getSrc(0)->emit(Func); 240 Instr->getSrc(0)->emit(Func);
241 Str << ", "; 241 Str << ", ";
242 Instr->getSrc(1)->emit(Func); 242 Instr->getSrc(1)->emit(Func);
243 } 243 }
244 244
245 void InstARM32::emitFourAddrFP(const char *Opcode, FPSign SignType, 245 void InstARM32::emitFourAddrFP(const char *Opcode, FPSign SignType,
246 const InstARM32 *Instr, const Cfg *Func) { 246 const InstARM32 *Instr, const Cfg *Func) {
247 if (!BuildDefs::dump()) 247 if (!BuildDefs::dump())
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 case IceType_v8i1: 697 case IceType_v8i1:
698 case IceType_v16i1: 698 case IceType_v16i1:
699 case IceType_v16i8: 699 case IceType_v16i8:
700 case IceType_v8i16: 700 case IceType_v8i16:
701 case IceType_v4i32: 701 case IceType_v4i32:
702 Asm->vandq(Dest, getSrc(0), getSrc(1)); 702 Asm->vandq(Dest, getSrc(0), getSrc(1));
703 } 703 }
704 assert(!Asm->needsTextFixup()); 704 assert(!Asm->needsTextFixup());
705 } 705 }
706 706
707 template <> void InstARM32Vceq::emitIAS(const Cfg *Func) const {
708 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
709 const Variable *Dest = getDest();
710 const Type SrcTy = getSrc(0)->getType();
711 switch (SrcTy) {
712 default:
713 llvm::report_fatal_error("Vceq not defined on type " +
714 typeStdString(SrcTy));
715 case IceType_v4i1:
716 case IceType_v8i1:
717 case IceType_v16i1:
718 case IceType_v16i8:
719 case IceType_v8i16:
720 case IceType_v4i32:
721 Asm->vceqqi(typeElementType(SrcTy), Dest, getSrc(0), getSrc(1));
722 break;
723 case IceType_v4f32:
724 Asm->vceqqs(Dest, getSrc(0), getSrc(1));
725 break;
726 }
727 assert(!Asm->needsTextFixup());
728 }
729
730 template <> void InstARM32Vcge::emitIAS(const Cfg *Func) const {
731 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
732 const Variable *Dest = getDest();
733 const Type SrcTy = getSrc(0)->getType();
734 switch (SrcTy) {
735 default:
736 llvm::report_fatal_error("Vcge not defined on type " +
737 typeStdString(Dest->getType()));
738 case IceType_v4i1:
739 case IceType_v8i1:
740 case IceType_v16i1:
741 case IceType_v16i8:
742 case IceType_v8i16:
743 case IceType_v4i32: {
744 const Type ElmtTy = typeElementType(SrcTy);
745 assert(Sign != InstARM32::FS_None);
746 switch (Sign) {
747 case InstARM32::FS_None: // defaults to unsigned.
748 llvm_unreachable("Sign should not be FS_None.");
749 case InstARM32::FS_Unsigned:
750 Asm->vcugeqi(ElmtTy, Dest, getSrc(0), getSrc(1));
751 break;
752 case InstARM32::FS_Signed:
753 Asm->vcgeqi(ElmtTy, Dest, getSrc(0), getSrc(1));
754 break;
755 }
756 } break;
757 case IceType_v4f32:
758 Asm->vcgeqs(Dest, getSrc(0), getSrc(1));
759 break;
760 }
761 }
762
763 template <> void InstARM32Vcgt::emitIAS(const Cfg *Func) const {
764 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
765 const Variable *Dest = getDest();
766 const Type SrcTy = getSrc(0)->getType();
767 switch (SrcTy) {
768 default:
769 llvm::report_fatal_error("Vcgt not defined on type " +
770 typeStdString(Dest->getType()));
771 case IceType_v4i1:
772 case IceType_v8i1:
773 case IceType_v16i1:
774 case IceType_v16i8:
775 case IceType_v8i16:
776 case IceType_v4i32: {
777 const Type ElmtTy = typeElementType(SrcTy);
778 assert(Sign != InstARM32::FS_None);
779 switch (Sign) {
780 case InstARM32::FS_None: // defaults to unsigned.
781 llvm_unreachable("Sign should not be FS_None.");
782 case InstARM32::FS_Unsigned:
783 Asm->vcugtqi(ElmtTy, Dest, getSrc(0), getSrc(1));
784 break;
785 case InstARM32::FS_Signed:
786 Asm->vcgtqi(ElmtTy, Dest, getSrc(0), getSrc(1));
787 break;
788 }
789 } break;
790 case IceType_v4f32:
791 Asm->vcgtqs(Dest, getSrc(0), getSrc(1));
792 break;
793 }
794 }
795
707 template <> void InstARM32Vbsl::emitIAS(const Cfg *Func) const { 796 template <> void InstARM32Vbsl::emitIAS(const Cfg *Func) const {
708 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 797 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
709 const Variable *Dest = getDest(); 798 const Variable *Dest = getDest();
710 switch (Dest->getType()) { 799 switch (Dest->getType()) {
711 default: 800 default:
712 llvm::report_fatal_error("Vbsl not defined on type " + 801 llvm::report_fatal_error("Vbsl not defined on type " +
713 typeStdString(Dest->getType())); 802 typeStdString(Dest->getType()));
714 case IceType_v4i1: 803 case IceType_v4i1:
715 case IceType_v8i1: 804 case IceType_v8i1:
716 case IceType_v16i1: 805 case IceType_v16i1:
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 Asm->vmlss(getDest(), getSrc(1), getSrc(2), CondARM32::AL); 877 Asm->vmlss(getDest(), getSrc(1), getSrc(2), CondARM32::AL);
789 assert(!Asm->needsTextFixup()); 878 assert(!Asm->needsTextFixup());
790 return; 879 return;
791 case IceType_f64: 880 case IceType_f64:
792 Asm->vmlsd(getDest(), getSrc(1), getSrc(2), CondARM32::AL); 881 Asm->vmlsd(getDest(), getSrc(1), getSrc(2), CondARM32::AL);
793 assert(!Asm->needsTextFixup()); 882 assert(!Asm->needsTextFixup());
794 return; 883 return;
795 } 884 }
796 } 885 }
797 886
887 template <> void InstARM32Vmvn::emitIAS(const Cfg *Func) const {
888 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
889 const Variable *Dest = getDest();
890 switch (Dest->getType()) {
891 default:
892 llvm::report_fatal_error("Vmvn not defined on type " +
893 typeStdString(Dest->getType()));
894 case IceType_v4i1:
895 case IceType_v8i1:
896 case IceType_v16i1:
897 case IceType_v16i8:
898 case IceType_v8i16:
899 case IceType_v4i32:
900 case IceType_v4f32: {
901 Asm->vmvnq(Dest, getSrc(0));
902 } break;
903 }
904 }
905
798 template <> void InstARM32Vneg::emitIAS(const Cfg *Func) const { 906 template <> void InstARM32Vneg::emitIAS(const Cfg *Func) const {
799 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 907 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
800 const Variable *Dest = getDest(); 908 const Variable *Dest = getDest();
801 const Type DestTy = Dest->getType(); 909 const Type DestTy = Dest->getType();
802 switch (Dest->getType()) { 910 switch (Dest->getType()) {
803 default: 911 default:
804 llvm::report_fatal_error("Vneg not defined on type " + 912 llvm::report_fatal_error("Vneg not defined on type " +
805 typeStdString(Dest->getType())); 913 typeStdString(Dest->getType()));
806 case IceType_v4i1: 914 case IceType_v4i1:
807 case IceType_v8i1: 915 case IceType_v8i1:
(...skipping 27 matching lines...) Expand all
835 } 943 }
836 944
837 template <> void InstARM32Vshl::emitIAS(const Cfg *Func) const { 945 template <> void InstARM32Vshl::emitIAS(const Cfg *Func) const {
838 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 946 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
839 const Variable *Dest = getDest(); 947 const Variable *Dest = getDest();
840 const Type DestTy = Dest->getType(); 948 const Type DestTy = Dest->getType();
841 switch (DestTy) { 949 switch (DestTy) {
842 default: 950 default:
843 llvm::report_fatal_error("Vshl not defined on type " + 951 llvm::report_fatal_error("Vshl not defined on type " +
844 typeStdString(Dest->getType())); 952 typeStdString(Dest->getType()));
953 // TODO(jpp): handle i1 vectors in terms of element count instead of element
954 // type.
845 case IceType_v4i1: 955 case IceType_v4i1:
846 case IceType_v8i1: 956 case IceType_v8i1:
847 case IceType_v16i1: 957 case IceType_v16i1:
848 case IceType_v16i8: 958 case IceType_v16i8:
849 case IceType_v8i16: 959 case IceType_v8i16:
850 case IceType_v4i32: { 960 case IceType_v4i32: {
851 const Type ElmtTy = typeElementType(DestTy); 961 const Type ElmtTy = typeElementType(DestTy);
852 assert(Sign != InstARM32::FS_None); 962 assert(Sign != InstARM32::FS_None);
853 switch (Sign) { 963 switch (Sign) {
854 case InstARM32::FS_None: // defaults to unsigned. 964 case InstARM32::FS_None: // defaults to unsigned.
(...skipping 17 matching lines...) Expand all
872 } 982 }
873 983
874 template <> void InstARM32Vshr::emitIAS(const Cfg *Func) const { 984 template <> void InstARM32Vshr::emitIAS(const Cfg *Func) const {
875 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 985 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
876 const Variable *Dest = getDest(); 986 const Variable *Dest = getDest();
877 const Type DestTy = Dest->getType(); 987 const Type DestTy = Dest->getType();
878 switch (DestTy) { 988 switch (DestTy) {
879 default: 989 default:
880 llvm::report_fatal_error("Vshr not defined on type " + 990 llvm::report_fatal_error("Vshr not defined on type " +
881 typeStdString(Dest->getType())); 991 typeStdString(Dest->getType()));
992 // TODO(jpp): handle i1 vectors in terms of element count instead of element
993 // type.
882 case IceType_v4i1: 994 case IceType_v4i1:
883 case IceType_v8i1: 995 case IceType_v8i1:
884 case IceType_v16i1: 996 case IceType_v16i1:
885 case IceType_v16i8: 997 case IceType_v16i8:
886 case IceType_v8i16: 998 case IceType_v8i16:
887 case IceType_v4i32: { 999 case IceType_v4i32: {
888 const Type ElmtTy = typeElementType(DestTy); 1000 const Type ElmtTy = typeElementType(DestTy);
889 const auto *Imm6 = llvm::cast<ConstantInteger32>(getSrc(1)); 1001 const auto *Imm6 = llvm::cast<ConstantInteger32>(getSrc(1));
890 assert(Sign != InstARM32::FS_None); 1002 assert(Sign != InstARM32::FS_None);
891 switch (Sign) { 1003 switch (Sign) {
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 template <> const char *InstARM32Rsb::Opcode = "rsb"; 1620 template <> const char *InstARM32Rsb::Opcode = "rsb";
1509 template <> const char *InstARM32Rsc::Opcode = "rsc"; 1621 template <> const char *InstARM32Rsc::Opcode = "rsc";
1510 template <> const char *InstARM32Sbc::Opcode = "sbc"; 1622 template <> const char *InstARM32Sbc::Opcode = "sbc";
1511 template <> const char *InstARM32Sdiv::Opcode = "sdiv"; 1623 template <> const char *InstARM32Sdiv::Opcode = "sdiv";
1512 template <> const char *InstARM32Sub::Opcode = "sub"; 1624 template <> const char *InstARM32Sub::Opcode = "sub";
1513 template <> const char *InstARM32Udiv::Opcode = "udiv"; 1625 template <> const char *InstARM32Udiv::Opcode = "udiv";
1514 // FP 1626 // FP
1515 template <> const char *InstARM32Vadd::Opcode = "vadd"; 1627 template <> const char *InstARM32Vadd::Opcode = "vadd";
1516 template <> const char *InstARM32Vand::Opcode = "vand"; 1628 template <> const char *InstARM32Vand::Opcode = "vand";
1517 template <> const char *InstARM32Vbsl::Opcode = "vbsl"; 1629 template <> const char *InstARM32Vbsl::Opcode = "vbsl";
1630 template <> const char *InstARM32Vceq::Opcode = "vceq";
1631 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vcge>::Opcode = "vcge";
1632 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vcgt>::Opcode = "vcgt";
1518 template <> const char *InstARM32Vdiv::Opcode = "vdiv"; 1633 template <> const char *InstARM32Vdiv::Opcode = "vdiv";
1519 template <> const char *InstARM32Veor::Opcode = "veor"; 1634 template <> const char *InstARM32Veor::Opcode = "veor";
1520 template <> const char *InstARM32Vmla::Opcode = "vmla"; 1635 template <> const char *InstARM32Vmla::Opcode = "vmla";
1521 template <> const char *InstARM32Vmls::Opcode = "vmls"; 1636 template <> const char *InstARM32Vmls::Opcode = "vmls";
1522 template <> const char *InstARM32Vmul::Opcode = "vmul"; 1637 template <> const char *InstARM32Vmul::Opcode = "vmul";
1638 template <> const char *InstARM32Vmvn::Opcode = "vmvn";
1523 template <> const char *InstARM32Vorr::Opcode = "vorr"; 1639 template <> const char *InstARM32Vorr::Opcode = "vorr";
1524 template <> const char *InstARM32UnaryopFP<InstARM32::Vneg>::Opcode = "vneg"; 1640 template <> const char *InstARM32UnaryopFP<InstARM32::Vneg>::Opcode = "vneg";
1525 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshl>::Opcode = "vshl"; 1641 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshl>::Opcode = "vshl";
1526 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshr>::Opcode = "vshr"; 1642 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshr>::Opcode = "vshr";
1527 template <> const char *InstARM32Vsub::Opcode = "vsub"; 1643 template <> const char *InstARM32Vsub::Opcode = "vsub";
1528 // Four-addr ops 1644 // Four-addr ops
1529 template <> const char *InstARM32Mla::Opcode = "mla"; 1645 template <> const char *InstARM32Mla::Opcode = "mla";
1530 template <> const char *InstARM32Mls::Opcode = "mls"; 1646 template <> const char *InstARM32Mls::Opcode = "mls";
1531 // Cmp-like ops 1647 // Cmp-like ops
1532 template <> const char *InstARM32Cmn::Opcode = "cmn"; 1648 template <> const char *InstARM32Cmn::Opcode = "cmn";
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 if (const auto *Var = llvm::dyn_cast<Variable>(Src0)) { 1867 if (const auto *Var = llvm::dyn_cast<Variable>(Src0)) {
1752 Asm->vmovdd(Dest, Var, Cond); 1868 Asm->vmovdd(Dest, Var, Cond);
1753 return; 1869 return;
1754 } 1870 }
1755 if (const auto *FpImm = llvm::dyn_cast<OperandARM32FlexFpImm>(Src0)) { 1871 if (const auto *FpImm = llvm::dyn_cast<OperandARM32FlexFpImm>(Src0)) {
1756 Asm->vmovd(Dest, FpImm, Cond); 1872 Asm->vmovd(Dest, FpImm, Cond);
1757 return; 1873 return;
1758 } 1874 }
1759 } 1875 }
1760 break; // Error 1876 break; // Error
1877 // TODO(jpp): Remove vectors of i1.
1761 case IceType_v4i1: 1878 case IceType_v4i1:
1762 case IceType_v8i1: 1879 case IceType_v8i1:
1763 case IceType_v16i1: 1880 case IceType_v16i1:
1764 case IceType_v16i8: 1881 case IceType_v16i8:
1765 case IceType_v8i16: 1882 case IceType_v8i16:
1766 case IceType_v4i32: 1883 case IceType_v4i32:
1767 case IceType_v4f32: 1884 case IceType_v4f32:
1768 assert(CondARM32::isUnconditional(Cond) && 1885 assert(CondARM32::isUnconditional(Cond) &&
1769 "Moves on vector must be unconditional!"); 1886 "Moves on vector must be unconditional!");
1770 if (isVectorType(SrcTy)) { 1887 if (isVectorType(SrcTy)) {
(...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after
2977 template class InstARM32ThreeAddrGPR<InstARM32::Mul>; 3094 template class InstARM32ThreeAddrGPR<InstARM32::Mul>;
2978 template class InstARM32ThreeAddrGPR<InstARM32::Orr>; 3095 template class InstARM32ThreeAddrGPR<InstARM32::Orr>;
2979 template class InstARM32ThreeAddrGPR<InstARM32::Rsb>; 3096 template class InstARM32ThreeAddrGPR<InstARM32::Rsb>;
2980 template class InstARM32ThreeAddrGPR<InstARM32::Rsc>; 3097 template class InstARM32ThreeAddrGPR<InstARM32::Rsc>;
2981 template class InstARM32ThreeAddrGPR<InstARM32::Sbc>; 3098 template class InstARM32ThreeAddrGPR<InstARM32::Sbc>;
2982 template class InstARM32ThreeAddrGPR<InstARM32::Sdiv>; 3099 template class InstARM32ThreeAddrGPR<InstARM32::Sdiv>;
2983 template class InstARM32ThreeAddrGPR<InstARM32::Sub>; 3100 template class InstARM32ThreeAddrGPR<InstARM32::Sub>;
2984 template class InstARM32ThreeAddrGPR<InstARM32::Udiv>; 3101 template class InstARM32ThreeAddrGPR<InstARM32::Udiv>;
2985 3102
2986 template class InstARM32ThreeAddrFP<InstARM32::Vadd>; 3103 template class InstARM32ThreeAddrFP<InstARM32::Vadd>;
3104 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vcge>;
3105 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vcgt>;
2987 template class InstARM32ThreeAddrFP<InstARM32::Vdiv>; 3106 template class InstARM32ThreeAddrFP<InstARM32::Vdiv>;
2988 template class InstARM32ThreeAddrFP<InstARM32::Veor>; 3107 template class InstARM32ThreeAddrFP<InstARM32::Veor>;
2989 template class InstARM32FourAddrFP<InstARM32::Vmla>; 3108 template class InstARM32FourAddrFP<InstARM32::Vmla>;
2990 template class InstARM32FourAddrFP<InstARM32::Vmls>; 3109 template class InstARM32FourAddrFP<InstARM32::Vmls>;
2991 template class InstARM32ThreeAddrFP<InstARM32::Vmul>; 3110 template class InstARM32ThreeAddrFP<InstARM32::Vmul>;
2992 template class InstARM32UnaryopSignAwareFP<InstARM32::Vneg>; 3111 template class InstARM32UnaryopSignAwareFP<InstARM32::Vneg>;
2993 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vshl>; 3112 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vshl>;
2994 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vshr>; 3113 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vshr>;
2995 template class InstARM32ThreeAddrFP<InstARM32::Vsub>; 3114 template class InstARM32ThreeAddrFP<InstARM32::Vsub>;
2996 3115
(...skipping 13 matching lines...) Expand all
3010 3129
3011 template class InstARM32FourAddrGPR<InstARM32::Mla>; 3130 template class InstARM32FourAddrGPR<InstARM32::Mla>;
3012 template class InstARM32FourAddrGPR<InstARM32::Mls>; 3131 template class InstARM32FourAddrGPR<InstARM32::Mls>;
3013 3132
3014 template class InstARM32CmpLike<InstARM32::Cmn>; 3133 template class InstARM32CmpLike<InstARM32::Cmn>;
3015 template class InstARM32CmpLike<InstARM32::Cmp>; 3134 template class InstARM32CmpLike<InstARM32::Cmp>;
3016 template class InstARM32CmpLike<InstARM32::Tst>; 3135 template class InstARM32CmpLike<InstARM32::Tst>;
3017 3136
3018 } // end of namespace ARM32 3137 } // end of namespace ARM32
3019 } // end of namespace Ice 3138 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceInstARM32.h ('k') | src/IceTargetLoweringARM32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698