Почему в Windows 64 было выбрано требование сохранения / восстановления xmm6 и xmm7? - PullRequest
8 голосов
/ 04 ноября 2008

Почему 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?

1 Ответ

1 голос
/ 04 ноября 2008

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

Википедия говорит, что Соглашение о вызовах Microsoft x64 использует XMM0 - XMM3, что подразумевает, что остальные предполагается сохраненными. Опять же, здесь не сказано, почему.

...