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 |