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.