tm.texi: Remove STARTING_FRAME_PHASE.
authorAldy Hernandez <aldyh@gcc.gnu.org>
Tue, 22 Jan 2002 02:36:54 +0000 (02:36 +0000)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Tue, 22 Jan 2002 02:36:54 +0000 (02:36 +0000)
        * doc/tm.texi: Remove STARTING_FRAME_PHASE.

        * config/rs6000/rs6000.h: Same.

        * function.c (instantiate_virtual_regs): Remove
        STARTING_FRAME_PHASE.
        (assign_stack_local_1): Same.
        Calculate frame phase.

From-SVN: r49063

gcc/config/rs6000/rs6000.h
gcc/doc/tm.texi
gcc/function.c

index 10e1619..2deaf75 100644 (file)
@@ -1382,11 +1382,6 @@ typedef struct rs6000_stack {
    + RS6000_VARARGS_AREA                                               \
    + RS6000_SAVE_AREA)
 
-/* How far (in bytes) is the start of the frame from the stack
-   alignment.  For ppc 32bits, the stack is aligned to 128 bits, but
-   the frame starts 64bits later.  */
-#define STARTING_FRAME_PHASE (TARGET_32BIT ? 8 : 0)
-
 /* Offset from the stack pointer register to an item dynamically
    allocated on the stack, e.g., by `alloca'.
 
index bb296ee..c81461d 100644 (file)
@@ -2598,18 +2598,6 @@ value @code{STARTING_FRAME_OFFSET}.
 @c i'm not sure if the above is still correct.. had to change it to get
 @c rid of an overfull.  --mew 2feb93
 
-@findex STARTING_FRAME_PHASE
-@item STARTING_FRAME_PHASE
-This option species how many bytes the frame is out of phase from the
-stack alignment.
-
-For example, some ports assume a stack alignment of 128 bits, but the
-start of the frame is 64 bits displaced from this alignment.  In this
-case, you would define @code{STARTING_FRAME_PHASE} to be 8.
-
-This macro defaults to 0, so there is no need to define it if the start
-of the frame maintains the stack alignment.
-
 @findex STACK_POINTER_OFFSET
 @item STACK_POINTER_OFFSET
 Offset from the stack pointer register to the first location at which
index cd39757..bf294ea 100644 (file)
@@ -68,10 +68,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT
 #endif
 
-#ifndef STARTING_FRAME_PHASE
-#define STARTING_FRAME_PHASE 0
-#endif
-
 /* Some systems use __main in a way incompatible with its use in gcc, in these
    cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
    give the same symbol without quotes for an alternative entry point.  You
@@ -528,6 +524,7 @@ assign_stack_local_1 (mode, size, align, function)
   rtx x, addr;
   int bigend_correction = 0;
   int alignment;
+  int frame_off, frame_alignment, frame_phase;
 
   if (align == 0)
     {
@@ -565,15 +562,21 @@ assign_stack_local_1 (mode, size, align, function)
   if (function->stack_alignment_needed < alignment * BITS_PER_UNIT)
     function->stack_alignment_needed = alignment * BITS_PER_UNIT;
 
+  /* Calculate how many bytes the start of local variables is off from
+     stack alignment.  */
+  frame_alignment = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
+  frame_off = STARTING_FRAME_OFFSET % frame_alignment;
+  frame_phase = frame_off ? frame_alignment - frame_off : 0;
+
   /* Round frame offset to that alignment.
      We must be careful here, since FRAME_OFFSET might be negative and
      division with a negative dividend isn't as well defined as we might
      like.  So we instead assume that ALIGNMENT is a power of two and
      use logical operations which are unambiguous.  */
 #ifdef FRAME_GROWS_DOWNWARD
-  function->x_frame_offset = FLOOR_ROUND (function->x_frame_offset - STARTING_FRAME_PHASE, alignment) + STARTING_FRAME_PHASE;
+  function->x_frame_offset = FLOOR_ROUND (function->x_frame_offset - frame_phase, alignment) + frame_phase;
 #else
-  function->x_frame_offset = CEIL_ROUND (function->x_frame_offset - STARTING_FRAME_PHASE, alignment) + STARTING_FRAME_PHASE;
+  function->x_frame_offset = CEIL_ROUND (function->x_frame_offset - frame_phase, alignment) + frame_phase;
 #endif
 
   /* On a big-endian machine, if we are allocating more space than we will use,
@@ -3481,21 +3484,6 @@ instantiate_virtual_regs (fndecl, insns)
   rtx insn;
   unsigned int i;
 
-  if (STARTING_FRAME_PHASE > 0)
-    {
-      /* Make sure the frame offset and phase displacement are aligned as
-        advertised.
-
-        Only do the sanity check if we have a STARTING_FRAME_PHASE,
-        else we might trigger this abort on ports who claim to have
-        STARTING_FRAME_OFFSET aligned properly, but don't.  I suppose
-        we could enable this and fix those ports.  */
-
-      if ((STARTING_FRAME_OFFSET + STARTING_FRAME_PHASE)
-         % (STACK_BOUNDARY / BITS_PER_UNIT))
-       abort ();
-    }
-
   /* Compute the offsets to use for this function.  */
   in_arg_offset = FIRST_PARM_OFFSET (fndecl);
   var_offset = STARTING_FRAME_OFFSET;