[fpc-devel] Thoughts: Make FillChar etc. an intrinsic for specialised performance potential

Stefan Glienke sglienke at dsharp.org
Tue Apr 19 15:26:46 CEST 2022


I would rather give a hint to change the code - because only for unmanaged types the semantic of FillChar is equal to default().

As for performance - I just ran some benchmarks comparing the way FPC does it and how Delphi does it. xor a register and mov that into place (Delphi way) is faster in all cases I tested. Also once the record is large enough FPC uses rep movs, Delphi does rep stos. rep stos has faster timings that rep movs so I cannot see how it could be faster given the initial overhead to produce the empty temp.

> On 19/04/2022 14:49 J. Gareth Moreton via fpc-devel <fpc-devel at lists.freepascal.org> wrote:
> 
>  
> Interesting - I wasn't aware of this intrinsic!  I'll make a note of 
> that one.
> 
> It might be useful to transform FillChar calls to the Default intrinsic 
> at the node level.
> 
> Gareth aka. Kit
> 
> On 19/04/2022 12:43, Stefan Glienke via fpc-devel wrote:
> > You are the expert but I am not sure how that can be the case given you only need to zero a register and blast that into the record location opposed to twice as many mov operations being generated that I have seen with the record that Gareth originally posted.
> >
> >> On 19/04/2022 13:37 Sven Barth via fpc-devel <fpc-devel at lists.freepascal.org> wrote:
> >>
> >>
> >> Stefan Glienke via fpc-devel <fpc-devel at lists.freepascal.org> schrieb am Di., 19. Apr. 2022, 12:38:
> >>> If you want to zero small records more efficiently it might be better using Default(t) for that and looking at optimizing the code the compiler generates for that as it seems it produces an empty temp variable which it assigns instead of simply zeroing the record variable where default() is being assigned to.
> >> This was an explicit design choice I made, because it pays of as soon as a second such assignment for the same type is made.
> >>
> >> Regards,
> >> Sven
> >> _______________________________________________
> >> fpc-devel maillist - fpc-devel at lists.freepascal.org
> >> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> > _______________________________________________
> > fpc-devel maillist  -  fpc-devel at 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 at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


More information about the fpc-devel mailing list