diff options
author | jcmvbkbc <jcmvbkbc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2019-09-23 07:50:40 +0000 |
---|---|---|
committer | jcmvbkbc <jcmvbkbc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2019-09-23 07:50:40 +0000 |
commit | 0110ab63c006fe8f1a86142cd6e86d5534f8bc8e (patch) | |
tree | 48c5d47208d6a81b1b8f48267aa5b88cd75db7b9 | |
parent | 1e8bddfbb788a36385edf2995b4f1bcdf068bf83 (diff) |
xtensa: backport fix for PR target/90922
Stack pointer adjustment code in prologue missed a case of no
callee-saved registers and a stack frame size bigger than 128 bytes.
Handle that case.
This fixes the following gcc tests with call0 ABI:
gcc.c-torture/execute/stdarg-2.c
gcc.dg/torture/pr55882.c
gcc.dg/torture/pr57569.c
gcc/
2019-09-23 Max Filippov <jcmvbkbc@gmail.com>
Backport from mainline
2019-06-18 Max Filippov <jcmvbkbc@gmail.com>
* config/xtensa/xtensa.c (xtensa_expand_prologue): Add stack
pointer adjustment for the case of no callee-saved registers and
stack frame bigger than 128 bytes.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@276039 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.c | 3 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c8ed228bc3..8631f0a94e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2019-09-23 Max Filippov <jcmvbkbc@gmail.com> + + Backport from mainline + 2019-06-18 Max Filippov <jcmvbkbc@gmail.com> + + * config/xtensa/xtensa.c (xtensa_expand_prologue): Add stack + pointer adjustment for the case of no callee-saved registers and + stack frame bigger than 128 bytes. + 2019-09-20 John David Anglin <danglin@gcc.gnu.org> * config/pa/pa.c (pa_trampoline_init): Remove spurious extended diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index db561e8feb7..a39bac9af7d 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -2802,7 +2802,8 @@ xtensa_expand_prologue (void) gen_rtx_SET (mem, reg)); } } - if (total_size > 1024) + if (total_size > 1024 + || (!callee_save_size && total_size > 128)) { rtx tmp_reg = gen_rtx_REG (Pmode, A9_REG); emit_move_insn (tmp_reg, GEN_INT (total_size - |