[fpc-devel] Pure function Wiki page
J. Gareth Moreton
gareth at moreton-family.com
Mon Jul 9 13:11:36 CEST 2018
I meant to say tan(Pi / 4) in that
example. Sorry. Trying to assign tan(Pi /
2) to something will probably cause an
error, or at the very least be an
interesting test case, because the result
is undefined.
Gareth aka. Kit
On Mon 09/07/18 12:00 , "J. Gareth
Moreton" gareth at moreton-family.com sent:
> Besides being able to assign the
function
>
> result to constants, the main benefit is
>
> that, for constant inputs, the result is
>
> deterministic and so the compiler can
>
> calculate this beforehand and replace a
>
> function call with an assignment. For
>
> example, if tan was a regular function,
x
>
> := tan(Pi / 2) might look like this in
>
> assembly:
>
>
>
> MOVAPD XMM0, Pi
>
> DIVSD XMM0, TwoConstant
>
> CALL tan ; Result is now in XMM0, which
is
>
> 1
>
>
>
> It won't be exactly that, but you get
the
>
> idea. If tan is defined as a pure
>
> function, then the result can be pre-
>
> calculated and the entire block changed
to
>
> a simple assignment:
>
>
>
> MOVAPD XMM0, OneConstant ; value of
tan(Pi
>
> / 2)
>
>
>
> It doesn't take a genius to know that
that
>
> is faster by several orders of
magnitude.
>
>
>
> More subtly, if it turns out that the
>
> function is never called with variable
>
> arguments, the entire function can be
>
> removed from the compiled binary,
reducing
>
> its size.
>
>
>
> Gareth aka. Kit
>
>
>
> On Mon 09/07/18 10:25 , Sven Barth via
>
> fpc-devel fpc-devel at lists.freepascal.org
> sent:
>
> > Ryan Joseph schrieb am Mo., 9. Juli
>
> 2018, 08:45:
>
> >
>
> > > On Jul 8, 2018, at 8:50 AM, J.
Gareth
>
> Moreton wrote:
>
> > >
>
> > > With some blessing from Florian on
the
>
> concept, I've set up a Wiki page
>
> > discussing the design proposals for
the
>
> support of pure functions, as well
>
> > as some explanation on what they
>
> actually are.
>
> > >
>
> >
>
> > What are the performance benefits? It
>
> sounds like this is a proposal for a
>
> > compiler optimization which we can
>
> explicitly opt in to, but what exactly
>
> > is the optimization?
>
> >
>
> > If nothing else I like the idea as a
way
>
> to enforce a function is not
>
> > accessing global state. Kind of like
>
> const for functions.
>
> >
>
> > It would allow you to declare
constants
>
> that use those functions with the
>
> > compiler evaluating them at compile
>
> time. Also the compiler might be able
>
> > to optimize such functions better
>
> especially if they're inlined. *shrugs*
>
> > Regards, Sven
>
>
__________________________________________
>
> _____
>
> > fpc-devel maillist - fpc-
>
> de
> vel at lists.freepascal.org
> > http://lists.freepascal.org/cgi-
> bin/mailman/listinfo/fpc-devel [1]
>
> >
>
> >
>
> >
>
> > Links:
>
> > ------
>
> > [1]
>
> >
http://secureweb.fast.net.uk/parse.php?
> redirect=http://lists.freepascal.org
> > /cgi-bin/mailman/listinfo/fpc-devel
>
> >
>
>
>
>
__________________________________________
_____
>
> 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