[fpc-pascal] why fpc do not use a known return function value

misu kun misu.dev at gmail.com
Mon Feb 2 13:56:44 CET 2015


Hi
in this program test function has a known return value , and should be
calculated in compile time , but fpc make it in real time !!!
---------------------
program test;
var c : int32;
function test( p: int32): int32; inline;
var i : int32;
begin
  i := p;
  test := i+2+c+2+c+2+c;
end;
begin
  c:= test(128);
end.

---------------------
fpc (3.1.1 i386 ) generate this asm
---------------------
_main:
        call    FPC_INITIALIZEUNITS
        movl    $128,%eax
        movl    U_$P$TEST_$$_C,%eax
        addl    $130,%eax
        addl    $2,%eax
        addl    U_$P$TEST_$$_C,%eax
        addl    $2,%eax
        addl    U_$P$TEST_$$_C,%eax
        movl    %eax,U_$P$TEST_$$_C
        call    FPC_DO_EXIT
        ret
----------------------

while the same program in c compiled with old version of gcc generate this asm
which is optimal
------------------------
_main:
        pushl   %ebp
        movl    %esp, %ebp
        andl    $-16, %esp
        call    ___main
        movl    _c, %eax
        leal    134(%eax,%eax,2), %eax
        movl    %eax, _c
        leave
        ret
-----------------------



More information about the fpc-pascal mailing list