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