[Lazarus] Extending TRect breaks Lazarus

Sven Barth pascaldragon at googlemail.com
Tue Nov 10 14:49:37 CET 2015


Am 10.11.2015 14:37 schrieb "Sven Barth" <pascaldragon at googlemail.com>:
>
> Am 10.11.2015 12:27 schrieb "Jürgen Hestermann" <juergen.hestermann at gmx.de
>:
> >
> > Am 2015-11-10 um 11:32 schrieb Sven Barth:
> >>
> >> The user doesn't need to know the detail that the value is kept in a
temporary register, because that statement by itself is utterly useless for
the user, as on load/store architectures like ARM you /always/ have values
in registers if they are worked with and the compiler will happily spill
around the contents if necessary.
> >
> >
> > Does that mean, that local variables and with statements are treated
completely identically?
> > Are both held in registers with the same mechanism and will there never
be an (speed) adavantage of one of them?
> > If there is only the chance that it may speed up the code (even when
only on certain platforms) then I would like to know it.
>
> It always depends on the specific code (its complexity) and the specific
compiler settings (optimizations) and maybe also the target architecture
(because of register pressure and such). There is nothing general I can say
/except/ that the with expression will be evaluated only once. Thus
depending on the circumstances a local variable and the usage of with might
behave the same. In simple cases the with /might/ be faster because it
won't result in the expression result being stored on the stack, but that's
by no means a given.

So... I quickly rechecked the code and can now make a more fundated
statement. In case of a more complex expression (e.g. not a field that's a
class or something like that) the expression will be stored in a temporary
/variable/ not a register. Thus the generated code should be the same as
for a local variable. For non complex expressions the value is used
directly (e.g. as if the with didn't happen), though further optimizations
(e.g. the regvars optimization) might improve that.

Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20151110/6fce5635/attachment-0003.html>


More information about the Lazarus mailing list