> 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.

That's correct, probes can come with a 'sub' instruction just before.

> s/aarch64_output_probe_stack-range/aarch64_output_probe_stack_range

Thanks, will fix.

-- 
Eric Botcazou

Reply via email to