How to implement a custom (meta-) CallingConv ?

With the inlining problem basically solved, here's my second question.

What I would like to achieve is to create my own CallingConvention, or something to that effect. I would want to keep the native calling convention (ABI) intact, but reorganize the parameters and also the return value into a struct.

Here's a simplified example, which I hope makes this clearer: