> But with gcc version greater than 3.0, It allocates 104 bytes for the
> stack of a new function.

112 actually on Solaris 7 and later.

> Can anyone please let me know the reason of the difference of 8 bytes?

Obscure internal hack. :-)

/* Offset within stack frame to start allocating local variables at.
   If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
   first local allocated.  Otherwise, it is the offset to the BEGINNING
   of the first local allocated.  */
/* This allows space for one TFmode floating point value.  */
#define STARTING_FRAME_OFFSET \
  (TARGET_ARCH64 ? -16 \
   : (-SPARC_STACK_ALIGN (LONG_DOUBLE_TYPE_SIZE / BITS_PER_UNIT)))

/* On SPARC it is not possible to directly move data between
   GENERAL_REGS and FP_REGS.  */
#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
  (FP_REG_CLASS_P (CLASS1) != FP_REG_CLASS_P (CLASS2))

/* Return the stack location to use for secondary memory needed reloads.
   We want to use the reserved location just below the frame pointer.
   However, we must ensure that there is a frame, so use assign_stack_local
   if the frame size is zero.  */
#define SECONDARY_MEMORY_NEEDED_RTX(MODE) \
  (get_frame_size () == 0                                               \
   ? assign_stack_local (MODE, GET_MODE_SIZE (MODE), 0)                 \
   : gen_rtx_MEM (MODE, plus_constant (frame_pointer_rtx,               \
                                       STARTING_FRAME_OFFSET)))

-- 
Eric Botcazou

Reply via email to