[gnu.gcc.bug] bugfix for Mips support

loepere@WOMBAT.WESTFORD.CCUR.COM (09/08/89)

The Mips definition for gcc is off by a word when allocating stack
space for preserving registers.  This appears to be an original
problem that only manifests itself with the latest version.  Here are
diffs for tm-mips.h (line numbers are for gcc 1.35.96). - Keith

*** /usr/mips/gcc/VIRGIN-GNU/tm-mips.h	Wed Sep  6 21:18:07 1989
--- /usr/mips/gcc/config/tm-mips.h	Wed Sep  6 22:21:37 1989
***************
*** 553,557
     first local allocated.  Otherwise, it is the offset to the BEGINNING
     of the first local allocated.  */
! #define STARTING_FRAME_OFFSET -4
  
  /* If we generate an insn to push BYTES bytes,
--- 553,557 -----
     first local allocated.  Otherwise, it is the offset to the BEGINNING
     of the first local allocated.  */
! #define STARTING_FRAME_OFFSET -8	/* space used for VARARGS support */
  
  /* If we generate an insn to push BYTES bytes,
***************
*** 811,815
    register int mask = 0, fmask=0;					\
    static char dont_save_regs[] = CALL_USED_REGISTERS;			\
!   register int push_loc = 0,tsize = SIZE+4;				\
    char *fp_str;								\
    extern char *reg_numchar[];						\
--- 811,815 -----
    register int mask = 0, fmask=0;					\
    static char dont_save_regs[] = CALL_USED_REGISTERS;			\
!   register int push_loc = 0,tsize = SIZE+8;				\
    char *fp_str;								\
    extern char *reg_numchar[];						\
***************
*** 855,862
  	  || (regs_ever_live[regno] && !dont_save_regs[regno]))		\
  	{								\
- 	  push_loc += 4;						\
  	  fprintf (FILE,"\tsw\t%s,%d(%s)\n",				\
  		   TARGET_NAME_REGS ? reg_names[regno]			\
  		   : reg_numchar[regno],push_loc,fp_str);		\
  	}								\
      }									\
--- 855,862 -----
  	  || (regs_ever_live[regno] && !dont_save_regs[regno]))		\
  	{								\
  	  fprintf (FILE,"\tsw\t%s,%d(%s)\n",				\
  		   TARGET_NAME_REGS ? reg_names[regno]			\
  		   : reg_numchar[regno],push_loc,fp_str);		\
+ 	  push_loc += 4;						\
  	}								\
      }									\
***************
*** 866,872
  	       TARGET_NAME_REGS ? reg_names[9]				\
  	       : reg_numchar[9],tsize);					\
!       fprintf (FILE,"\tsw\t%s,-4(%s)\t#Varargs suspicion\n",		\
  	       TARGET_NAME_REGS ? reg_names[9]				\
  	       : reg_numchar[9],					\
               TARGET_NAME_REGS ? reg_names[29]				\
  	       : reg_numchar[29]);					\
--- 866,873 -----
  	       TARGET_NAME_REGS ? reg_names[9]				\
  	       : reg_numchar[9],tsize);					\
!       fprintf (FILE,"\tsw\t%s,%d(%s)\t#Varargs suspicion\n",		\
  	       TARGET_NAME_REGS ? reg_names[9]				\
  	       : reg_numchar[9],					\
+ 	     tsize-4,							\
               TARGET_NAME_REGS ? reg_names[29]				\
  	       : reg_numchar[29]);					\
***************
*** 872,880
  	       : reg_numchar[29]);					\
        for (fregno = 44; fregno< 48; fregno += 2)			\
! 	{push_loc += 8;							\
! 	 fprintf (FILE,"\ts.d\t%s,%d(%s)\t#Varargs Suspicion\n",	\
  		  ( (TARGET_NAME_REGS)					\
  		   ?reg_names[fregno]: reg_numchar[fregno]),		\
! 		  push_loc,fp_str);}					\
      }									\
    for  (regno = 29; regno >= 0; regno--)				\
--- 873,883 -----
  	       : reg_numchar[29]);					\
        for (fregno = 44; fregno< 48; fregno += 2)			\
! 	{								\
! 	  fprintf (FILE,"\ts.d\t%s,%d(%s)\t#Varargs Suspicion\n",	\
  		  ( (TARGET_NAME_REGS)					\
  		   ?reg_names[fregno]: reg_numchar[fregno]),		\
! 		  push_loc,fp_str);					\
! 	  push_loc += 8;						\
! 	}								\
      }									\
    for  (regno = 29; regno >= 0; regno--)				\
***************
*** 883,890
  	  || (regs_ever_live[regno] && !dont_save_regs[regno]))		\
  	{								\
- 	  push_loc += 4;						\
  	  fprintf (FILE, "\tsw\t%s,%d(%s)\n",				\
  		   TARGET_NAME_REGS ? reg_names[regno]			\
  		   : reg_numchar[regno],push_loc,fp_str);		\
  	}								\
      }									\
--- 886,893 -----
  	  || (regs_ever_live[regno] && !dont_save_regs[regno]))		\
  	{								\
  	  fprintf (FILE, "\tsw\t%s,%d(%s)\n",				\
  		   TARGET_NAME_REGS ? reg_names[regno]			\
  		   : reg_numchar[regno],push_loc,fp_str);		\
+ 	  push_loc += 4;						\
  	}								\
      }									\
***************
*** 892,900
    for  (regno = 32; regno < FIRST_PSEUDO_REGISTER; regno += 2)		\
      if (regs_ever_live[regno] && !dont_save_regs[regno])		\
!       {push_loc += 8;							\
!        fprintf (FILE,"\ts.d\t%s,%d(%s)\n",				\
  		( (TARGET_NAME_REGS) ? reg_names[regno]			\
  		 : reg_numchar[regno]),push_loc,fp_str);		\
!      }									\
    if (frame_pointer_needed)						\
      fprintf (FILE,"\taddiu\t%s,%s,%d\t#Establish FramePTR\n",		\
--- 895,904 -----
    for  (regno = 32; regno < FIRST_PSEUDO_REGISTER; regno += 2)		\
      if (regs_ever_live[regno] && !dont_save_regs[regno])		\
!       {									\
! 	fprintf (FILE,"\ts.d\t%s,%d(%s)\n",				\
  		( (TARGET_NAME_REGS) ? reg_names[regno]			\
  		 : reg_numchar[regno]),push_loc,fp_str);		\
! 	push_loc += 8;							\
!       }									\
    if (frame_pointer_needed)						\
      fprintf (FILE,"\taddiu\t%s,%s,%d\t#Establish FramePTR\n",		\
***************
*** 981,985
  	   || (regs_ever_live[regno] && !dont_save_regs[regno]))	\
  	{								\
- 	  push_loc += 4;						\
  	  fprintf (FILE,"\tlw\t%s,%d(%s)\n",				\
  		   TARGET_NAME_REGS ? reg_names[regno]			\

--- 985,988 -----
  	   || (regs_ever_live[regno] && !dont_save_regs[regno]))	\
  	{								\
  	  fprintf (FILE,"\tlw\t%s,%d(%s)\n",				\
  		   TARGET_NAME_REGS ? reg_names[regno]			\
***************
*** 989,992
  		    push_loc),						\
  		   (frame_pointer_needed ? fp_str :sp_str));		\
  	}								\
        if ( THIS_VARARGS_SUSPECTED &&  (regno == 30)) push_loc += 16;	\

--- 992,996 -----
  		    push_loc),						\
  		   (frame_pointer_needed ? fp_str :sp_str));		\
+ 	  push_loc += 4;						\
  	}								\
        if ( THIS_VARARGS_SUSPECTED &&  (regno == 30)) push_loc += 16;	\
***************
*** 1000,1004
        if  (regs_ever_live[regno] && !dont_save_regs[regno])		\
  	{								\
- 	  push_loc += 8;						\
  	  fprintf (FILE,"\tl.d\t%s,%d(%s)\n",				\
  		   ( ( TARGET_NAME_REGS) ? reg_names[regno]		\

--- 1004,1007 -----
        if  (regs_ever_live[regno] && !dont_save_regs[regno])		\
  	{								\
  	  fprintf (FILE,"\tl.d\t%s,%d(%s)\n",				\
  		   ( ( TARGET_NAME_REGS) ? reg_names[regno]		\
***************
*** 1008,1011
  		    : push_loc),					\
  		   (frame_pointer_needed ? fp_str :sp_str));		\
  	}								\
      }									\

--- 1011,1015 -----
  		    : push_loc),					\
  		   (frame_pointer_needed ? fp_str :sp_str));		\
+ 	  push_loc += 8;						\
  	}								\
      }									\