aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/ARM/ARMRegisterInfo.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2006-07-21 12:26:16 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2006-07-21 12:26:16 +0000
commit44819cb20ab8e84fc14ea1e6fc69fb797c70a50d (patch)
treeeda0cfe0a4c3d34d2029279d7b912be1582d96be /lib/Target/ARM/ARMRegisterInfo.cpp
parent625518002de57fb9e5e95856b7554372ac6f0210 (diff)
implemented sub
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
Diffstat (limited to 'lib/Target/ARM/ARMRegisterInfo.cpp')
-rw-r--r--lib/Target/ARM/ARMRegisterInfo.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/Target/ARM/ARMRegisterInfo.cpp b/lib/Target/ARM/ARMRegisterInfo.cpp
index 8daf065794..a9fe705667 100644
--- a/lib/Target/ARM/ARMRegisterInfo.cpp
+++ b/lib/Target/ARM/ARMRegisterInfo.cpp
@@ -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 {