[fpc-pascal]Default calling convention

Florian Klaempfl Florian.Klaempfl at gmx.de
Sun Jul 4 09:38:27 CEST 2004


Marcel Martin wrote:

> Florian Klaempfl a écrit :
> 
>>Thomas Schatzl wrote:
>>
>>>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.
>>>
>>>Btw, there's already a method in the system unit which does the same
>>>thing as your routine: filldword()...
>>
>>... and with better instruction selection ;)
> 
> 
> 1) This little routine was sent to point out a problem. 
> 
> 2) Better than what? Where do you see an "instruction selection" 

Push instead of mov. mov is faster on modern machines because it causes 
less instruction dependencies.

> in my procedure. There is none. And there is none because this 
> is useless. 'nx_fill' is in a unit called 'nxkernel', this unit 
> contains all the low level routines for the library, and with these 
> routines, it is up to the calling procedures to check the validity 
> of the transmitted parameters. This is as simple as that.
> 





More information about the fpc-pascal mailing list