Op 2019-07-02 om 19:41 schreef Ryan Joseph:
On Jul 2, 2019, at 10:32 AM, Michael Van Canneyt <mich...@freepascal.org> wrote:

It overwrites the first. There is no such thing as '2 VMT tables'.
That’s what I thought. How costly is this? Not sure what it’s doing under the 
hood but I’d like to know more.

You'd expect a mov of a constant to a memory location, but it is a bit more involved, and it doesn't look very optimal. Maybe because it is compiler generated, the optimizer doesn't run over it? (this is -O4 code)


P$PROGRAM$_$TA_$__$$_CREATE$$LONGBOOL:
# [13] begin
    pushl    %ebp
    movl    %esp,%ebp
    leal -8(%esp),%esp                                           // creates stackspace
# Var $vmt located at ebp-4, size=OS_32
# Var $self located at ebp-8, size=OS_32
    movl    %eax,-8(%ebp)
    movl    %edx,-4(%ebp)
    leal    -4(%ebp),%edx                                     // self,
    movl    -8(%ebp),%eax
    movl    $0,%ecx
    call    fpc_help_constructor
    movl    %eax,-8(%ebp)                                // save result on stack.
    testl    %eax,%eax
.Lj26:
.Lj15:
# [14] end;
    movl    -8(%ebp),%eax                               // and reload that result. All instructions after call are no effective purpose.
    leave
    ret


    movl    $VMT_$P$PROGRAM_$$_TA,%edx
    movl    $U_$P$PROGRAM_$$_OBJ,%eax
    call    P$PROGRAM$_$TA_$__$$_CREATE$$LONGBOOL // tried to inline ta.create, not accepted.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to