Почему Windows 64 решила требовать сохранения / восстановления xmm6 и xmm7?
В Windows 32 вы могли писать ассемблерные подпрограммы, которые сбивали xmm0 ... xmm7. Но если вы возьмете тот же ассемблерный код и запустите его в Windows 64, это обычно вызовет ошибку приложения, потому что VS2007 хранит значения двойной точности в xmm6 и xmm7.
Мне казалось, что, поскольку X64 имеет 16 регистров xmm xmm0 ... xmm15 (тогда как X32 имеет только 8 регистров xmm), то Microsoft могла бы разрешить пользователям затирать xmm0..xmm7 (чтобы они могли повторно использовать процедуры сборки из Win32 не задумываясь об этом), но требовать от пользователей сохранения / восстановления xmm8 ... xmm15.
Итак, чтобы удовлетворить мое любопытство, почему Windows 64 решила требовать сохранения / восстановления xmm6 и xmm7?





Интересный вопрос. Я нашел это: Структурированная обработка исключений Win64, в котором указано, что XMM6 - XMM15 необходимо сохранить / восстановить, но не указано Почему.
Википедия говорит, что Соглашение о вызовах Microsoft x64 использует XMM0 - XMM3, что подразумевает, что остальные предполагается сохранить. Опять же, не сказано почему.