; - The first four integer or pointer parameters are passed in the rcx, rdx, r8, and r9 registers.
; - The first four floating-point parameters are passed in the first four SSE registers, xmm0-xmm3.
; - The caller reserves space on the stack for arguments passed in registers. The called function can use this space to spill the contents of registers to the stack.
; - Any additional arguments are passed on the stack.
; - An integer or pointer return value is returned in the rax register, while a floating-point return value is returned in xmm0.
; see https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/x64-architecture