в чем разница между MOVNTDQ, MOVNTPS, MOVNTPD?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Hunter, 31 май 2006.

  1. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    В чем разница между инструкциями MOVNTDQ, MOVNTPS, MOVNTPD? В мануале Intel они отличаются лишь тем, что по разному интерпретируются сохранямые данные, но ведь в итоге по любому будет полностью сохранено 128-ми битное содержимое регистра rxmm. В чем смысл введения трех разных команд для одного действия?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Принципиальной разницы нет, но есть условно-историческая: MOVNTPS это SSE, а MOVNTDQ и MOVNTPD - SSE2

    А логика видимо была такая: в SSE добавили инструкции MOVNTQ и MOVNTPS ес-но с разными опкодами, затем в SSE2 были введены MOVNTDQ и MOVNTPD которым по логике вещей присвоили опкоды MOVNTQ и MOVNTPS с префиксом переопределения размера операнда. Вот если бы сразу догадались вместо специфической мнемоники MOVNTPS использовать более общую MOVNTDQ, то возможно и не нужно было бы ничего добавлять в SSE2 ;)
     
  3. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    интересно, получается что из-за первоначально выбранной мнемоники MOVNTPS, которая подразумевает упакованные данные одинарной точности, пришлось ввести команду MOVNTPD, сохраняющую данные двойной точности, а на самом деле выполняющую то же самое. Intel решило не менять мнемонику, а добавить новую команду? То же можно сказать и про MOVNTDQ. Можно сказать, что это идентичные команды с разными опкодами. Вот если бы они делали проверку, скажем на NAN'ы или неподдерживаемые форматы, было бы хоть какое-то различие и смысл.