Подтвердить что ты не робот

Почему MSVC бесполезно использует стек при возврате небольшой структуры в регистр?

Я скомпилировал следующий код на MSVC 2013, x64, Release build с /02:

struct Point
{
    int x;
    int y;
};

Point xUnit()
{
    Point p;
    p.x = 1;
    p.y = 0;
    return p;
}

Сгенерированный код сборки для xUnit():

mov QWORD PTR p$[rsp], 1
mov rax, QWORD PTR p$[rsp]
ret 0

Почему он записывает в стек, а затем сразу же возвращается в rax для возврата?

Я бы ожидал:

mov rax, 1
ret 0
4b9b3361

Ответ 1

Версия X86, похоже, преуспевает (это сгенерирует "mov eax, 1" ).

Я предполагаю, что версии X86 и X64 являются отдельными базами кода, и оптимизация, найденная в одной цели, необязательно присутствует в другой.