diff options
author | Yvan Roux <yvan.roux@linaro.org> | 2017-06-23 10:53:39 +0200 |
---|---|---|
committer | Yvan Roux <yvan.roux@linaro.org> | 2017-07-03 11:02:34 +0000 |
commit | aa8bdbe4e813281379b85924a01fc6a3a6c14b5d (patch) | |
tree | c96905f0f09f0b631d4df87489802d91d35e050a | |
parent | f45ba6635aea2c83dd6dae74ba4a6700f58a2501 (diff) |
gcc/
Backport from trunk r249566.
2017-06-22 Jeff Law <law@redhat.com>
* config/aarch64/aarch64.c (aarch64_emit_probe_stack_range): Handle
frame sizes that do not satisfy aarch64_uimm12_shift.
gcc/testsuite/
Backport from trunk r249566.
2017-06-22 Jeff Law <law@redhat.com>
* gcc.c-torture/compile/stack-check-1.c: New test.
Change-Id: I79d213022ffbb6dde640e7ed82bec64f06a6cbe8
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/stack-check-1.c | 2 |
2 files changed, 15 insertions, 5 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index d154e68c8aa..a9291df033e 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -2683,11 +2683,19 @@ aarch64_emit_probe_stack_range (HOST_WIDE_INT first, HOST_WIDE_INT size) plus_constant (Pmode, stack_pointer_rtx, -first)); /* LAST_ADDR = SP + FIRST + ROUNDED_SIZE. */ - emit_set_insn (reg2, - plus_constant (Pmode, stack_pointer_rtx, - -(first + rounded_size))); - - + HOST_WIDE_INT adjustment = - (first + rounded_size); + if (! aarch64_uimm12_shift (adjustment)) + { + aarch64_internal_mov_immediate (reg2, GEN_INT (adjustment), + true, Pmode); + emit_set_insn (reg2, gen_rtx_PLUS (Pmode, stack_pointer_rtx, reg2)); + } + else + { + emit_set_insn (reg2, + plus_constant (Pmode, stack_pointer_rtx, adjustment)); + } + /* Step 3: the loop do diff --git a/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c b/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c new file mode 100644 index 00000000000..4058eb58709 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c @@ -0,0 +1,2 @@ +/* { dg-additional-options "-fstack-check" } */ +#include "20031023-1.c" |