mips.c (mips_class_max_nregs): Check that the mode is OK for ST_REGS and FP_REGS...
authorRichard Sandiford <rdsandiford@googlemail.com>
Sat, 20 Aug 2011 19:00:40 +0000 (19:00 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sat, 20 Aug 2011 19:00:40 +0000 (19:00 +0000)
gcc/
* config/mips/mips.c (mips_class_max_nregs): Check that the mode is
OK for ST_REGS and FP_REGS before taking those classes into account.

From-SVN: r177931

gcc/ChangeLog
gcc/config/mips/mips.c

index ee94a7956b28035f5625e3d7898423f4793117da..4ca6298dc1faab2ca36bff6799151de7c4d12649 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-20  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * config/mips/mips.c (mips_class_max_nregs): Check that the mode is
+       OK for ST_REGS and FP_REGS before taking those classes into account.
+
 2011-08-20  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * config/mips/mips.c (mips_reorg_process_insns): Check for jumps
index 5a410eb04640ba75520932d52f5240b175474181..53542aabbb0afb5bb5e9d180145e646e4d4cd342 100644 (file)
@@ -10630,12 +10630,14 @@ mips_class_max_nregs (enum reg_class rclass, enum machine_mode mode)
   COPY_HARD_REG_SET (left, reg_class_contents[(int) rclass]);
   if (hard_reg_set_intersect_p (left, reg_class_contents[(int) ST_REGS]))
     {
-      size = MIN (size, 4);
+      if (HARD_REGNO_MODE_OK (ST_REG_FIRST, mode))
+       size = MIN (size, 4);
       AND_COMPL_HARD_REG_SET (left, reg_class_contents[(int) ST_REGS]);
     }
   if (hard_reg_set_intersect_p (left, reg_class_contents[(int) FP_REGS]))
     {
-      size = MIN (size, UNITS_PER_FPREG);
+      if (HARD_REGNO_MODE_OK (FP_REG_FIRST, mode))
+       size = MIN (size, UNITS_PER_FPREG);
       AND_COMPL_HARD_REG_SET (left, reg_class_contents[(int) FP_REGS]);
     }
   if (!hard_reg_set_empty_p (left))