[MIPS 16/30] Kill gpr_mode

Richard Sandiford rsandifo@nildram.co.uk
Fri Oct 19 09:07:00 GMT 2007


The MIPS port has a variable called gpr_mode that gives the full
mode of a GPR.  This is a hang-over from the PS2 port, where the
GPRs were 128 bits.  On all FSF targets, gpr_mode == word_mode,
and we stopped making the distinction long ago.  Keeping gpr_mode
now seems to promise something that we don't deliver, so this patch
removes it.

Richard


gcc/
	* config/mips/mips.c (gpr_mode): Delete.
	(mips16e_build_save_restore): Use word_mode and UNITS_PER_WORD
	instead of gpr_mode.
	(mips_for_each_saved_reg): Likewise.
	(mips_expand_prologue, mips_expand_epilogue): Likewise.
	(override_options): Don't initialize gpr_mode.
	* config/mips/mips.md (eh_return): Use word_mode instead of gpr_mode.

Index: gcc/config/mips/mips.c
===================================================================
--- gcc/config/mips/mips.c	2007-10-18 11:07:10.000000000 +0100
+++ gcc/config/mips/mips.c	2007-10-18 11:07:11.000000000 +0100
@@ -532,9 +532,6 @@ enum mips_code_readable_setting mips_cod
 /* If TRUE, we split addresses into their high and low parts in the RTL.  */
 int mips_split_addresses;
 
-/* Mode used for saving/restoring general purpose registers.  */
-static enum machine_mode gpr_mode;
-
 /* Array giving truth value on whether or not a given hard register
    can support a given mode.  */
 char mips_hard_regno_mode_ok[(int)MAX_MACHINE_MODE][FIRST_PSEUDO_REGISTER];
@@ -7510,7 +7507,7 @@ mips16e_build_save_restore (bool restore
   /* Save the arguments.  */
   for (i = 0; i < nargs; i++)
     {
-      offset = top_offset + i * GET_MODE_SIZE (gpr_mode);
+      offset = top_offset + i * UNITS_PER_WORD;
       set = mips16e_save_restore_reg (restore_p, offset, GP_ARG_FIRST + i);
       XVECEXP (pattern, 0, n++) = set;
     }
@@ -7558,7 +7555,7 @@ mips16e_save_restore_pattern_p (rtx patt
   top_offset = adjust > 0 ? adjust : 0;
 
   /* Interpret all other members of the PARALLEL.  */
-  save_offset = top_offset - GET_MODE_SIZE (gpr_mode);
+  save_offset = top_offset - UNITS_PER_WORD;
   mask = 0;
   nargs = 0;
   i = 0;
@@ -7587,7 +7584,7 @@ mips16e_save_restore_pattern_p (rtx patt
 	return false;
 
       /* Check for argument saves.  */
-      if (offset == top_offset + nargs * GET_MODE_SIZE (gpr_mode)
+      if (offset == top_offset + nargs * UNITS_PER_WORD
 	  && REGNO (reg) == GP_ARG_FIRST + nargs)
 	nargs++;
       else if (offset == save_offset)
@@ -7597,7 +7594,7 @@ mips16e_save_restore_pattern_p (rtx patt
 	      return false;
 
 	  mask |= 1 << REGNO (reg);
-	  save_offset -= GET_MODE_SIZE (gpr_mode);
+	  save_offset -= UNITS_PER_WORD;
 	}
       else
 	return false;
@@ -8198,8 +8195,8 @@ mips_for_each_saved_reg (HOST_WIDE_INT s
   for (regno = GP_REG_LAST; regno >= GP_REG_FIRST; regno--)
     if (BITSET_P (cfun->machine->frame.mask, regno - GP_REG_FIRST))
       {
-	mips_save_restore_reg (gpr_mode, regno, offset, fn);
-	offset -= GET_MODE_SIZE (gpr_mode);
+	mips_save_restore_reg (word_mode, regno, offset, fn);
+	offset -= UNITS_PER_WORD;
       }
 
   /* This loop must iterate over the same space as its companion in
@@ -8488,8 +8485,9 @@ mips_expand_prologue (void)
  	  for (regno = GP_REG_FIRST; regno < GP_REG_LAST; regno++)
  	    if (BITSET_P (mask, regno - GP_REG_FIRST))
  	      {
-		offset -= GET_MODE_SIZE (gpr_mode);
-		mips_save_restore_reg (gpr_mode, regno, offset, mips_save_reg);
+		offset -= UNITS_PER_WORD;
+		mips_save_restore_reg (word_mode, regno,
+				       offset, mips_save_reg);
  	      }
  	}
       else
@@ -8693,8 +8691,8 @@ mips_expand_epilogue (int sibcall_p)
       for (regno = GP_REG_FIRST; regno < GP_REG_LAST; regno++)
  	if (BITSET_P (mask, regno - GP_REG_FIRST))
  	  {
- 	    offset -= GET_MODE_SIZE (gpr_mode);
- 	    mips_save_restore_reg (gpr_mode, regno, offset, mips_restore_reg);
+ 	    offset -= UNITS_PER_WORD;
+ 	    mips_save_restore_reg (word_mode, regno, offset, mips_restore_reg);
  	  }
 
       /* Restore the remaining registers and deallocate the final bit
@@ -12201,10 +12199,6 @@ override_options (void)
       mips_hard_regno_mode_ok[(int)mode][regno]
 	= mips_hard_regno_mode_ok_p (regno, mode);
 
-  /* Save GPR registers in word_mode sized hunks.  word_mode hasn't been
-     initialized yet, so we can't use that here.  */
-  gpr_mode = TARGET_64BIT ? DImode : SImode;
-
   /* Function to allocate machine-dependent function status.  */
   init_machine_status = &mips_init_machine_status;
 
Index: gcc/config/mips/mips.md
===================================================================
--- gcc/config/mips/mips.md	2007-10-18 11:07:01.000000000 +0100
+++ gcc/config/mips/mips.md	2007-10-18 11:07:11.000000000 +0100
@@ -5548,10 +5548,8 @@ (define_expand "eh_return"
   [(use (match_operand 0 "general_operand"))]
   ""
 {
-  enum machine_mode gpr_mode = TARGET_64BIT ? DImode : SImode;
-
-  if (GET_MODE (operands[0]) != gpr_mode)
-    operands[0] = convert_to_mode (gpr_mode, operands[0], 0);
+  if (GET_MODE (operands[0]) != word_mode)
+    operands[0] = convert_to_mode (word_mode, operands[0], 0);
   if (TARGET_64BIT)
     emit_insn (gen_eh_set_lr_di (operands[0]));
   else



More information about the Gcc-patches mailing list