rx.c (rx_expand_prologue): Do not adjust frame size when pushing accumulator register.
authorNick Clifton <nickc@redhat.com>
Wed, 1 Sep 2010 08:33:35 +0000 (08:33 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Wed, 1 Sep 2010 08:33:35 +0000 (08:33 +0000)
        * config/rx/rx.c (rx_expand_prologue): Do not adjust frame size
        when pushing accumulator register.
        (rx_get_stack_layout): Always save call clobbered registers inside
        interrupt handlers.
        * config/rx/rx-modes.def: Fix descriptive comment at start of file.

From-SVN: r163720

gcc/ChangeLog
gcc/config/rx/rx-modes.def
gcc/config/rx/rx.c

index 0c260f1ce673b70b1cb780e32949e8d3ef249c3c..3cb6f27bcd0a22169079b7efe77877591a6cc160 100644 (file)
@@ -1,3 +1,11 @@
+2010-09-01  Nick Clifton  <nickc@redhat.com>
+
+       * config/rx/rx.c (rx_expand_prologue): Do not adjust frame size
+       when pushing accumulator register.
+       (rx_get_stack_layout): Always save call clobbered registers inside
+       interrupt handlers.
+       * config/rx/rx-modes.def: Fix descriptive comment at start of file.
+
 2010-09-01  Uros Bizjak  <ubizjak@gmail.com>
 
        * config.gcc (i[34567]86-*-freebsd*, x86_64-*-freebsd*): Add
index 5936b672b6bc4471365f9ba8bc8d3f4b39ea64c2..0c4c192a265647da2e7f0b74c3e37597f38a1273 100644 (file)
@@ -1,9 +1,6 @@
-/* Definitions of target machine for GNU compiler, for ARM.
-   Copyright (C) 2002, 2004, 2007 Free Software Foundation, Inc.
-   Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl)
-   and Martin Simmons (@harleqn.co.uk).
-   More major hacks by Richard Earnshaw (rearnsha@arm.com)
-   Minor hacks by Nick Clifton (nickc@cygnus.com)
+/* Definitions of target specific machine modes for the RX.
+   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+   Contributed by Red Hat.
 
    This file is part of GCC.
 
index 86d8ad48892a25738202cff75ec5e55cd9a1dd7e..a5be690340d8eacfe352c78748a69b59d90a55ed 100644 (file)
@@ -1067,7 +1067,11 @@ rx_get_stack_layout (unsigned int * lowest,
 
   for (save_mask = high = low = 0, reg = 1; reg < CC_REGNUM; reg++)
     {
-      if (df_regs_ever_live_p (reg)
+      if ((df_regs_ever_live_p (reg)
+          /* Always save all call clobbered registers inside interrupt
+             handlers, even if they are not live - they may be used in
+             routines called from this one.  */
+          || (call_used_regs[reg] && is_interrupt_func (NULL_TREE)))
          && (! call_used_regs[reg]
              /* Even call clobbered registered must
                 be pushed inside interrupt handlers.  */
@@ -1307,8 +1311,6 @@ rx_expand_prologue (void)
          emit_insn (gen_stack_pushm (GEN_INT (2 * UNITS_PER_WORD),
                                      gen_rx_store_vector (acc_low, acc_high)));
        }
-
-      frame_size += 2 * UNITS_PER_WORD;
     }
 
   /* If needed, set up the frame pointer.  */