diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2006-07-21 12:26:16 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2006-07-21 12:26:16 +0000 |
commit | 44819cb20ab8e84fc14ea1e6fc69fb797c70a50d (patch) | |
tree | eda0cfe0a4c3d34d2029279d7b912be1582d96be /lib/Target/ARM/ARMRegisterInfo.cpp | |
parent | 625518002de57fb9e5e95856b7554372ac6f0210 (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.cpp | 11 |
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 { |