[fpc-pascal] Constant parameters and double types

Luiz Americo Pereira Camara pascalive at bol.com.br
Thu Apr 10 04:10:29 CEST 2008


Luiz Americo Pereira Camara wrote:
> I'm evaluating the effect of passing function parameters by value or =

> by reference.
>
> Like stated in the documentation, passing as reference (const) or by =

> value types with size equal to pointer size like Integer has no =

> difference in the code output (they are passed by value).
>
> Also as expected i noticed a difference in the generated assembler for =

> types TRect (16bytes) or TPoint (8 bytes).
>
> But for double (8 bytes) the generated assembler are equal for both =

> types of parameters. Is this intentional? For double types, there's no =

> difference in using const modifier?
>
> I'm using a 32bit cpu.
>

I attached the source code of a small app and the asm output of the =

functions.

It seems that for double fpc pass by reference if the parameter is not =

assigned regardless of const modifier. Can someone confirm this?
-------------- next part --------------
.section .text.n_p$asmconstparameter_byvalue$double
	.balign 16,0x90
.globl	P$ASMCONSTPARAMETER_BYVALUE$DOUBLE
P$ASMCONSTPARAMETER_BYVALUE$DOUBLE:
# Temps allocated between ebp-8 and ebp-8
# [17] begin
	pushl	%ebp
	movl	%esp,%ebp
	subl	$8,%esp
# Var V located at ebp+8
# Var i located at ebp-8
# [18] i :=3D V;
	movl	8(%ebp),%eax
	movl	%eax,-8(%ebp)
	movl	12(%ebp),%eax
	movl	%eax,-4(%ebp)
# [19] DoIt(i);
	subl	$8,%esp
	movl	-8(%ebp),%eax
	movl	%eax,(%esp)
	movl	-4(%ebp),%eax
	movl	%eax,4(%esp)
	call	P$ASMCONSTPARAMETER_DOIT$DOUBLE
# [20] end;
	leave
	ret	$8

.section .text.n_p$asmconstparameter_byreference$double
	.balign 16,0x90
.globl	P$ASMCONSTPARAMETER_BYREFERENCE$DOUBLE
P$ASMCONSTPARAMETER_BYREFERENCE$DOUBLE:
# Temps allocated between ebp-8 and ebp-8
# [25] begin
	pushl	%ebp
	movl	%esp,%ebp
	subl	$8,%esp
# Var V located at ebp+8
# Var i located at ebp-8
# [26] i :=3D V;
	movl	8(%ebp),%eax
	movl	%eax,-8(%ebp)
	movl	12(%ebp),%eax
	movl	%eax,-4(%ebp)
# [27] DoIt(i);
	subl	$8,%esp
	movl	-8(%ebp),%eax
	movl	%eax,(%esp)
	movl	-4(%ebp),%eax
	movl	%eax,4(%esp)
	call	P$ASMCONSTPARAMETER_DOIT$DOUBLE
# [28] end;
	leave
	ret	$8
-------------- next part --------------
A non-text attachment was scrubbed...
Name: asmConstParameter.pas
Type: text/x-pascal
Size: 377 bytes
Desc: not available
Url : http://lists.freepascal.org/lists/fpc-pascal/attachments/20080409/a60=
8aa56/asmConstParameter.pas


More information about the fpc-pascal mailing list