* config/rx/rx.c (rx_expand_prologue): Do not adjust frame size
authornickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Sep 2010 08:33:35 +0000 (08:33 +0000)
committernickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Sep 2010 08:33:35 +0000 (08:33 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163720 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 0c260f1..3cb6f27 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 5936b67..0c4c192 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 86d8ad4..a5be690 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.  */