[fpc-devel] Generated code of constant parameters of double type

Florian Klaempfl florian at freepascal.org
Sun Nov 16 20:39:58 CET 2008


Luiz Americo Pereira Camara schrieb:
> Florian Klaempfl escreveu:
>> Luiz Americo Pereira Camara schrieb:
>>> Florian Klaempfl escreveu:
>>>> Luiz Americo Pereira Camara schrieb:
>>>>> Florian Klaempfl escreveu:
>>>>>> Luiz Americo Pereira Camara schrieb:
>>>>>>> My point was that this could be a missing optimization 
>>>>>>> opportunity: pass by reference a 8 bytes parameter when the 
>>>>>>> pointer size is 4. 
>>>>>>
>>>>>> Don't forget that this makes an extra memory access.
>>>>>
>>>>> I will do my question in a simpler way:
>>>>>
>>>>> Using constant parameters (add const keyword in front of an 
>>>>> argument) is beneficial for record types with size > pointer size 
>>>>> and for string types but not for integer and pointer types.
>>>>
>>>> No, this is not necessarily true. The extra indirect can be also 
>>>> slower.
>>>
>>> For string types it will avoid incrementing and decrementing the ref 
>>> count. See the test i did at 
>>> http://lazarusroad.blogspot.com/2008/11/effect-of-using-constant-parameter-for.html 
>>> and the code diff at http://www.geocities.com/camara_luiz/coddiff.htm
>>>
>>> For record (TPoint) the constant version generate less code. See the 
>>> attached diff.
>>
>> Please check also the code in the callee ;) 
> 
> I already checked: is equal.

No, just look at the actual assignment:
i:=v;
By const/reference it generates 5 instructions, by value only 4. The 
rest is entry code. If you've only one access, passing by reference 
might have an advantage, the more accesses you have, the better direct 
passing is. Just benchmark a loop ;)



More information about the fpc-devel mailing list