aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2002-02-09 03:58:50 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2002-02-09 03:58:50 +0000
commita138247b54d4ef96223a66366845b03a9729d51f (patch)
tree933e1d617f41e733bbff0de81fb12803f1243b3d
parent2b1fd83f6261143b75f815628aad7e69e1f4e94e (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/sh/sh.h9
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.