diff options
author | Nick Clifton <nickc@redhat.com> | 2011-01-31 11:38:43 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2011-01-31 11:38:43 +0000 |
commit | d7862be3faeac281495f58baab92408362275514 (patch) | |
tree | e3d8f6bddf71a7a8f01a7ca3c52e63d46bc63563 /gcc/config | |
parent | 171bbfd2ef5e0bc622476cb1e993a6106670dd83 (diff) | |
download | gcc-d7862be3faeac281495f58baab92408362275514.zip gcc-d7862be3faeac281495f58baab92408362275514.tar.gz gcc-d7862be3faeac281495f58baab92408362275514.tar.bz2 |
rx.c (rx_get_stack_layout): Only save call clobbered registers inside interrupt handlers if...
* config/rx/rx.c (rx_get_stack_layout): Only save call clobbered
registers inside interrupt handlers if the handler is not a leaf
function.
From-SVN: r169434
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/rx/rx.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c index 8fa48a3..8199106 100644 --- a/gcc/config/rx/rx.c +++ b/gcc/config/rx/rx.c @@ -1137,10 +1137,12 @@ 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) - /* 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))) + /* Always save all call clobbered registers inside non-leaf + interrupt handlers, even if they are not live - they may + be used in (non-interrupt aware) routines called from this one. */ + || (call_used_regs[reg] + && is_interrupt_func (NULL_TREE) + && ! current_function_is_leaf)) && (! call_used_regs[reg] /* Even call clobbered registered must be pushed inside interrupt handlers. */ |