summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/sh/sh.h8
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 48b1e2af80d..2fcc66f83cc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-01-28 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/sh/sh.h (CLASS_MAX_NREGS): If TARGET_SHMEDIA, and the given
+ class contains a floating-point register, return the size of the
+ mode in half words.
+
Tue Jan 28 12:15:13 CET 2003 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_carry_flag_operator): New predicate.
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index 7213933ad36..e5d0677ed60 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -1382,9 +1382,13 @@ extern enum reg_class reg_class_from_letter[];
/* Return the maximum number of consecutive registers
needed to represent mode MODE in a register of class CLASS.
- On SH this is the size of MODE in words. */
+ If TARGET_SHMEDIA, we need two FP registers per word.
+ Otherwise we will need at most one register per word. */
#define CLASS_MAX_NREGS(CLASS, MODE) \
- ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+ (TARGET_SHMEDIA \
+ && TEST_HARD_REG_BIT (reg_class_contents[CLASS], FIRST_FP_REG) \
+ ? (GET_MODE_SIZE (MODE) + UNITS_PER_WORD/2 - 1) / (UNITS_PER_WORD/2) \
+ : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
/* If defined, gives a class of registers that cannot be used as the
operand of a SUBREG that changes the mode of the object illegally. */
OpenPOWER on IntegriCloud