x86_64 (SysV) calling convention
https://uclibc.org/docs/psABI-x86_64.pdf

not including vector and FP registers

                        register usage
-----------------------------------------------------------------------
register        Usage                           preserved across calls
-----------------------------------------------------------------------
rax             1th return value                No
                temp (scratch) reg
-----------------------------------------------------------------------
rbx             callee saved                    Yes
-----------------------------------------------------------------------
rdi             fn parameter 1                  No
-----------------------------------------------------------------------
rsi             fn parameter 2                  No
-----------------------------------------------------------------------
rdx             fn parameter 3                  No
-----------------------------------------------------------------------
rcx             fn parameter 4                  No
-----------------------------------------------------------------------
r8              fn parameter 5                  No
-----------------------------------------------------------------------
r9              fn parameter 6                  No
-----------------------------------------------------------------------
r10             function static chain ptr       No
                temp (scratch) reg
-----------------------------------------------------------------------
r11             temp (scratch) reg              No
-----------------------------------------------------------------------
r12~r14         callee saved                    Yes
-----------------------------------------------------------------------
r15             callee saved                    Yes
                optionally GOT base pointer
-----------------------------------------------------------------------
rsp             stack pointer                   Yes
-----------------------------------------------------------------------
rbp             callee saved
                optionally frame pointer        Yes
-----------------------------------------------------------------------


                parameter passing (integer class only)
-----------------------------------------------------------------------
the first 6 parameters (left to right) are passed though register
rdi, rsi, rdx, rcx, r8, r9

further paramters are pushed to stack (right-to-left order)
                                       ^^^^^^^^^^^^^
-----------------------------------------------------------------------

TODO returning value