Fixed stack frame addressing bug
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Sat, 18 Aug 2007 02:19:09 +0000 (02:19 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Sat, 18 Aug 2007 02:19:09 +0000 (02:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41160 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Mips/MipsRegisterInfo.cpp

index 42e82bf5258512ce1dfd02c5f8c7d6ded80a3fb2..5d78d902c98fa9a70624c78b96a5a209fef8e22b 100644 (file)
@@ -271,15 +271,15 @@ emitPrologue(MachineFunction &MF) const
   MipsFunctionInfo *MipsFI = MF.getInfo<MipsFunctionInfo>();
   MachineBasicBlock::iterator MBBI = MBB.begin();
 
-  // Get the number of bytes to allocate from the FrameInfo
+  // Get the number of bytes to allocate from the FrameInfo.
   int NumBytes = (int) MFI->getStackSize();
 
   #ifndef NDEBUG
-  DOUT << "\n<--- EMIT PROLOGUE --->";
+  DOUT << "\n<--- EMIT PROLOGUE --->\n";
   DOUT << "Stack size :" << NumBytes << "\n";
   #endif
 
-  // Do we need to allocate space on the stack?
+  // Don't need to allocate space on the stack.
   if (NumBytes == 0) return;
 
   int FPOffset, RAOffset;
@@ -289,13 +289,13 @@ emitPrologue(MachineFunction &MF) const
   // using FP, the last stack slot becomes empty
   // and RA is saved before it.
   if ((hasFP(MF)) && (MFI->hasCalls())) {
-    FPOffset = NumBytes;
-    RAOffset = (NumBytes+4);
+    FPOffset = NumBytes+4;
+    RAOffset = (NumBytes+8);
   } else if ((!hasFP(MF)) && (MFI->hasCalls())) {
     FPOffset = 0;
-    RAOffset = NumBytes;
+    RAOffset = NumBytes+4;
   } else if ((hasFP(MF)) && (!MFI->hasCalls())) {
-    FPOffset = NumBytes;
+    FPOffset = NumBytes+4;
     RAOffset = 0;
   }
 
@@ -310,7 +310,7 @@ emitPrologue(MachineFunction &MF) const
   #endif
 
   // Align stack. 
-  NumBytes += 8;
+  NumBytes += 12;
   unsigned Align = MF.getTarget().getFrameInfo()->getStackAlignment();
   NumBytes = ((NumBytes+Align-1)/Align*Align);