[fpc-devel] Generated code of constant parameters of double type
Luiz Americo Pereira Camara
pascalive at bol.com.br
Sun Nov 16 19:52:06 CET 2008
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.
>
>>
>> Currently is not beneficial for double types and there's no way to
>> improve that. So when developing an interface that uses double types
>> does not matter using const or not. Now and in the future. Right?
>
> It might matter for the optimizer in other situations.
I am developing an component that heavily uses double types. So for read
only arguments is better to use constant parameters?
For the record: Int64 has the same behavior as double regarding this issue.
Luiz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20081116/1daffa26/attachment.htm>
More information about the fpc-devel
mailing list