Это __clrcall, действительно похоже на __fastcall. Два регистра используются джиттером x86 (ecx, edx). Четыре регистра по джиттеру x64 (ecx, edx, r8, r9), такие же, как и в собственном соглашении о вызовах x64. Типы больших значений, такие как десятичные и большие структуры, передаются путем резервирования пространства в стеке вызывающего, копирования значения в него и передачи указателя на эту копию. Вызываемый объект копирует его снова в свой собственный кадр стека.
Это дорого, поэтому Microsoft рекомендует, чтобы структура не превышала 16 байт. Преднамеренная передача структуры с помощью ref во избежание копирования - это обходной путь, обычно также выполняемый в C и C ++. За счет разыменования дополнительного указателя.