From c9ea75ee5bcf6a9ced5852b7662f1400a9be8d16 Mon Sep 17 00:00:00 2001 From: Reed Kotler Date: Sun, 8 Dec 2013 16:51:52 +0000 Subject: Cleaning up of prologue/epilogue code for Mips16. First step here is to make save/restore into variable number of argument instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196726 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Mips/Mips16InstrInfo.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'lib/Target/Mips/Mips16InstrInfo.cpp') diff --git a/lib/Target/Mips/Mips16InstrInfo.cpp b/lib/Target/Mips/Mips16InstrInfo.cpp index c53db0e60a..05658106bb 100644 --- a/lib/Target/Mips/Mips16InstrInfo.cpp +++ b/lib/Target/Mips/Mips16InstrInfo.cpp @@ -182,12 +182,17 @@ void Mips16InstrInfo::makeFrame(unsigned SP, int64_t FrameSize, DebugLoc DL = I != MBB.end() ? I->getDebugLoc() : DebugLoc(); if (!NeverUseSaveRestore) { if (isUInt<11>(FrameSize)) - BuildMI(MBB, I, DL, get(Mips::SaveRaF16)).addImm(FrameSize); + //BuildMI(MBB, I, DL, get(Mips::SaveRaF16)).addImm(FrameSize); + BuildMI(MBB, I, DL, get(Mips::SaveX16)).addReg(Mips::RA). + addReg(Mips::S0). + addReg(Mips::S1).addReg(Mips::S2).addImm(FrameSize); else { int Base = 2040; // should create template function like isUInt that // returns largest possible n bit unsigned integer int64_t Remainder = FrameSize - Base; - BuildMI(MBB, I, DL, get(Mips::SaveRaF16)). addImm(Base); + BuildMI(MBB, I, DL, get(Mips::SaveX16)).addReg(Mips::RA). + addReg(Mips::S0). + addReg(Mips::S1).addReg(Mips::S2).addImm(Base); if (isInt<16>(-Remainder)) BuildAddiuSpImm(MBB, I, -Remainder); else @@ -224,7 +229,9 @@ void Mips16InstrInfo::restoreFrame(unsigned SP, int64_t FrameSize, DebugLoc DL = I != MBB.end() ? I->getDebugLoc() : DebugLoc(); if (!NeverUseSaveRestore) { if (isUInt<11>(FrameSize)) - BuildMI(MBB, I, DL, get(Mips::RestoreRaF16)).addImm(FrameSize); + BuildMI(MBB, I, DL, get(Mips::RestoreX16)).addReg(Mips::RA). + addReg(Mips::S0). + addReg(Mips::S1).addReg(Mips::S2).addImm(FrameSize); else { int Base = 2040; // should create template function like isUInt that // returns largest possible n bit unsigned integer @@ -233,7 +240,9 @@ void Mips16InstrInfo::restoreFrame(unsigned SP, int64_t FrameSize, BuildAddiuSpImm(MBB, I, Remainder); else adjustStackPtrBig(SP, Remainder, MBB, I, Mips::A0, Mips::A1); - BuildMI(MBB, I, DL, get(Mips::RestoreRaF16)). addImm(Base); + BuildMI(MBB, I, DL, get(Mips::RestoreX16)).addReg(Mips::RA). + addReg(Mips::S0). + addReg(Mips::S1).addReg(Mips::S2).addImm(Base); } } else { -- cgit v1.2.3