aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2008-07-21 13:41:13 -0400
committerDJ Delorie <dj@gcc.gnu.org>2008-07-21 13:41:13 -0400
commit2e7628842865d7de2eeb170af79f0fc38c057d9c (patch)
tree19660cc29a261ba90312a4177c9d8c7c38e37f47
parenta03f1b22cb818671a82fad00121360eda6ce6e38 (diff)
downloadgcc-2e7628842865d7de2eeb170af79f0fc38c057d9c.zip
gcc-2e7628842865d7de2eeb170af79f0fc38c057d9c.tar.gz
gcc-2e7628842865d7de2eeb170af79f0fc38c057d9c.tar.bz2
h8300.c (h8300_hard_regno_scratch_ok): New.
* config/h8300/h8300.c (h8300_hard_regno_scratch_ok): New. (TARGET_HARD_REGNO_SCRATCH_OK): Define. From-SVN: r138038
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/h8300/h8300.c18
2 files changed, 23 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4838ebe..951d263 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2008-07-21 DJ Delorie <dj@redhat.com>
+
+ * config/h8300/h8300.c (h8300_hard_regno_scratch_ok): New.
+ (TARGET_HARD_REGNO_SCRATCH_OK): Define.
+
2008-07-21 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* config/spu/spu.md ("div<mode>3"): Convert into expander, move
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index f90bd41..8679069 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -111,6 +111,7 @@ static unsigned int h8300_bitfield_length (rtx, rtx);
static unsigned int h8300_binary_length (rtx, const h8300_length_table *);
static bool h8300_short_move_mem_p (rtx, enum rtx_code);
static unsigned int h8300_move_length (rtx *, const h8300_length_table *);
+static bool h8300_hard_regno_scratch_ok (unsigned int);
/* CPU_TYPE, says what cpu we're compiling for. */
int cpu_type;
@@ -5612,6 +5613,20 @@ h8300_hard_regno_rename_ok (unsigned int old_reg ATTRIBUTE_UNUSED,
return 1;
}
+/* Returns true if register REGNO is safe to be allocated as a scratch
+ register in the current function. */
+
+static bool
+h8300_hard_regno_scratch_ok (unsigned int regno)
+{
+ if (h8300_current_function_interrupt_function_p ()
+ && ! WORD_REG_USED (regno))
+ return false;
+
+ return true;
+}
+
+
/* Return nonzero if X is a legitimate constant. */
int
@@ -5745,6 +5760,9 @@ h8300_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
#undef TARGET_MACHINE_DEPENDENT_REORG
#define TARGET_MACHINE_DEPENDENT_REORG h8300_reorg
+#undef TARGET_HARD_REGNO_SCRATCH_OK
+#define TARGET_HARD_REGNO_SCRATCH_OK h8300_hard_regno_scratch_ok
+
#undef TARGET_DEFAULT_TARGET_FLAGS
#define TARGET_DEFAULT_TARGET_FLAGS TARGET_DEFAULT