[ARM] Fix PR middle-end/65958
Yao Qi
qiyaoltc@gmail.com
Wed Oct 7 10:42:00 GMT 2015
Hi Eric,
Thanks for the examples. I am able to map these instructions in your
examples back to RTX in your patch.
On 07/10/15 10:09, Eric Botcazou wrote:
> Yes, it will generate either individual probes or a probing loop before the
> frame is established when -fstack-check is passed. For aarch64, a probe is a
> store based on x9 of the form:
>
> str xzr, [x9, #offset]
>
> with preceding instructions to compute x9 from sp, typically:
>
> sub x9, sp, #16384
>
If I read aarch64_emit_probe_stack_range correctly, these two
instructions are generated when (size <= PROBE_INTERVAL). If
size <= 4 * PROBE_INTERVAL, more instructions are generated,
sub x9, sp, #16384
str xzr, [x9]
sub x9, x9, #PROBE_INTERVAL
str xzr, [x9]
... /* At most two instances of these two insn. */
either
sub x9, x9, #PROBE_INTERVAL
str xzr, [x9, #offset]
or
str xzr, [x9, -16]
> A probing loop uses both x9 and x10:
>
> sub x9, sp, #12288
> sub x10, sp, #36864
> LPSRL0:
> sub x9, x9, 4096
> str xzr, [x9]
> cmp x9, x10
> b.ne LPSRL0
>
The probing loop is used when size > 4 * PROBE_INTERVAL
> with an optional last probe:
>
> str xzr, [x10,#-16]
and there can be an optional instruction before the probe,
sub x10, x10, #PROBE_INTERVAL
Let me know if my understanding above is wrong.
When I read the examples and your patch, I happen to see a
nit in ChangeLog entry,
> 2015-10-06 Tristan Gingold <gingold@adacore.com>
> Eric Botcazou <ebotcazou@adacore.com>
>
> PR middle-end/65958
> * config/aarch64/aarch64-protos.h (aarch64_output_probe_stack-range):
> Declare.
s/aarch64_output_probe_stack-range/aarch64_output_probe_stack_range
--
Yao (é½å°§)
More information about the Gcc-patches
mailing list