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