diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2011-08-20 19:00:40 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2011-08-20 19:00:40 +0000 |
commit | 894113c35c8cc3caa9b15860eb9ad06130776091 (patch) | |
tree | 4b43dbc021de8ec6b15c9a5fc49e376aac129356 /gcc/config/mips/mips.c | |
parent | 9e187b317b5f96e7f5a343790e5952fa7f17126f (diff) | |
download | gcc-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/config/mips/mips.c')
-rw-r--r-- | gcc/config/mips/mips.c | 6 |
1 files changed, 4 insertions, 2 deletions
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)) |