Hi Jonas,

I've made a patch that hopefully should optimise the situation where the record type contains only one field, following the tips you gave me regarding the "has_single_field()" method.

https://bugs.freepascal.org/view.php?id=37343

I haven't been able to test it as rigorously as I would have liked.  I'm having some difficulty compiling projects under Lazarus with the trunk since it tries to recompile windows.ppu due to a checksum mismatch, and immediately fails upon not being able to find a file.  I might have some configuation problems, because when I try to compile the test program directly from the command line, it just hangs when I run it (even without the patch applied), and there's nothing in the code that should cause an infinite loop.  I can, however, analyse the disassembly and see that the optimisation has indeed been applied correctly.

Gareth aka. Kit

On 28/06/2020 14:18, Jonas Maebe wrote:
On 28/06/2020 14:18, J. Gareth Moreton wrote:
Thanks Jonas.  I'll see what I can put together.  A record with a single
field is a bit of a special case, but one I'll keep in mind.  More than
anything I'll have to study the disassembly to see what's happening, and
if things are faster with primitive types simply because they're
register variables (which are always faster than stack variables even on
L1) or due to something else.
This issue is not register versus memory, it's "register + a bunch of
masking and inserting" versus memory, plus the code size overhead (which
will probably not have any noticeable effects in a small benchmark).


Jonas
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to