Am 20.08.20 um 14:18 schrieb J. Gareth Moreton via fpc-devel:
Hi everyone.

During my evaluation of the assembly language produced by the AArch64 
implementation of the Free Pascal Compiler, I've noticed that it uses the stack 
an awful lot and, generally, not many of the 28 or so general-
purpose registers available for it.

So it uses memory instead? Can you give an example?


The main problem is that even though x9 to x15 are designed to be used for 
local variables (caller-saved), the compiler doesn't make use of them because 
it has to write them to the stack anyway whenever it calls
another subroutine, while x0-x7 and x19-x28 are not used because they're 
considered volatile and may not retain their values after a subroutine call.  
Nevertheless, leaf functions tend to perform a little better when
it comes to register use.

It's gotten me to thinking... for leaf functions (maybe even all functions if 
research shows it's plausible), after it has been assigned registers (and maybe 
gone through peephole optimisation), would it be feasible
to store a list of used registers with the associated object that the compiler 
has for said function?  That way, when it is called by another routine, the 
peephole optimizer and the register allocator can see which
registers are not used, so it is more likely to use a volatile register rather 
than the stack to save temporary values.  It is also potentially cross-platform.

No, we tried this decades ago and it broke horrible havoc.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to