OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |