[fpc-devel] Generated code of constant parameters of double type
Luiz Americo Pereira Camara
pascalive at bol.com.br
Sun Nov 16 20:59:03 CET 2008
Florian Klaempfl escreveu:
> 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 ;)
Thanks for pointing that. Seems that the only clear advantage of const
is in string types. For records it depends how is accessed/used inside
the function.
Luiz
More information about the fpc-devel
mailing list