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

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: Pre-review changes. 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
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.
Eric Holk 2016/04/18 17:13:17 It seems strange that we just asserted Sign != FS_
John 2016/04/18 17:48:02 well, the case is needed anyways -- otherwise clan
748 case InstARM32::FS_Unsigned:
749 Asm->vcugeqi(ElmtTy, Dest, getSrc(0), getSrc(1));
750 break;
751 case InstARM32::FS_Signed:
752 Asm->vcgeqi(ElmtTy, Dest, getSrc(0), getSrc(1));
753 break;
754 }
755 } break;
756 case IceType_v4f32:
757 Asm->vcgeqs(Dest, getSrc(0), getSrc(1));
758 break;
759 }
760 }
761
762 template <> void InstARM32Vcgt::emitIAS(const Cfg *Func) const {
763 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
764 const Variable *Dest = getDest();
765 const Type SrcTy = getSrc(0)->getType();
766 switch (SrcTy) {
767 default:
768 llvm::report_fatal_error("Vcgt not defined on type " +
769 typeStdString(Dest->getType()));
770 case IceType_v4i1:
771 case IceType_v8i1:
772 case IceType_v16i1:
773 case IceType_v16i8:
774 case IceType_v8i16:
775 case IceType_v4i32: {
776 const Type ElmtTy = typeElementType(SrcTy);
777 assert(Sign != InstARM32::FS_None);
778 switch (Sign) {
779 case InstARM32::FS_None: // defaults to unsigned.
Eric Holk 2016/04/18 17:13:17 Same comment as above.
John 2016/04/18 17:48:03 Done.
780 case InstARM32::FS_Unsigned:
781 Asm->vcugtqi(ElmtTy, Dest, getSrc(0), getSrc(1));
782 break;
783 case InstARM32::FS_Signed:
784 Asm->vcgtqi(ElmtTy, Dest, getSrc(0), getSrc(1));
785 break;
786 }
787 } break;
788 case IceType_v4f32:
789 Asm->vcgtqs(Dest, getSrc(0), getSrc(1));
790 break;
791 }
792 }
793
707 template <> void InstARM32Vbsl::emitIAS(const Cfg *Func) const { 794 template <> void InstARM32Vbsl::emitIAS(const Cfg *Func) const {
708 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 795 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
709 const Variable *Dest = getDest(); 796 const Variable *Dest = getDest();
710 switch (Dest->getType()) { 797 switch (Dest->getType()) {
711 default: 798 default:
712 llvm::report_fatal_error("Vbsl not defined on type " + 799 llvm::report_fatal_error("Vbsl not defined on type " +
713 typeStdString(Dest->getType())); 800 typeStdString(Dest->getType()));
714 case IceType_v4i1: 801 case IceType_v4i1:
715 case IceType_v8i1: 802 case IceType_v8i1:
716 case IceType_v16i1: 803 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); 875 Asm->vmlss(getDest(), getSrc(1), getSrc(2), CondARM32::AL);
789 assert(!Asm->needsTextFixup()); 876 assert(!Asm->needsTextFixup());
790 return; 877 return;
791 case IceType_f64: 878 case IceType_f64:
792 Asm->vmlsd(getDest(), getSrc(1), getSrc(2), CondARM32::AL); 879 Asm->vmlsd(getDest(), getSrc(1), getSrc(2), CondARM32::AL);
793 assert(!Asm->needsTextFixup()); 880 assert(!Asm->needsTextFixup());
794 return; 881 return;
795 } 882 }
796 } 883 }
797 884
885 template <> void InstARM32Vmvn::emitIAS(const Cfg *Func) const {
886 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
887 const Variable *Dest = getDest();
888 switch (Dest->getType()) {
889 default:
890 llvm::report_fatal_error("Vmvn not defined on type " +
891 typeStdString(Dest->getType()));
892 case IceType_v4i1:
893 case IceType_v8i1:
894 case IceType_v16i1:
895 case IceType_v16i8:
896 case IceType_v8i16:
897 case IceType_v4i32:
898 case IceType_v4f32: {
899 Asm->vmvnq(Dest, getSrc(0));
900 } break;
901 }
902 }
903
798 template <> void InstARM32Vneg::emitIAS(const Cfg *Func) const { 904 template <> void InstARM32Vneg::emitIAS(const Cfg *Func) const {
799 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 905 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
800 const Variable *Dest = getDest(); 906 const Variable *Dest = getDest();
801 const Type DestTy = Dest->getType(); 907 const Type DestTy = Dest->getType();
802 switch (Dest->getType()) { 908 switch (Dest->getType()) {
803 default: 909 default:
804 llvm::report_fatal_error("Vneg not defined on type " + 910 llvm::report_fatal_error("Vneg not defined on type " +
805 typeStdString(Dest->getType())); 911 typeStdString(Dest->getType()));
806 case IceType_v4i1: 912 case IceType_v4i1:
807 case IceType_v8i1: 913 case IceType_v8i1:
(...skipping 27 matching lines...) Expand all
835 } 941 }
836 942
837 template <> void InstARM32Vshl::emitIAS(const Cfg *Func) const { 943 template <> void InstARM32Vshl::emitIAS(const Cfg *Func) const {
838 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 944 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
839 const Variable *Dest = getDest(); 945 const Variable *Dest = getDest();
840 const Type DestTy = Dest->getType(); 946 const Type DestTy = Dest->getType();
841 switch (DestTy) { 947 switch (DestTy) {
842 default: 948 default:
843 llvm::report_fatal_error("Vshl not defined on type " + 949 llvm::report_fatal_error("Vshl not defined on type " +
844 typeStdString(Dest->getType())); 950 typeStdString(Dest->getType()));
951 // TODO(jpp): remove vectors of i1.
Eric Holk 2016/04/18 17:13:17 Maybe reword this to something like "handle i1 vec
John 2016/04/18 17:48:03 Done.
845 case IceType_v4i1: 952 case IceType_v4i1:
846 case IceType_v8i1: 953 case IceType_v8i1:
847 case IceType_v16i1: 954 case IceType_v16i1:
848 case IceType_v16i8: 955 case IceType_v16i8:
849 case IceType_v8i16: 956 case IceType_v8i16:
850 case IceType_v4i32: { 957 case IceType_v4i32: {
851 const Type ElmtTy = typeElementType(DestTy); 958 const Type ElmtTy = typeElementType(DestTy);
852 assert(Sign != InstARM32::FS_None); 959 assert(Sign != InstARM32::FS_None);
853 switch (Sign) { 960 switch (Sign) {
854 case InstARM32::FS_None: // defaults to unsigned. 961 case InstARM32::FS_None: // defaults to unsigned.
(...skipping 17 matching lines...) Expand all
872 } 979 }
873 980
874 template <> void InstARM32Vshr::emitIAS(const Cfg *Func) const { 981 template <> void InstARM32Vshr::emitIAS(const Cfg *Func) const {
875 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 982 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
876 const Variable *Dest = getDest(); 983 const Variable *Dest = getDest();
877 const Type DestTy = Dest->getType(); 984 const Type DestTy = Dest->getType();
878 switch (DestTy) { 985 switch (DestTy) {
879 default: 986 default:
880 llvm::report_fatal_error("Vshr not defined on type " + 987 llvm::report_fatal_error("Vshr not defined on type " +
881 typeStdString(Dest->getType())); 988 typeStdString(Dest->getType()));
989 // TODO(jpp): remove vectors of i1.
882 case IceType_v4i1: 990 case IceType_v4i1:
883 case IceType_v8i1: 991 case IceType_v8i1:
884 case IceType_v16i1: 992 case IceType_v16i1:
885 case IceType_v16i8: 993 case IceType_v16i8:
886 case IceType_v8i16: 994 case IceType_v8i16:
887 case IceType_v4i32: { 995 case IceType_v4i32: {
888 const Type ElmtTy = typeElementType(DestTy); 996 const Type ElmtTy = typeElementType(DestTy);
889 const auto *Imm6 = llvm::cast<ConstantInteger32>(getSrc(1)); 997 const auto *Imm6 = llvm::cast<ConstantInteger32>(getSrc(1));
890 assert(Sign != InstARM32::FS_None); 998 assert(Sign != InstARM32::FS_None);
891 switch (Sign) { 999 switch (Sign) {
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 template <> const char *InstARM32Rsb::Opcode = "rsb"; 1616 template <> const char *InstARM32Rsb::Opcode = "rsb";
1509 template <> const char *InstARM32Rsc::Opcode = "rsc"; 1617 template <> const char *InstARM32Rsc::Opcode = "rsc";
1510 template <> const char *InstARM32Sbc::Opcode = "sbc"; 1618 template <> const char *InstARM32Sbc::Opcode = "sbc";
1511 template <> const char *InstARM32Sdiv::Opcode = "sdiv"; 1619 template <> const char *InstARM32Sdiv::Opcode = "sdiv";
1512 template <> const char *InstARM32Sub::Opcode = "sub"; 1620 template <> const char *InstARM32Sub::Opcode = "sub";
1513 template <> const char *InstARM32Udiv::Opcode = "udiv"; 1621 template <> const char *InstARM32Udiv::Opcode = "udiv";
1514 // FP 1622 // FP
1515 template <> const char *InstARM32Vadd::Opcode = "vadd"; 1623 template <> const char *InstARM32Vadd::Opcode = "vadd";
1516 template <> const char *InstARM32Vand::Opcode = "vand"; 1624 template <> const char *InstARM32Vand::Opcode = "vand";
1517 template <> const char *InstARM32Vbsl::Opcode = "vbsl"; 1625 template <> const char *InstARM32Vbsl::Opcode = "vbsl";
1626 template <> const char *InstARM32Vceq::Opcode = "vceq";
1627 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vcge>::Opcode = "vcge";
1628 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vcgt>::Opcode = "vcgt";
1518 template <> const char *InstARM32Vdiv::Opcode = "vdiv"; 1629 template <> const char *InstARM32Vdiv::Opcode = "vdiv";
1519 template <> const char *InstARM32Veor::Opcode = "veor"; 1630 template <> const char *InstARM32Veor::Opcode = "veor";
1520 template <> const char *InstARM32Vmla::Opcode = "vmla"; 1631 template <> const char *InstARM32Vmla::Opcode = "vmla";
1521 template <> const char *InstARM32Vmls::Opcode = "vmls"; 1632 template <> const char *InstARM32Vmls::Opcode = "vmls";
1522 template <> const char *InstARM32Vmul::Opcode = "vmul"; 1633 template <> const char *InstARM32Vmul::Opcode = "vmul";
1634 template <> const char *InstARM32Vmvn::Opcode = "vmvn";
1523 template <> const char *InstARM32Vorr::Opcode = "vorr"; 1635 template <> const char *InstARM32Vorr::Opcode = "vorr";
1524 template <> const char *InstARM32UnaryopFP<InstARM32::Vneg>::Opcode = "vneg"; 1636 template <> const char *InstARM32UnaryopFP<InstARM32::Vneg>::Opcode = "vneg";
1525 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshl>::Opcode = "vshl"; 1637 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshl>::Opcode = "vshl";
1526 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshr>::Opcode = "vshr"; 1638 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshr>::Opcode = "vshr";
1527 template <> const char *InstARM32Vsub::Opcode = "vsub"; 1639 template <> const char *InstARM32Vsub::Opcode = "vsub";
1528 // Four-addr ops 1640 // Four-addr ops
1529 template <> const char *InstARM32Mla::Opcode = "mla"; 1641 template <> const char *InstARM32Mla::Opcode = "mla";
1530 template <> const char *InstARM32Mls::Opcode = "mls"; 1642 template <> const char *InstARM32Mls::Opcode = "mls";
1531 // Cmp-like ops 1643 // Cmp-like ops
1532 template <> const char *InstARM32Cmn::Opcode = "cmn"; 1644 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)) { 1863 if (const auto *Var = llvm::dyn_cast<Variable>(Src0)) {
1752 Asm->vmovdd(Dest, Var, Cond); 1864 Asm->vmovdd(Dest, Var, Cond);
1753 return; 1865 return;
1754 } 1866 }
1755 if (const auto *FpImm = llvm::dyn_cast<OperandARM32FlexFpImm>(Src0)) { 1867 if (const auto *FpImm = llvm::dyn_cast<OperandARM32FlexFpImm>(Src0)) {
1756 Asm->vmovd(Dest, FpImm, Cond); 1868 Asm->vmovd(Dest, FpImm, Cond);
1757 return; 1869 return;
1758 } 1870 }
1759 } 1871 }
1760 break; // Error 1872 break; // Error
1873 // TODO(jpp): Remove vectors of i1.
1761 case IceType_v4i1: 1874 case IceType_v4i1:
1762 case IceType_v8i1: 1875 case IceType_v8i1:
1763 case IceType_v16i1: 1876 case IceType_v16i1:
1764 case IceType_v16i8: 1877 case IceType_v16i8:
1765 case IceType_v8i16: 1878 case IceType_v8i16:
1766 case IceType_v4i32: 1879 case IceType_v4i32:
1767 case IceType_v4f32: 1880 case IceType_v4f32:
1768 assert(CondARM32::isUnconditional(Cond) && 1881 assert(CondARM32::isUnconditional(Cond) &&
1769 "Moves on vector must be unconditional!"); 1882 "Moves on vector must be unconditional!");
1770 if (isVectorType(SrcTy)) { 1883 if (isVectorType(SrcTy)) {
(...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after
2977 template class InstARM32ThreeAddrGPR<InstARM32::Mul>; 3090 template class InstARM32ThreeAddrGPR<InstARM32::Mul>;
2978 template class InstARM32ThreeAddrGPR<InstARM32::Orr>; 3091 template class InstARM32ThreeAddrGPR<InstARM32::Orr>;
2979 template class InstARM32ThreeAddrGPR<InstARM32::Rsb>; 3092 template class InstARM32ThreeAddrGPR<InstARM32::Rsb>;
2980 template class InstARM32ThreeAddrGPR<InstARM32::Rsc>; 3093 template class InstARM32ThreeAddrGPR<InstARM32::Rsc>;
2981 template class InstARM32ThreeAddrGPR<InstARM32::Sbc>; 3094 template class InstARM32ThreeAddrGPR<InstARM32::Sbc>;
2982 template class InstARM32ThreeAddrGPR<InstARM32::Sdiv>; 3095 template class InstARM32ThreeAddrGPR<InstARM32::Sdiv>;
2983 template class InstARM32ThreeAddrGPR<InstARM32::Sub>; 3096 template class InstARM32ThreeAddrGPR<InstARM32::Sub>;
2984 template class InstARM32ThreeAddrGPR<InstARM32::Udiv>; 3097 template class InstARM32ThreeAddrGPR<InstARM32::Udiv>;
2985 3098
2986 template class InstARM32ThreeAddrFP<InstARM32::Vadd>; 3099 template class InstARM32ThreeAddrFP<InstARM32::Vadd>;
3100 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vcge>;
3101 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vcgt>;
2987 template class InstARM32ThreeAddrFP<InstARM32::Vdiv>; 3102 template class InstARM32ThreeAddrFP<InstARM32::Vdiv>;
2988 template class InstARM32ThreeAddrFP<InstARM32::Veor>; 3103 template class InstARM32ThreeAddrFP<InstARM32::Veor>;
2989 template class InstARM32FourAddrFP<InstARM32::Vmla>; 3104 template class InstARM32FourAddrFP<InstARM32::Vmla>;
2990 template class InstARM32FourAddrFP<InstARM32::Vmls>; 3105 template class InstARM32FourAddrFP<InstARM32::Vmls>;
2991 template class InstARM32ThreeAddrFP<InstARM32::Vmul>; 3106 template class InstARM32ThreeAddrFP<InstARM32::Vmul>;
2992 template class InstARM32UnaryopSignAwareFP<InstARM32::Vneg>; 3107 template class InstARM32UnaryopSignAwareFP<InstARM32::Vneg>;
2993 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vshl>; 3108 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vshl>;
2994 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vshr>; 3109 template class InstARM32ThreeAddrSignAwareFP<InstARM32::Vshr>;
2995 template class InstARM32ThreeAddrFP<InstARM32::Vsub>; 3110 template class InstARM32ThreeAddrFP<InstARM32::Vsub>;
2996 3111
(...skipping 13 matching lines...) Expand all
3010 3125
3011 template class InstARM32FourAddrGPR<InstARM32::Mla>; 3126 template class InstARM32FourAddrGPR<InstARM32::Mla>;
3012 template class InstARM32FourAddrGPR<InstARM32::Mls>; 3127 template class InstARM32FourAddrGPR<InstARM32::Mls>;
3013 3128
3014 template class InstARM32CmpLike<InstARM32::Cmn>; 3129 template class InstARM32CmpLike<InstARM32::Cmn>;
3015 template class InstARM32CmpLike<InstARM32::Cmp>; 3130 template class InstARM32CmpLike<InstARM32::Cmp>;
3016 template class InstARM32CmpLike<InstARM32::Tst>; 3131 template class InstARM32CmpLike<InstARM32::Tst>;
3017 3132
3018 } // end of namespace ARM32 3133 } // end of namespace ARM32
3019 } // end of namespace Ice 3134 } // end of namespace Ice
OLDNEW
« src/IceInstARM32.h ('K') | « src/IceInstARM32.h ('k') | src/IceTargetLoweringARM32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698