X86 Calling Conventions - List of X86 Calling Conventions

List of X86 Calling Conventions

This is a list of x86 calling conventions. These are conventions primarily intended for C/C++ compilers (especially the 64-bit part below), and thus largely special cases. Other languages may use other formats and conventions in their implementations.

Architecture Calling convention name Operating system, compiler Parameters in registers Parameter order on stack Stack cleanup by Notes
8086 cdecl RTL (C) Caller
Pascal LTR (Pascal) Callee
fastcall Microsoft (non-member) AX, DX, BX LTR (Pascal) Callee Return pointer in BX.
fastcall Microsoft (member function) AX, DX LTR (Pascal) Callee “this” on stack low address. Return pointer in AX.
fastcall Borland compiler AX, DX, BX LTR (Pascal) Callee “this” on stack low address. Return pointer on stack high address.
Watcom compiler AX, DX, BX, CX RTL (C) Callee Return pointer in SI.
IA-32 cdecl GCC RTL (C) Caller When returning struct/class, the calling code allocates space and passes a pointer to this space via a hidden parameter on the stack. The called function writes the return value to this address.
cdecl Microsoft RTL (C) Caller When returning struct/class,
  • POD return values 32 bits or smaller are in the EAX register
  • POD return values 33-64 bits in size are returned via the EAX:EDX registers.
  • Non-POD return values or values larger than 64-bits, the calling code will allocate space and passes a pointer to this space via a hidden parameter on the stack. The called function writes the return value to this address.
stdcall RTL (C) Callee
GCC RTL (C) Hybrid Stack aligned on 16 bytes boundary.
fastcall Microsoft ECX, EDX RTL (C) Callee Return pointer on stack if not member function.
fastcall GCC ECX, EDX RTL (C) Callee
fastcall Borland/Embarcadero compiler EAX, EDX, ECX LTR (Pascal) Callee
thiscall Microsoft ECX RTL (C) Callee Default for member functions.
Watcom compiler EAX, EDX, EBX, ECX RTL (C) Callee Return pointer in ESI.
x86-64 Microsoft x64 calling convention Windows (Microsoft Visual C++, Intel C++ Compiler, Embarcadero compiler), UEFI RCX/XMM0, RDX/XMM1, R8/XMM2, R9/XMM3 RTL (C) Caller Stack aligned on 16 bytes. 32 bytes shadow space on stack. The specified 8 registers can only be used for parameters 1 through 4.
System V AMD64 ABI GNU/Linux, BSD, Mac OS X (GCC, Intel C++ Compiler) RDI, RSI, RDX, RCX, R8, R9, XMM0–7 RTL (C) Caller Stack aligned on 16 bytes boundary. Red zone below stack.

Read more about this topic:  X86 Calling Conventions

Famous quotes containing the words list of, list, calling and/or conventions:

    My list of things I never pictured myself saying when I pictured myself as a parent has grown over the years.
    Polly Berrien Berends (20th century)

    Feminism is an entire world view or gestalt, not just a laundry list of women’s issues.
    Charlotte Bunch (b. 1944)

    At length, having come up fifty rods off, he uttered one of those prolonged howls, as if calling on the god of loons to aid him, and immediately there came a wind from the east and rippled the surface, and filled the whole air with misty rain, and I was impressed as if it were the prayer of the loon answered, and his god was angry with me; and so I left him disappearing far away on the tumultuous surface.
    Henry David Thoreau (1817–1862)

    It is not human nature we should accuse but the despicable conventions that pervert it.
    Denis Diderot (1713–1784)