(incoming_reg): Keep regstack aligned to even boundary.
authorDoug Evans <dje@gnu.org>
Sat, 14 Jan 1995 06:22:17 +0000 (06:22 +0000)
committerDoug Evans <dje@gnu.org>
Sat, 14 Jan 1995 06:22:17 +0000 (06:22 +0000)
From-SVN: r8759

gcc/config/a29k/a29k.c

index 4c9784111b1bb81e9d641cd4c8c67e09d0a3bbda..90cdeec6b72b3b6592595edeb4483d211cb25601 100644 (file)
@@ -806,8 +806,13 @@ incoming_reg (start, count)
        CLEAR_HARD_REG_BIT (call_fixed_reg_set, i);
       }
 
-  /* Shorten the maximum size of the frame.  */
-  for (i = R_AR (0) - start - count; i < R_AR (0) - start; i++)
+  /* Shorten the maximum size of the frame.
+     Remember that R_AR(-1,-2) are place holders for the caller's lr0,lr1.
+     Make sure to keep the frame rounded to an even boundary.  Rounding up
+     to an 8 byte boundary will use a slot.  Otherwise a frame with 121 local
+     regs and 5 arguments will overrun the stack (121+1 + 5 + 2 > 128).  */
+  /* ??? An alternative would be to never allocate one reg.  */
+  for (i = (R_AR (0) - 2 - start - count) & ~1; i < R_AR (0) - 2 - start; i++)
     {
       fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 1;
       SET_HARD_REG_BIT (fixed_reg_set, i);