h8300.c (h8300_hard_regno_scratch_ok): New.
authorDJ Delorie <dj@redhat.com>
Mon, 21 Jul 2008 17:41:13 +0000 (13:41 -0400)
committerDJ Delorie <dj@gcc.gnu.org>
Mon, 21 Jul 2008 17:41:13 +0000 (13:41 -0400)
* config/h8300/h8300.c (h8300_hard_regno_scratch_ok): New.
(TARGET_HARD_REGNO_SCRATCH_OK): Define.

From-SVN: r138038

gcc/ChangeLog
gcc/config/h8300/h8300.c

index 4838ebe83be6c7d94b2168c91af6f6f25ac06553..951d26375d1a7e4aa30181f5a12839b1ce97aa4d 100644 (file)
@@ -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
index f90bd414735c91d5b46c9add79c0eff7fe7cfbfb..86790699f137cf8ebab058bef406403b5034bb9a 100644 (file)
@@ -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