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.