diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2003-01-28 12:45:12 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2003-01-28 12:45:12 +0000 |
commit | 3620944c5081462e6606283d2b9992f9251ca4d1 (patch) | |
tree | bc291c552c281dfb0144fc1e8d7309894a20c7f1 /gcc | |
parent | 95fcd0ab306d65e0334dd148f774694f2867b818 (diff) | |
download | gcc-3620944c5081462e6606283d2b9992f9251ca4d1.zip gcc-3620944c5081462e6606283d2b9992f9251ca4d1.tar.gz gcc-3620944c5081462e6606283d2b9992f9251ca4d1.tar.bz2 |
sh.h (CLASS_MAX_NREGS): If TARGET_SHMEDIA...
* 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.
From-SVN: r61966
Diffstat (limited to 'gcc')
-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 48b1e2a..2fcc66f 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 7213933..e5d0677 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. */ |