[fpc-devel] registers used in function call, any rule?

Martin fpc at mfriebe.de
Wed Apr 27 20:07:03 CEST 2011


On 27/04/2011 19:03, Jonas Maebe wrote:
> On 27 Apr 2011, at 19:51, Martin wrote:
>
>> Not sure were I got my original info from... , but at current lazarus-ide (debugger) assumes that (on 64 bit) arguments (to fpc_raiseexceptions) are passed in RDI, RSI, RDX.
>>
>> I thought some one had told me that this was some kind of standard and would always work? (I may be wrong...)
>>
>> Now I just been running some code in the debugger 64 bit, win XP.
>>
>> And the first arg was either in rax or rcx; see assembler below
>>
>> Any ideas how to know what register to expect?
> Win64 uses a different ABI than all other x86-64 platforms.
>

So what is the correct order then?

RCX, R8, RDX ?
RCX, RDX, R8 ?

00000001000B1F92 4889c1                   mov    %rax,%rcx
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
00000001000B1F95 4989e8                   mov    %rbp,%r8
00000001000B1F98 488d15f6ffffff           lea    -0xa(%rip),%rdx        
# 0x1000b1f95 <CLASSES_TSTREAM_$__READBUFFER$formal$LONGINT+69>
00000001000B1F9F e88ccaf5ff               callq  0x10000ea30 
<fpc_raiseexception>



More information about the fpc-devel mailing list