mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
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:
parent
625518002d
commit
44819cb20a
@ -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))]>;
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user