Just out of curiosity: value types are usually copied, and the JIT compiler seems to use the Microsoft Fastcall calling convention when calling the method. This gives the first few arguments in registers for quick access. But how are large type values (i.e., larger than the register size or stack width) passed to the called function?
This excerpt book states that:
The CLR jitted code uses the fastcall Windows calling convention. This allows the caller to provide the first two arguments (including this in the case of instance methods) in native ECX and EDX.
__clrcall, __fastcall. x86 (ecx, edx). x64 (ecx, edx, r8, r9), , x64. , , , . .
, Microsoft , 16 . ref, , , C ++. .