aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2011-08-20 19:00:40 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2011-08-20 19:00:40 +0000
commit894113c35c8cc3caa9b15860eb9ad06130776091 (patch)
tree4b43dbc021de8ec6b15c9a5fc49e376aac129356 /gcc
parent9e187b317b5f96e7f5a343790e5952fa7f17126f (diff)
downloadgcc-894113c35c8cc3caa9b15860eb9ad06130776091.zip
gcc-894113c35c8cc3caa9b15860eb9ad06130776091.tar.gz
gcc-894113c35c8cc3caa9b15860eb9ad06130776091.tar.bz2
mips.c (mips_class_max_nregs): Check that the mode is OK for ST_REGS and FP_REGS before taking those classes...
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/mips/mips.c6
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ee94a79..4ca6298 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
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
before checking for annulled branches.
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 5a410eb..53542aa 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -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))