Разница между инструкциями MOVDQA и MOVAPS x86? - PullRequest
27 голосов
/ 13 июля 2011

Я смотрю спецификацию Intel: Архитектура Intel® 64 и IA-32 Руководство разработчика программного обеспечения , и я не могу найти разницу между

  • MOVDQA : сдвинуть выровненный двойной четырехугольник
  • MOVAPS : перемещение выровнено в упакованном виде одинарной точности

В спецификации Intel я могу найти обе инструкции:

Эта инструкция может использоваться для загрузки регистра XMM из 128-битного ячейка памяти, чтобы сохранить содержимое регистра XMM в 128-битная ячейка памяти или для перемещения данных между двумя регистрами XMM.

Единственная разница:

Чтобы переместить двойное четырехзначное слово в или из невыровненных областей памяти, используйте инструкция MOVDQU.

и

Чтобы переместить упакованные значения с плавающей запятой одинарной точности в или из Выровненные ячейки памяти, используйте инструкцию MOVUPS.

Но я не могу найти причину, почему две разные инструкции?

Так кто-нибудь может объяснить разницу?

1 Ответ

43 голосов
/ 13 июля 2011

По функциональности они идентичны.

На некоторых (но не на всех) микроархитектурах существуют временные различия из-за "штрафов за пересечение домена".По этой причине обычно следует использовать movdqa, когда данные используются с целочисленными инструкциями SSE, и movaps, когда данные используются с инструкциями с плавающей запятой.Для получения дополнительной информации по этому вопросу обратитесь к руководству по оптимизации Intel или превосходному руководству по микроархитектуре Agner Fog.Обратите внимание, что эти задержки чаще всего связаны с перемещениями регистр-регистр вместо загрузки или сохранения.

...