<div dir="ltr">



















<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif">Thank you for all responses!<span></span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif"><span> </span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif">Read zone is in fact a very interesting solution.<span></span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif">But on architectures which don’t support red zones and in
case leaf function eventually modifies stack pointer, why not modify it always according
to alignment?<span></span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif">If for example SP is aligned to 8 bytes and the leaf function wants
to store on stack just one ‘char’ (1-byte), what is the difference between
decreasing SP by 1 instead of 8?<span></span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif">In such case we know that the stack will not grow-down any
more (except interrupt/exception handlers), so in fact we are saving just
7-bytes, which eventually will not be used.<span></span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif">Is it really worth not aligning the stack pointer just for such case? … additionally having to manage with unaligned stack pointer in interrupts
handlers…<span></span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif"><span> </span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif">Or maybe there are other scenarios where unaligned pointers
might be used and brings benefits?<span></span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif"><span> </span></p>

<p class="MsoNormal" style="margin:0in 0in 0.0001pt;font-size:11pt;font-family:"Calibri",sans-serif">Przemek<span></span></p>





</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 18, 2020 at 12:47 AM Joerg Sonnenberger via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, Sep 17, 2020 at 11:17:03AM -0400, David Jones via llvm-dev wrote:<br>
> SPARC is a good example. If an interrupt occurs, the OS must flush all<br>
> register windows out to the user stack.  This requires that the stack<br>
> pointer be aligned.  Since you have no control over when an interrupt can<br>
> occur. you must maintain alignment at all times.<br>
<br>
The kernel will realign the stack pointer as appropiate for signal<br>
handlers, so that argument doesn't really work. Interrupt and exception<br>
handlers normally have their own stacks, so the problem doesn't apply to<br>
them.<br>
<br>
Joerg<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>