diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/ChangeLog | 18 | ||||
| -rw-r--r-- | gcc/config/m32r/m32r-protos.h | 4 | ||||
| -rw-r--r-- | gcc/config/m32r/m32r.c | 30 | ||||
| -rw-r--r-- | gcc/config/m32r/m32r.h | 20 | ||||
| -rw-r--r-- | gcc/config/m32r/m32r.md | 4 | 
5 files changed, 43 insertions, 33 deletions
| diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6d8b7ab..fd65dd5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,21 @@ +2001-06-11  Nick Clifton  <nickc@cambridge.redhat.com> + +	* config/m32r/m32r.md (movstrsi_internal): Do not expect a +	return string from m32r_output_block_move. +        * config/m32r/m32r-protos.h: Make m32r_output_block_move a +	void function. +        * config/m32r/m32r.h (INT32_P): Rename to UNIT32_P and remove +	integer overflow. +        (ROUND_ADVANCE): Remove signed/unsigned conflict. +        * config/m32r/m32r.c: Declare prototypes for static functions. +        (move_src_operand): Replace INT32_P with UINT32_P. +        (function_arg_partial_nregs): Fixed signed/unsigned conflict +	in initialisation of 'size'. +        (m32r_sched_reord): Remove redundant declarations of 'code'. +        (m32r_output_block_move): Change to a void function. +        (m32r_encode_section_info): Cast return of +	TREE_STRING_POINTER to avoid compile time warning. +  2001-06-11  Richard Henderson  <rth@redhat.com>  	* config/alpha/osf5.h (TARGET_LD_BUGGY_LDGP): New. diff --git a/gcc/config/m32r/m32r-protos.h b/gcc/config/m32r/m32r-protos.h index 7912a0a..f3eda83 100644 --- a/gcc/config/m32r/m32r-protos.h +++ b/gcc/config/m32r/m32r-protos.h @@ -1,5 +1,5 @@  /* Prototypes for m32r.c functions used in the md file & elsewhere. -   Copyright (C) 1999, 2000 Free Software Foundation, Inc. +   Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.  This file is part of GNU CC. @@ -60,7 +60,7 @@ extern int    m32r_address_code			PARAMS ((rtx));  extern void   m32r_initialize_trampoline	PARAMS ((rtx, rtx, rtx));  extern int    zero_and_one			PARAMS ((rtx, rtx));  extern char * emit_cond_move			PARAMS ((rtx *, rtx)); -extern char * m32r_output_block_move 		PARAMS ((rtx, rtx *)); +extern void   m32r_output_block_move 		PARAMS ((rtx, rtx *));  extern void   m32r_expand_block_move 		PARAMS ((rtx *));  extern void   m32r_print_operand		PARAMS ((FILE *, rtx, int));  extern void   m32r_print_operand_address	PARAMS ((FILE *, rtx)); diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index 88351dd..5bb2d56 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -1,5 +1,5 @@  /* Subroutines used for code generation on the Mitsubishi M32R cpu. -   Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.  This file is part of GNU CC. @@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA.  */  #include "function.h"  #include "recog.h"  #include "toplev.h" +#include "ggc.h"  #include "m32r-protos.h"  /* Save the operands last given to a compare for use when we @@ -55,7 +56,9 @@ enum m32r_sdata m32r_sdata;  int m32r_sched_odd_word_p;  /* Forward declaration.  */ -static void init_reg_tables			PARAMS ((void)); +static void  init_reg_tables			PARAMS ((void)); +static void  block_move_call			PARAMS ((rtx, rtx, rtx)); +static int   m32r_is_insn			PARAMS ((rtx));  /* Called by OVERRIDE_OPTIONS to initialize various things.  */ @@ -372,7 +375,7 @@ m32r_encode_section_info (decl)        if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd'  	  && DECL_SECTION_NAME (decl) != NULL_TREE)  	{ -	  char *name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); +	  char *name = (char *) TREE_STRING_POINTER (DECL_SECTION_NAME (decl));  	  if (! strcmp (name, ".sdata") || ! strcmp (name, ".sbss"))  	    {  #if 0 /* ??? There's no reason to disallow this, is there?  */ @@ -436,6 +439,7 @@ m32r_encode_section_info (decl)        const char *str = XSTR (XEXP (rtl, 0), 0);        int len = strlen (str);        char *newstr = ggc_alloc (len + 2); +        strcpy (newstr + 1, str);        *newstr = prefix;        XSTR (XEXP (rtl, 0), 0) = newstr; @@ -744,7 +748,7 @@ move_src_operand (op, mode)  	 loadable with one insn, and split the rest into two.  The instances  	 where this would help should be rare and the current way is  	 simpler.  */ -      return INT32_P (INTVAL (op)); +      return UINT32_P (INTVAL (op));      case LABEL_REF :        return TARGET_ADDR24;      case CONST_DOUBLE : @@ -1345,9 +1349,11 @@ function_arg_partial_nregs (cum, mode, type, named)       int named ATTRIBUTE_UNUSED;  {    int ret; -  int size = (((mode == BLKmode && type) -	       ? int_size_in_bytes (type) -	       : GET_MODE_SIZE (mode)) + UNITS_PER_WORD - 1) / UNITS_PER_WORD; +  unsigned int size = +    (((mode == BLKmode && type) +      ? (unsigned int) int_size_in_bytes (type) +      : GET_MODE_SIZE (mode)) + UNITS_PER_WORD - 1) +    / UNITS_PER_WORD;    if (*cum >= M32R_MAX_PARM_REGS)      ret = 0; @@ -1559,7 +1565,6 @@ m32r_sched_reorder (stream, verbose, ready, n_ready)        for (i = n_ready-1; i >= 0; i--)  	{  	  rtx insn = ready[i]; -	  enum rtx_code code;  	  if (! m32r_is_insn (insn))  	    { @@ -1615,7 +1620,6 @@ m32r_sched_reorder (stream, verbose, ready, n_ready)  	  for (i = 0; i < n_ready; i++)  	    {  	      rtx insn = ready[i]; -	      enum rtx_code code;  	      fprintf (stream, " %d", INSN_UID (ready[i])); @@ -2608,12 +2612,12 @@ emit_cond_move (operands, insn)      }    sprintf (buffer, "mvfc %s, cbr", dest); -   +    /* If the true value was '0' then we need to invert the results of the move.  */    if (INTVAL (operands [2]) == 0)      sprintf (buffer + strlen (buffer), "\n\txor3 %s, %s, #1",  	     dest, dest); -   +    return buffer;  } @@ -2777,7 +2781,7 @@ m32r_expand_block_move (operands)     operands[3] is a temp register.     operands[4] is a temp register.  */ -char * +void  m32r_output_block_move (insn, operands)       rtx insn ATTRIBUTE_UNUSED;       rtx operands[]; @@ -2891,8 +2895,6 @@ m32r_output_block_move (insn, operands)        first_time = 0;      } - -  return "";  }  /* Return true if op is an integer constant, less than or equal to diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index 1dd4908..4598302 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -753,15 +753,13 @@ extern enum reg_class m32r_regno_reg_class[FIRST_PSEUDO_REGISTER];  #define INT8_P(X) ((X) >= -0x80 && (X) <= 0x7f)  #define INT16_P(X) ((X) >= -0x8000 && (X) <= 0x7fff)  #define CMP_INT16_P(X) ((X) >= -0x7fff && (X) <= 0x8000) -#define UINT16_P(X) (((unsigned HOST_WIDE_INT)(X)) <= 0xffff)  #define UPPER16_P(X) (((X) & 0xffff) == 0				\  		      && ((X) >> 16) >= -0x8000				\  		      && ((X) >> 16) <= 0x7fff) -#define UINT24_P(X) (((unsigned HOST_WIDE_INT) (X)) < 0x1000000) -#define INT32_P(X) (((X) >= -(HOST_WIDE_INT) 0x80000000			\ -		     && (X) <= (HOST_WIDE_INT) 0x7fffffff)		\ -		    || (unsigned HOST_WIDE_INT) (X) <= 0xffffffff) -#define UINT5_P(X) ((X) >= 0 && (X) < 32) +#define UINT16_P(X) (((unsigned HOST_WIDE_INT) (X)) <= 0x0000ffff) +#define UINT24_P(X) (((unsigned HOST_WIDE_INT) (X)) <= 0x00ffffff) +#define UINT32_P(X) (((unsigned HOST_WIDE_INT) (X)) <= 0xffffffff) +#define UINT5_P(X)  ((X) >= 0 && (X) < 32)  #define INVERTED_SIGNED_8BIT(VAL) ((VAL) >= -127 && (VAL) <= 128)  #define CONST_OK_FOR_LETTER_P(VALUE, C)					\ @@ -1046,19 +1044,11 @@ M32R_STACK_ALIGN (current_function_outgoing_args_size)  /* Round arg MODE/TYPE up to the next word boundary.  */  #define ROUND_ADVANCE_ARG(MODE, TYPE) \    ((MODE) == BLKmode				\ -   ? ROUND_ADVANCE (int_size_in_bytes (TYPE))	\ +   ? ROUND_ADVANCE ((unsigned int) int_size_in_bytes (TYPE))	\     : ROUND_ADVANCE (GET_MODE_SIZE (MODE)))  /* Round CUM up to the necessary point for argument MODE/TYPE.  */ -#if 0 -#define ROUND_ADVANCE_CUM(CUM, MODE, TYPE) \ -((((MODE) == BLKmode ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) \ -  > BITS_PER_WORD)	\ - ? ((CUM) + 1 & ~1)	\ - : (CUM)) -#else  #define ROUND_ADVANCE_CUM(CUM, MODE, TYPE) (CUM) -#endif  /* Return boolean indicating arg of type TYPE and mode MODE will be passed in     a reg.  This includes arguments that have to be passed by reference as the diff --git a/gcc/config/m32r/m32r.md b/gcc/config/m32r/m32r.md index 57ca196..e692b2c 100644 --- a/gcc/config/m32r/m32r.md +++ b/gcc/config/m32r/m32r.md @@ -1,5 +1,5 @@  ;; Machine description of the Mitsubishi M32R cpu for GNU C compiler -;; Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.  ;; This file is part of GNU CC. @@ -2498,6 +2498,6 @@     (clobber (match_scratch:SI 3 "=&r"))				;; temp 1     (clobber (match_scratch:SI 4 "=&r"))]			;; temp 2    "" -  "* return m32r_output_block_move (insn, operands);" +  "* m32r_output_block_move (insn, operands); return \"\"; "    [(set_attr "type"	"store8")     (set_attr "length"	"72")]) ;; Maximum | 
