[fpc-devel] creating call nodes for managed operators

Hairy Pixels genericptr at gmail.com
Sat Jul 22 15:47:04 CEST 2023


Nice work, I have no answer for you though. :) 

What is the performance improvement here and why was it done the old way?

Another question I had about them is why they can't be inlined. Does anyone have the answer for that? Not being able to be inlined is the biggest performance problem I suspect, followed by the copy operator which gets called redundantly on assignment to temporary memory.

> On Jul 22, 2023, at 7:07 AM, Benito van der Zander via fpc-devel <fpc-devel at lists.freepascal.org> wrote:
> 
> Hallo,
> 
> 
> i made a patch for faster management operators: https://gitlab.com/benibela/fpc-source/-/commit/1aa0866112c97dd0c7ed7f3a4b1c7ab6420cb942
> 
> 
> 
> And it has been working fine on fixes3_2, but when I tried to apply it on main, I get an error message:
> 
> views.inc(4318,17) Error: Wrong number of parameters specified for call to "$copy" 
> video.inc(180,35) Error: Found declaration: operator copy(constref TEnhancedVideoCell;var TEnhancedVideoCell); Static;
> 
> I have been creating two paranodes for the call like that:
> 
>            if is_rtti_managed_type(left.resultdef) and is_record(left.resultdef)
>                and (mop_copy in trecordsymtable(left.resultdef.getsymtable(gs_record)).managementoperators) then
>              begin
>                hsym := tprocsym(left.resultdef.getsymtable(gs_record).Find('copy'));
>                hp := ccallparanode.create(left, ccallparanode.create(right, nil));
>                result := ccallnode.create(hp,hsym,hsym.owner,nil,[],nil);
> 
> should it be done differently?
> 
> 
>     
> Viele Grüße,
> Benito 
> 
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Regards,
Ryan Joseph



More information about the fpc-devel mailing list