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
This commit is contained in:
Rafael Espindola 2006-07-21 12:26:16 +00:00
parent 625518002d
commit 44819cb20a
2 changed files with 12 additions and 3 deletions

View File

@ -76,3 +76,7 @@ def movri : InstARM<(ops IntRegs:$dst, i32imm:$src),
def addri : InstARM<(ops IntRegs:$dst, IntRegs:$a, i32imm:$b), def addri : InstARM<(ops IntRegs:$dst, IntRegs:$a, i32imm:$b),
"add $dst, $a, $b", "add $dst, $a, $b",
[(set IntRegs:$dst, (add IntRegs:$a, imm:$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))]>;

View File

@ -117,14 +117,17 @@ processFunctionBeforeFrameFinalized(MachineFunction &MF) const {}
void ARMRegisterInfo::emitPrologue(MachineFunction &MF) const { void ARMRegisterInfo::emitPrologue(MachineFunction &MF) const {
MachineBasicBlock &MBB = MF.front(); MachineBasicBlock &MBB = MF.front();
MachineBasicBlock::iterator MBBI = MBB.begin();
MachineFrameInfo *MFI = MF.getFrameInfo(); MachineFrameInfo *MFI = MF.getFrameInfo();
int NumBytes = (int) MFI->getStackSize(); int NumBytes = (int) MFI->getStackSize();
//hack //hack
assert(NumBytes == 0); assert(NumBytes == 0);
//add a sp = sp - 4 //sub sp, sp, #4
BuildMI(MBB, MBB.begin(), ARM::str, 1, ARM::R14).addReg(ARM::R13); 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, void ARMRegisterInfo::emitEpilogue(MachineFunction &MF,
@ -138,8 +141,10 @@ void ARMRegisterInfo::emitEpilogue(MachineFunction &MF,
//hack //hack
assert(NumBytes == 0); assert(NumBytes == 0);
//ldr lr, [sp]
BuildMI(MBB, MBBI, ARM::ldr, 2, ARM::R14).addImm(0).addReg(ARM::R13); 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 { unsigned ARMRegisterInfo::getRARegister() const {