implemented sub
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 21 Jul 2006 12:26:16 +0000 (12:26 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 21 Jul 2006 12:26:16 +0000 (12:26 +0000)
correctly update the stack pointer in the prologue and epilogue

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29244 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/ARMRegisterInfo.cpp

index 4cf5acce849b31bc3ccddf7b7efe9c6781fc6913..6c216f24e9db7c5593af9145073a0a5029c3b272 100644 (file)
@@ -76,3 +76,7 @@ def movri   : InstARM<(ops IntRegs:$dst, i32imm:$src),
 def addri   : InstARM<(ops IntRegs:$dst, IntRegs:$a, i32imm:$b),
                        "add $dst, $a, $b",
                       [(set IntRegs:$dst, (add IntRegs:$a, imm:$b))]>;
+
+def subri   : InstARM<(ops IntRegs:$dst, IntRegs:$a, i32imm:$b),
+                       "sub $dst, $a, $b",
+                      [(set IntRegs:$dst, (sub IntRegs:$a, imm:$b))]>;
index 8daf06579489bf5e806d16a254bf2678d2b74fed..a9fe70566785f82b1efecb45ffc7338d7ad0a4d4 100644 (file)
@@ -117,14 +117,17 @@ processFunctionBeforeFrameFinalized(MachineFunction &MF) const {}
 
 void ARMRegisterInfo::emitPrologue(MachineFunction &MF) const {
   MachineBasicBlock &MBB = MF.front();
+  MachineBasicBlock::iterator MBBI = MBB.begin();
   MachineFrameInfo  *MFI = MF.getFrameInfo();
   int           NumBytes = (int) MFI->getStackSize();
 
   //hack
   assert(NumBytes == 0);
 
-  //add a sp = sp - 4
-  BuildMI(MBB, MBB.begin(), ARM::str, 1, ARM::R14).addReg(ARM::R13);
+  //sub sp, sp, #4
+  BuildMI(MBB, MBBI, ARM::subri, 2, ARM::R13).addReg(ARM::R13).addImm(4);
+  //str lr, [sp]
+  BuildMI(MBB, MBBI, ARM::str, 1, ARM::R14).addReg(ARM::R13);
 }
 
 void ARMRegisterInfo::emitEpilogue(MachineFunction &MF,
@@ -138,8 +141,10 @@ void ARMRegisterInfo::emitEpilogue(MachineFunction &MF,
   //hack
   assert(NumBytes == 0);
 
+  //ldr lr, [sp]
   BuildMI(MBB, MBBI, ARM::ldr, 2, ARM::R14).addImm(0).addReg(ARM::R13);
-  //add a sp = sp + 4
+  //add sp, sp, #4
+  BuildMI(MBB, MBBI, ARM::addri, 2, ARM::R13).addReg(ARM::R13).addImm(4);
 }
 
 unsigned ARMRegisterInfo::getRARegister() const {