From: Richard Sandiford Date: Tue, 28 Jan 2003 12:45:12 +0000 (+0000) Subject: sh.h (CLASS_MAX_NREGS): If TARGET_SHMEDIA... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3620944c5081462e6606283d2b9992f9251ca4d1;p=gcc.git 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 --- 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 + + * 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 * 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. */