Для функции с подписью:
struct Pair { void *v1, *v2 };
void f(Pair p);
скомпилированный на x64, я бы хотел, чтобы поля Pair
передавались через регистр, как если бы функция была:
void f(void *v1, void *v2);
Компилируя тест с gcc 4.2.1 для x86_64 на OSX 10.6, я вижу, что именно это и происходит, изучая разборку. Однако при компиляции с MSVC 2008 для x64 в Windows разборка показывает, что Pair
передается в стек. Я понимаю, что ABI платформы могут предотвратить эту оптимизацию; Кто-нибудь знает какие-либо аннотации MSVC, соглашения о вызовах, флаги или другие хаки, которые могут заставить это работать?
Спасибо!