[fpc-pascal]Default calling convention
Marcel Martin
mm10 at ellipsa.net
Fri Jul 2 17:34:55 CEST 2004
Thomas Schatzl a écrit :
>
> Hello,
>
> >>>>I noticed that, with FPC 1.9.4, the (default) calling convention
> >>>>"register" depends on the fact that a routine is or is not embedded
> >>>>in an other routine.
> >>>>
> >>>>With "proc(A,B,C: Longint);", if "proc" is not embedded then
> >>>>eax = A, edx = B and ecx = C but if "proc" is embedded then edx = A,
> >>>>ecx = B and C is on the stack.
> >>>>
> >>>>Is this convention definitive or temporary? I am not sure it is
> >>>>definitive since it makes the code of assembler routines dependent
> >>>>on their status: embedded or not.
>
> This is exactly the same as Delphi (7) behaves.
I don't know, I have Delphi 5.01.
> >> procedure nx_fill(P: PLongword; Count: Longint; Value: Longword);
> >> assembler;
> >> asm
> >> pushl %edi
> >> movl %eax,%edi // edi <- P
> >> movl %ecx,%eax // eax <- Value
> >> movl %edx,%ecx // ecx <- Count
> >> rep
> >> stosl
> >> popl %edi
> >> end;
>
> In this case
>
> procedure nx_fill(P: PLongword; Count: Longint; Value: Longword);
> assembler;
> asm
> pushl %edi
> movl P,%edi // edi <- P
> movl Value,%eax // eax <- Value
> movl Count,%ecx // ecx <- Count
> rep
> stosl
> popl %edi
> end;
>
> works both as embedded and non-embedded assembler procedure because the
> order of assignments is ok in both cases.
Yes, but this way a program becomes a mineland. You write this, a few
weeks later, for some reason, you change the line order, and you waste
time to find why, suddenly, your program crashes (and yet, assuming you
immediately activate the bug).
--
mm
http://www.ellipsa.net/
More information about the fpc-pascal
mailing list