| 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 |