aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meissner <meissner@gcc.gnu.org>1993-03-30 21:50:50 +0000
committerMichael Meissner <meissner@gcc.gnu.org>1993-03-30 21:50:50 +0000
commit574c75a3b4ce0f087201efb26f893df20ac3a887 (patch)
treef173f836adf4d8efb42c180d7cd5a786a3acf361
parentdbc131f3ccb06fb898a095ef11289cb56ddc62e4 (diff)
downloadgcc-574c75a3b4ce0f087201efb26f893df20ac3a887.zip
gcc-574c75a3b4ce0f087201efb26f893df20ac3a887.tar.gz
gcc-574c75a3b4ce0f087201efb26f893df20ac3a887.tar.bz2
fkx
fix CLASS_MAX_NREGS to reflect -mfloat64 and -msoft-float. From-SVN: r3931
-rw-r--r--gcc/config/mips/mips.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 2e67e63..f3a2ead 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -645,7 +645,7 @@ while (0)
/* Print subsidiary information on the compiler version in use. */
-#define MIPS_VERSION "[AL 1.1, MM 36]"
+#define MIPS_VERSION "[AL 1.1, MM 37]"
#ifndef MACHINE_TYPE
#define MACHINE_TYPE "BSD Mips"
@@ -1454,10 +1454,15 @@ extern enum reg_class mips_char_to_class[];
/* Return the maximum number of consecutive registers
needed to represent mode MODE in a register of class CLASS. */
+#define CLASS_UNITS(mode, num) \
+ ((GET_MODE_SIZE (mode) + ((num) * UNITS_PER_WORD) + 1) / ((num) * UNITS_PER_WORD))
+
#define CLASS_MAX_NREGS(CLASS, MODE) \
- ((((MODE) == DFmode) || ((MODE) == SFmode)) ? 2 \
- : ((MODE) == VOIDmode)? ((CLASS) == FP_REGS ? 2 : 1) \
- : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
+ (((CLASS) == FP_REGS && TARGET_FLOAT64) \
+ ? CLASS_UNITS (MODE, 2) \
+ : (((CLASS) == FP_REGS) \
+ ? (2*CLASS_UNITS (MODE, 1)) \
+ : CLASS_UNITS (MODE, 1)))
/* If defined, this is a C expression whose value should be
nonzero if the insn INSN has the effect of mysteriously