[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