[fpc-pascal]Default calling convention

Thomas Schatzl tom_at_work at gmx.at
Fri Jul 2 19:31:30 CEST 2004


>>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).

:( That's true.

I usually add a 'pascal' procedure modifier to most (if not all) 
assembler routines exactly because of that. This forces parameter 
passing on the stack.
This is a little slower, but if your hand-coded assembler proc is only 
faster if the parameters are passed through registers, it might be a 
good idea to use Pascal right away...


More information about the fpc-pascal mailing list