| 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 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 881 } | 881 } |
| 882 | 882 |
| 883 void InstARM32RegisterStackOp::emitSRegsAsText(const Cfg *Func, | 883 void InstARM32RegisterStackOp::emitSRegsAsText(const Cfg *Func, |
| 884 const Variable *BaseReg, | 884 const Variable *BaseReg, |
| 885 SizeT RegCount) const { | 885 SizeT RegCount) const { |
| 886 if (!BuildDefs::dump()) | 886 if (!BuildDefs::dump()) |
| 887 return; | 887 return; |
| 888 Ostream &Str = Func->getContext()->getStrEmit(); | 888 Ostream &Str = Func->getContext()->getStrEmit(); |
| 889 Str << "\t" << getSRegOpcode() << "\t{"; | 889 Str << "\t" << getSRegOpcode() << "\t{"; |
| 890 bool IsFirst = true; | 890 bool IsFirst = true; |
| 891 int32_t Base = BaseReg->getRegNum(); | 891 auto Base = BaseReg->getRegNum(); |
| 892 for (SizeT i = 0; i < RegCount; ++i) { | 892 for (SizeT i = 0; i < RegCount; ++i) { |
| 893 if (IsFirst) | 893 if (IsFirst) |
| 894 IsFirst = false; | 894 IsFirst = false; |
| 895 else | 895 else |
| 896 Str << ", "; | 896 Str << ", "; |
| 897 Str << RegARM32::getRegName(Base + i); | 897 Str << RegARM32::getRegName(RegNumT::fixme(Base + i)); |
| 898 } | 898 } |
| 899 Str << "}"; | 899 Str << "}"; |
| 900 } | 900 } |
| 901 | 901 |
| 902 namespace { | 902 namespace { |
| 903 | 903 |
| 904 bool isAssignedConsecutiveRegisters(const Variable *Before, | 904 bool isAssignedConsecutiveRegisters(const Variable *Before, |
| 905 const Variable *After) { | 905 const Variable *After) { |
| 906 assert(Before->hasReg()); | 906 assert(Before->hasReg()); |
| 907 assert(After->hasReg()); | 907 assert(After->hasReg()); |
| 908 return Before->getRegNum() + 1 == After->getRegNum(); | 908 return RegNumT::fixme(Before->getRegNum() + 1) == After->getRegNum(); |
| 909 } | 909 } |
| 910 | 910 |
| 911 } // end of anonymous namespace | 911 } // end of anonymous namespace |
| 912 | 912 |
| 913 void InstARM32RegisterStackOp::emitUsingForm(const Cfg *Func, | 913 void InstARM32RegisterStackOp::emitUsingForm(const Cfg *Func, |
| 914 const EmitForm Form) const { | 914 const EmitForm Form) const { |
| 915 SizeT NumRegs = getNumStackRegs(); | 915 SizeT NumRegs = getNumStackRegs(); |
| 916 assert(NumRegs); | 916 assert(NumRegs); |
| 917 | 917 |
| 918 const auto *Reg = llvm::cast<Variable>(getStackReg(0)); | 918 const auto *Reg = llvm::cast<Variable>(getStackReg(0)); |
| 919 if (isScalarIntegerType(Reg->getType())) { | 919 if (isScalarIntegerType(Reg->getType())) { |
| 920 // Pop GPR registers. | 920 // Pop GPR registers. |
| 921 SizeT IntegerCount = 0; | 921 SizeT IntegerCount = 0; |
| 922 ARM32::IValueT GPRegisters = 0; | 922 ARM32::IValueT GPRegisters = 0; |
| 923 const Variable *LastDest = nullptr; | 923 const Variable *LastDest = nullptr; |
| 924 for (SizeT i = 0; i < NumRegs; ++i) { | 924 for (SizeT i = 0; i < NumRegs; ++i) { |
| 925 const Variable *Var = getStackReg(i); | 925 const Variable *Var = getStackReg(i); |
| 926 assert(Var->hasReg() && "stack op only applies to registers"); | 926 assert(Var->hasReg() && "stack op only applies to registers"); |
| 927 int32_t Reg = RegARM32::getEncodedGPR(Var->getRegNum()); | 927 RegARM32::GPRRegister Reg = RegARM32::getEncodedGPR(Var->getRegNum()); |
| 928 LastDest = Var; | 928 LastDest = Var; |
| 929 GPRegisters |= (1 << Reg); | 929 GPRegisters |= (1 << Reg); |
| 930 ++IntegerCount; | 930 ++IntegerCount; |
| 931 } | 931 } |
| 932 if (IntegerCount == 1) { | 932 if (IntegerCount == 1) { |
| 933 emitSingleGPR(Func, Form, LastDest); | 933 emitSingleGPR(Func, Form, LastDest); |
| 934 } else { | 934 } else { |
| 935 emitMultipleGPRs(Func, Form, GPRegisters); | 935 emitMultipleGPRs(Func, Form, GPRegisters); |
| 936 } | 936 } |
| 937 } else { | 937 } else { |
| (...skipping 1603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2541 | 2541 |
| 2542 template class InstARM32FourAddrGPR<InstARM32::Mla>; | 2542 template class InstARM32FourAddrGPR<InstARM32::Mla>; |
| 2543 template class InstARM32FourAddrGPR<InstARM32::Mls>; | 2543 template class InstARM32FourAddrGPR<InstARM32::Mls>; |
| 2544 | 2544 |
| 2545 template class InstARM32CmpLike<InstARM32::Cmn>; | 2545 template class InstARM32CmpLike<InstARM32::Cmn>; |
| 2546 template class InstARM32CmpLike<InstARM32::Cmp>; | 2546 template class InstARM32CmpLike<InstARM32::Cmp>; |
| 2547 template class InstARM32CmpLike<InstARM32::Tst>; | 2547 template class InstARM32CmpLike<InstARM32::Tst>; |
| 2548 | 2548 |
| 2549 } // end of namespace ARM32 | 2549 } // end of namespace ARM32 |
| 2550 } // end of namespace Ice | 2550 } // end of namespace Ice |
| OLD | NEW |