[fpc-devel] Data alignment feature

J. Gareth Moreton gareth at moreton-family.com
Fri Jan 26 21:59:48 CET 2018


Sorry, something badly worded there.   However, normally the stack is then aligned to a 16-byte boundary, 
BEFORE any variables are put on the stack, because a stack frame is set up which includes pushing RBP to the 
stack, hence aligning it.


On Fri 26/01/18 20:57 , "J. Gareth Moreton" gareth at moreton-family.com sent:
> Florian has implemented a fix recently that allows for better memory
> alignment using $codealign - true 
> though, I do think we need something to guarantee aligned memory from a
> function akin to GetMem, since one 
> way or another, there is a performance penalty in using dynamic arrays over
> raw pointers (although it's not 
> too bad).
> 
> 
> 
> Regarding the stack, when you first enter a function under x86-64, it is
> guaranteed to be 8 bytes away from 
> a 16-byte boundary, because the stack is first aligned to a 16-byte
> boundary (Windows also allocates 32 
> bytes of shadow space, a multiple of 16), then the return address is pushed
> to the stack when you first call 
> the function.  However, normally the stack is then aligned to a 16-byte
> boundary, for any variables are put 
> on the stack, because a stack frame is set up which includes pushing RBP to
> the stack.
> 
> 
> For Florian's fix though, any local variables are given the correct
> alignment on the stack, even if the 
> stack is unaligned beforehand.
> 
> 
> 
> Gareth aka. Kit
> 
> 
> 
> 
> 
> On Fri 26/01/18 15:41 , "Adriaan van Os" fpc at microbiz
> z.nl sent:
> > J. Gareth Moreton wrote:
> 
> > 
> 
> > > Oh right.  I see that you've opted to stick
> with
> > the $codealign compiler directive.  True, no new
> feature 
> > > should be required, and TM128 shouldn't
> need to
> > be redeclared by a third-party programmer.
> 
> > > 
> 
> > 
> 
> > > In this case, I think this bug/feature
> report
> > can be closed now: https://bugs.freepascal.org/view.php?
> > > id=32780 - unless you want the 'align'
> suffix.
> > 
> 
> > 
> 
> > 
> 
> > I think two questions need to be answered, as
> there is more than just
> > global variables
> 
> > 
> 
> > 
> 
> > 1. What is the status of alignment of the stack
> ?
> > 
> 
> > 2. I do think we need an alignment option in the
> FPC memory manager. Or at
> > least a runtime-function 
> 
> > that gets aligned memory, like 
> 
> > 
> 
> >  > memalign.html>
> 
> > 
> 
> > 
> 
> > Regards,
> 
> > 
> 
> > 
> 
> > 
> 
> > Adriaan van Os
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> 
> 
> _______________________________________________
> 
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> 
> 
> 
> 




More information about the fpc-devel mailing list