From 21cde6ec4fc9e4302410941e8c0a1c2d4af73fdd Mon Sep 17 00:00:00 2001 From: nickc Date: Wed, 1 Sep 2010 08:33:35 +0000 Subject: [PATCH] * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163720 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/config/rx/rx-modes.def | 9 +++------ gcc/config/rx/rx.c | 8 +++++--- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c260f1..3cb6f27 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 5936b67..0c4c192 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 86d8ad4..a5be690 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. */ -- 2.7.4