[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