X86 / X86_64 calling conventions https://en.wikipedia.org/wiki/X86_calling_conventions Who cleans the stack from function arguments? - Caller cleanup: caller pushes args, jumps to callee, then restores the stack when over. Notable: cdecl, de facto standard on linux (gcc) - Callee cleanup: the callee resets the argument adding to the stack pointer. Conventions may differ on: - Order of parameters to push to stack (Left-to-Right or RtL) - 'thiscall': how should pass the `this` pointer (common in C++, for non-static methods) - First few parameters might be passed over registers (e.g. microsoft fastcall), or SIMD registers (e.g. vectorcall). X86_64: more registers, larger. - Both Microsoft and Unixes: use more registers for arguments. - Small structs might fit registers.