From: Nick Clifton Date: Wed, 1 Sep 2010 08:33:35 +0000 (+0000) Subject: rx.c (rx_expand_prologue): Do not adjust frame size when pushing accumulator register. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e14ca1cef69e39dd2a2ffffffdab47a51b803579;p=gcc.git rx.c (rx_expand_prologue): Do not adjust frame size when pushing accumulator register. * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c260f1ce67..3cb6f27bcd0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-09-01 Nick Clifton + + * 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 * config.gcc (i[34567]86-*-freebsd*, x86_64-*-freebsd*): Add diff --git a/gcc/config/rx/rx-modes.def b/gcc/config/rx/rx-modes.def index 5936b672b6b..0c4c192a265 100644 --- a/gcc/config/rx/rx-modes.def +++ b/gcc/config/rx/rx-modes.def @@ -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. diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c index 86d8ad48892..a5be690340d 100644 --- a/gcc/config/rx/rx.c +++ b/gcc/config/rx/rx.c @@ -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. */