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:
“Modern tourist guides have helped raised tourist expectations. And they have provided the nativesfrom Kaiser Wilhelm down to the villagers of Chichacestenangowith a detailed and itemized list of what is expected of them and when. These are the up-to- date scripts for actors on the tourists stage.”
—Daniel J. Boorstin (b. 1914)
“I am opposed to writing about the private lives of living authors and psychoanalyzing them while they are alive. Criticism is getting all mixed up with a combination of the Junior F.B.I.- men, discards from Freud and Jung and a sort of Columnist peep- hole and missing laundry list school.... Every young English professor sees gold in them dirty sheets now. Imagine what they can do with the soiled sheets of four legal beds by the same writer and you can see why their tongues are slavering.”
—Ernest Hemingway (18991961)
“I need not say what match I would touch, what system endeavor to blow up; but as I love my life, I would side with the light, and let the dark earth roll from under me, calling my mother and my brother to follow.”
—Henry David Thoreau (18171862)
“It is not human nature we should accuse but the despicable conventions that pervert it.”
—Denis Diderot (17131784)