aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYvan Roux <yvan.roux@linaro.org>2017-06-23 10:53:39 +0200
committerYvan Roux <yvan.roux@linaro.org>2017-07-03 11:02:34 +0000
commitaa8bdbe4e813281379b85924a01fc6a3a6c14b5d (patch)
treec96905f0f09f0b631d4df87489802d91d35e050a
parentf45ba6635aea2c83dd6dae74ba4a6700f58a2501 (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.c18
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/stack-check-1.c2
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"