В чем разница между инструкциями MOVNTDQ, MOVNTPS, MOVNTPD? В мануале Intel они отличаются лишь тем, что по разному интерпретируются сохранямые данные, но ведь в итоге по любому будет полностью сохранено 128-ми битное содержимое регистра rxmm. В чем смысл введения трех разных команд для одного действия?
Принципиальной разницы нет, но есть условно-историческая: MOVNTPS это SSE, а MOVNTDQ и MOVNTPD - SSE2 А логика видимо была такая: в SSE добавили инструкции MOVNTQ и MOVNTPS ес-но с разными опкодами, затем в SSE2 были введены MOVNTDQ и MOVNTPD которым по логике вещей присвоили опкоды MOVNTQ и MOVNTPS с префиксом переопределения размера операнда. Вот если бы сразу догадались вместо специфической мнемоники MOVNTPS использовать более общую MOVNTDQ, то возможно и не нужно было бы ничего добавлять в SSE2
интересно, получается что из-за первоначально выбранной мнемоники MOVNTPS, которая подразумевает упакованные данные одинарной точности, пришлось ввести команду MOVNTPD, сохраняющую данные двойной точности, а на самом деле выполняющую то же самое. Intel решило не менять мнемонику, а добавить новую команду? То же можно сказать и про MOVNTDQ. Можно сказать, что это идентичные команды с разными опкодами. Вот если бы они делали проверку, скажем на NAN'ы или неподдерживаемые форматы, было бы хоть какое-то различие и смысл.