[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