diff options
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/config/sh/sh.h | 8 |
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. */ |

