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,
|
||
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:
“Every morning I woke in dread, waiting for the day nurse to go on her rounds and announce from the list of names in her hand whether or not I was for shock treatment, the new and fashionable means of quieting people and of making them realize that orders are to be obeyed and floors are to be polished without anyone protesting and faces are to be made to be fixed into smiles and weeping is a crime.”
—Janet Frame (b. 1924)
“A mans interest in a single bluebird is worth more than a complete but dry list of the fauna and flora of a town.”
—Henry David Thoreau (18171862)
“[T]he most artful method [of courtship] would be this, to tell her that what she doth not possess is useless and contemptible, that weakness and imperfection is the perfection of a woman, that I am stark mad in love with ignorance; and thus shall I allure her by calling her [a] fool.”
—Sarah Fielding (17101768)
“Languages exist by arbitrary institutions and conventions among peoples; words, as the dialecticians tell us, do not signify naturally, but at our pleasure.”
—François Rabelais (14941553)