Set up the prologue and epilogue to be more like the manual and GCC output.
llvm-svn: 14502
This commit is contained in:
parent
7454c6fff0
commit
d409669877
|
@ -202,7 +202,7 @@ void PowerPCRegisterInfo::emitPrologue(MachineFunction &MF) const {
|
||||||
// Store the incoming LR so it is preserved across calls
|
// Store the incoming LR so it is preserved across calls
|
||||||
MI = BuildMI(PPC32::MFLR, 0, PPC32::R0);
|
MI = BuildMI(PPC32::MFLR, 0, PPC32::R0);
|
||||||
MBB.insert(MBBI, MI);
|
MBB.insert(MBBI, MI);
|
||||||
MI = BuildMI(PPC32::STW, 3).addReg(PPC32::R31).addSImm(-4)
|
MI = BuildMI(PPC32::STMW, 3).addReg(PPC32::R30).addSImm(-8)
|
||||||
.addReg(PPC32::R1);
|
.addReg(PPC32::R1);
|
||||||
MBB.insert(MBBI, MI);
|
MBB.insert(MBBI, MI);
|
||||||
MI = BuildMI(PPC32::STW, 3).addReg(PPC32::R0).addSImm(8).addReg(PPC32::R1);
|
MI = BuildMI(PPC32::STW, 3).addReg(PPC32::R0).addSImm(8).addReg(PPC32::R1);
|
||||||
|
@ -214,7 +214,7 @@ void PowerPCRegisterInfo::emitPrologue(MachineFunction &MF) const {
|
||||||
|
|
||||||
// adjust stack pointer: r1 -= numbytes
|
// adjust stack pointer: r1 -= numbytes
|
||||||
if (NumBytes) {
|
if (NumBytes) {
|
||||||
MI = BuildMI(PPC32::STWU, 2, PPC32::R1).addImm(-NumBytes).addReg(PPC32::R1);
|
MI = BuildMI(PPC32::STWU, 2, PPC32::R1).addImm(-80).addReg(PPC32::R1);
|
||||||
MBB.insert(MBBI, MI);
|
MBB.insert(MBBI, MI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -230,21 +230,18 @@ void PowerPCRegisterInfo::emitEpilogue(MachineFunction &MF,
|
||||||
// Get the number of bytes allocated from the FrameInfo...
|
// Get the number of bytes allocated from the FrameInfo...
|
||||||
unsigned NumBytes = MFI->getStackSize();
|
unsigned NumBytes = MFI->getStackSize();
|
||||||
|
|
||||||
// Read old LR from stack into R0
|
// Adjust stack pointer back
|
||||||
MI = BuildMI(PPC32::LWZ, 2, PPC32::R0).addSImm(8+NumBytes).addReg(PPC32::R1);
|
MI = BuildMI(PPC32::LWZ, 2, PPC32::R1).addImm(0).addReg(PPC32::R1);
|
||||||
MBB.insert(MBBI, MI);
|
MBB.insert(MBBI, MI);
|
||||||
|
|
||||||
// Adjust stack pointer back: r1 += numbytes
|
|
||||||
if (NumBytes) {
|
|
||||||
MI = BuildMI(PPC32::ADDI, 2, PPC32::R1).addReg(PPC32::R1).addSImm(NumBytes);
|
|
||||||
MBB.insert(MBBI, MI);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we have calls, restore the LR value before we branch to it
|
// If we have calls, restore the LR value before we branch to it
|
||||||
if (MFI->hasCalls()) {
|
if (MFI->hasCalls()) {
|
||||||
|
// Read old LR from stack into R0
|
||||||
|
MI = BuildMI(PPC32::LWZ, 2, PPC32::R0).addSImm(8).addReg(PPC32::R1);
|
||||||
|
MBB.insert(MBBI, MI);
|
||||||
MI = BuildMI(PPC32::MTLR, 1).addReg(PPC32::R0);
|
MI = BuildMI(PPC32::MTLR, 1).addReg(PPC32::R0);
|
||||||
MBB.insert(MBBI, MI);
|
MBB.insert(MBBI, MI);
|
||||||
MI = BuildMI(PPC32::LWZ, 2, PPC32::R31).addSImm(-4).addReg(PPC32::R1);
|
MI = BuildMI(PPC32::LMW, 2, PPC32::R30).addSImm(-8).addReg(PPC32::R1);
|
||||||
MBB.insert(MBBI, MI);
|
MBB.insert(MBBI, MI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue