sh.h (REGISTER_NATURAL_MODE): Save part-clobbered registers in SImode.
authorAlexandre Oliva <aoliva@redhat.com>
Sat, 9 Feb 2002 03:58:50 +0000 (03:58 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Sat, 9 Feb 2002 03:58:50 +0000 (03:58 +0000)
* config/sh/sh.h (REGISTER_NATURAL_MODE): Save part-clobbered
registers in SImode.
(HARD_REGNO_CALL_PART_CLOBBERED) [TARGET_SHMEDIA32]: Set r18 as
part-clobbered.

From-SVN: r49632

gcc/ChangeLog
gcc/config/sh/sh.h

index 5c88767aa6dad5675e90086b9e2efb006afb3bc3..37381ddbcd329247886455fa96681cbfbd372829 100644 (file)
@@ -1,5 +1,10 @@
 2002-02-09  Alexandre Oliva  <aoliva@redhat.com>
 
+       * config/sh/sh.h (REGISTER_NATURAL_MODE): Save part-clobbered
+       registers in SImode.
+       (HARD_REGNO_CALL_PART_CLOBBERED) [TARGET_SHMEDIA32]: Set r18 as
+       part-clobbered.
+
        * config/sh/sh.c (expand_prologue): Fix mis-applied 2001-11-09's
        patch.
        
index c33f6c0b40aa6e2e9eb17690a07387477bccaccc..3f0cad291c2c25468d271aa5b4bcea70d7fde6ce 100644 (file)
@@ -720,7 +720,9 @@ extern char sh_additional_register_names[ADDREGNAMES_SIZE] \
 #define REGISTER_NATURAL_MODE(REGNO) \
   (FP_REGISTER_P (REGNO) ? SFmode \
    : XD_REGISTER_P (REGNO) ? DFmode \
-   : TARGET_SHMEDIA ? DImode : SImode)
+   : TARGET_SHMEDIA && ! HARD_REGNO_CALL_PART_CLOBBERED ((REGNO), DImode) \
+   ? DImode \
+   : SImode)
 
 #define FIRST_PSEUDO_REGISTER 153
 
@@ -811,8 +813,9 @@ extern char sh_additional_register_names[ADDREGNAMES_SIZE] \
 #define HARD_REGNO_CALL_PART_CLOBBERED(REGNO,MODE) \
   (TARGET_SHMEDIA32 \
    && GET_MODE_SIZE (MODE) > 4 \
-   && (REGNO) >= FIRST_GENERAL_REG + 10 \
-   && (REGNO) <= FIRST_GENERAL_REG + 14)
+   && (((REGNO) >= FIRST_GENERAL_REG + 10 \
+        && (REGNO) <= FIRST_GENERAL_REG + 14) \
+       || (REGNO) == PR_MEDIA_REG))
 
 /* Return number of consecutive hard regs needed starting at reg REGNO
    to hold something of mode MODE.