diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2002-02-09 03:58:50 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2002-02-09 03:58:50 +0000 |
commit | a138247b54d4ef96223a66366845b03a9729d51f (patch) | |
tree | 933e1d617f41e733bbff0de81fb12803f1243b3d | |
parent | 2b1fd83f6261143b75f815628aad7e69e1f4e94e (diff) | |
download | gcc-a138247b54d4ef96223a66366845b03a9729d51f.zip gcc-a138247b54d4ef96223a66366845b03a9729d51f.tar.gz gcc-a138247b54d4ef96223a66366845b03a9729d51f.tar.bz2 |
sh.h (REGISTER_NATURAL_MODE): Save part-clobbered registers in SImode.
* 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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/sh/sh.h | 9 |
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5c88767..37381dd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index c33f6c0..3f0cad2 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -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. |