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:
“Feminism is an entire world view or gestalt, not just a laundry list of womens issues.”
—Charlotte Bunch (b. 1944)
“Hey, you dress up our town very nicely. You dont look out the Chamber of Commerce is going to list you in their publicity with the local attractions.”
—Robert M. Fresco, and Jack Arnold. Dr. Matt Hastings (John Agar)
“I keep having the same experience and keep resisting it every time. I do not want to believe it although it is palpable: the great majority of people lacks an intellectual conscience. Indeed, it has often seemed to me as if anyone calling for an intellectual conscience were as lonely in the most densely populated cities as if he were in a desert.”
—Friedrich Nietzsche (18441900)
“Art, it seems to me, should simplify. That, indeed, is very nearly the whole of the higher artistic process; finding what conventions of form and what detail one can do without and yet preserve the spirit of the wholeso that all that one has suppressed and cut away is there to the readers consciousness as much as if it were in type on the page.”
—Willa Cather (18731947)