Управление состоянием LDMXCSR Загрузка регистра MXCSR STMXCSR Сохранение регистра MXCSR FXSAVE Сохранение состояния блоков FP/MMX и ХММ FXRSTOR Восстановление состояния блоков FP/MMX и ХММ
Дополнительные целочисленные SIMD-инструкции (выполняются с операндами в регистрах ММХ, входят и в расширенный набор 3DNow!)
PAVGB/PAVGW Нахождение среднего упакованных беззнаковых байт или слов PEXTRW Извлечение 16-битного слова из регистра ММХ в младшую половину 32-битного регистра (старшая половина обнуляется).
Номер слова определяется младшими битами непосредственного операнда PINSRW Помещение младшей половины 32-битного регистра в выбранное слово регистра ММХ. Номер слова определяется младшими битами непосредственного операнда PMAXUB, PMAXSW Нахождение максимума упакованных беззнаковых байт/знаковых слов PMINUB, PMINSW Нахождение минимума упакованных беззнаковых байт/знаковых слов PMOVMSKB Сборка старших бит упакованных байт в 8-битную маску, помещаемую в целочисленный регистр PMULHUW Умножение беззнаковых слов с сохранением старших половин произведений PSADBW Нахождение суммы модулей разности пар слов (результат — 16- битное число) PSHUFW Перемешивание слов под управлением 8-битного непосредственного операнда
Управление кэшированием (входят и в расширенный набор 3DNow!)
MASKMOVQ Выборочная запись байт из регистра ММХ в память, минуя кэш MOVNTQ Запись из регистра ММХ в память, минуя кэш MOVNTPS Запись из регистра ХММ в память, минуя кэш (адрес должен быть выровнен по границе параграфа) PREFETCHTO Загрузка 32 или более байт в кэш-память PREFETCHT1 PREFETCHT2 PREFETCHNT SFENCE Выгрузка результатов всех предыдущих инструкций в кэш- память
Новые инструкции управления кэшированием обеспечивают запись содержимого регистров ММХ и ХММ в память, минуя кэш, что позволяет избегать "загрязнения" кэш-памяти промежуточными данными. Появилась и возможность "закачивать" требуемые данные в кэш прежде использующих их инструкций.
По сравнению с расширением 3DNow! набор инструкций SSE шире, часть инструкций пересекается, но и в 3DNow! имеются уникальные инструкции, не реализованные в SSE.
Инструкции SSE2 появились в процессорах Pentium 4. Большая их часть предназначена для работы с числами с плавающей точкой двойной точности (64- битные операнды), расположенными в регистрах ХММ, векторными (упакованная пара 64-битных чисел) и скалярными (старшим или младшим числом). Они обеспечивают векторные и скалярные пересылки этих чисел, арифметические инструкции (сложение, вычитание, умножение, деление, извлечение корня, нахождение максимума и минимума), сравнение чисел, преобразования форматов, перестановки операндов, а также побитные логические функции. Появились и SIMD-инструкции обработки 32- и 64-битных целых чисел, расположенных в регистрах ХММ. Новые инструкции управления кэшированием позволяют миновать кэш при записи в память из регистров ХММ и общих регистров, упорядочивать последовательности загрузки данных из памяти и записи в память и выполнять некоторые другие действия.
Таблица. Инструкции SSE2
Инструкция Описание
Инструкции пересылки данных (чисел с плавающей точкой двойной точности между регистрами ХММ, а также регистрами ХММ и памятью) MOVAPD Пересылка пары упакованных выровненных чисел MOVUPD Пересылка пары упакованных невыровненных чисел MOVHPD Пересылка старшего упакованного числа MOVLPD Пересылка младшего упакованного числа MOVMSKPD Извлечение знаковой маски из пары чисел MOVSD Пересылка скалярного числа
Арифметические инструкции над операндами с плавающей точкой двойной точности в регистрах ХММ ADDPD Векторное сложение ADDSD Скалярное сложение SUBPD Векторное вычитание SUBSD Скалярное вычитание MULPD Векторное умножение MULSD Скалярное умножение DIVPD Векторное деление DIVSD Скалярное деление SQRTPD Векторное извлечение квадратного корня SQRTSD Скалярное извлечение квадратного корня MAXPD Векторное нахождение максимума MAXSD Скалярное нахождение максимума MINPD Векторное нахождение минимума MINSD Скалярное нахождение минимума
Логические инструкции над упакованными 64-битными операндами в регистрах ХММ (побитные функции) ANDPD Логическое И ANDNPD Логическое И-НЕ ORPD Логическое ИЛИ XORPD Исключающее ИЛИ
Инструкции сравнения упакованных (векторных) и скалярных операндов с плавающей точкой двойной точности в регистрах ХММ с помещением результата в операнд-приемник или регистр EFLAGS CMPPD Сравнение векторное CMPSD Сравнение скалярное COMISD Упорядоченное сравнение скалярных чисел с помещением результата в биты регистра EFLAGS (если хоть один из операндов QNaN или SNaN, генерируется исключение #I и
EFLAGS не модифицируется) UCOMISD Неупорядоченное сравнение (то же, но исключение #I генерируется только в случае SNaN)
Инструкции перестановок и распаковки операндов с плавающей точкой двойной точности в регистрах ХММ SHUFPD Перестановка элементов в упакованных операндах UNPCKHPD Распаковка и чередование старших элементов (в приемнике собираются старшие части операндов) UNPCKLPD Распаковка и чередование младших элементов (в приемнике собираются младшие части операндов) Инструкции преобразований в формат и из формата упакованных и скалярных чисел с плавающей точкой двойной точности CVTPD2PI Преобразование упакованных чисел с плавающей точкой в упакованные целые (двойные слова) CVTTPD2PI Преобразование с усечением упакованных чисел с плавающей точкой двойной точности в упакованные целые (двойные слова) CVTP12PD Преобразование упакованных целых (двойных слов) в упакованные числа с плавающей точкой двойной точности CVTPD2DQ Преобразование упакованных чисел с плавающей точкой в упакованные целые (двойные слова) CVTTPD2DQ Преобразование с усечением упакованных чисел с плавающей точкой двойной точности в упакованные целые (двойные слова) CVTDQ2PD Преобразование упакованных 32-битных целых в упакованные числа с плавающей точкой двойной точности CVTPS2PD Преобразование упакованных чисел с плавающей точкой одинарной точности в числа двойной точности CVTPD2PS Преобразование упакованных чисел с плавающей точкой двойной точности в числа одинарной точности CVTSS2SD Преобразование скалярного числа с плавающей точкой одинарной точности в число двойной точности CVTSD2SS Преобразование скалярного числа с плавающей точкой двойной точности в число одинарной точности CVTSD2SI Преобразование скалярного числа одинарной точности в 32- битное целое CVTTSD2SI Преобразование с усечением скалярного числа двойной точности в 32-битное целое CVTS12SD Преобразование 32-битного целого в число двойной точности
Инструкции преобразований с числами одинарной точности CVTDQ2PS Преобразование упакованных 32-битных целых в упакованные числа с плавающей точкой одинарной точности CVTPS2DQ Преобразование упакованных чисел одинарной точности в числа двойной точности CVTTPS2DQ Преобразование с усечением упакованных чисел одинарной точности в числа двойной точности
Целочисленные 128-битные SIMD-инструкции MOVDQA Пересылка выровненного 128-битного операнда MOVDQU Пересылка невыровненного 128-битного операнда MOVQ2DQ Пересылка 64-битного целого из ММХ в ХММ MOVDQ2Q Пересылка 64-битного целого из ХММ в ММХ PMULUDQ Умножение упакованных беззнаковых 32-битных целых PADDQ Сложение упакованных 64-битных целых PSUBQ Вычитание упакованных 64-битных целых PSHUFLW Перестановка упакованных младших слов PSHUFHW Перестановка упакованных старших слов PSHUFD Перестановка упакованных двойных слов PSLLDQ Логический сдвиг 64-битных чисел влево PSRLDQ Логический сдвиг 64-битных чисел вправо PUNPCKHQDQ Распаковка старших 64-битных чисел PUNPCKLQDQ Распаковка младших 64-битных чисел Управление кэшированием CLFLUSH Очистка и инвалидация строки кэша (всех уровней), связанной с указанным операндом в памяти LFENCE Упорядочивание операций загрузки из памяти MFENCE Упорядочивание операций загрузки и записи PAUSE Улучшение выполнения цикла ожидания MASKMOVDQU Выборочная запись байтов из ХММ в память, минуя кэш MOVNTPD Запись пары упакованных чисел из ХММ в память, минуя кэш MOVNTDQ Запись 128-битного числа из ХММ в память, минуя кэш MOVNTI Запись двойного слова из регистра общего назначения в память, минуя кэш
Инструкции 3DNow!, появившиеся с процессорами AMD K6-2, поддерживаются всеми последующими процессорами AMD и некоторыми другими процессорами.
Процессоры Intel этот набор не поддерживают, хотя в SSE имеются инструкции, совпадающие с частью инструкций 3DNow!. В процессорах Athlon расширение 3DNow! получило дополнительные инструкции для сигнальных процессоров. Целочисленные инструкции ММХ и управления кэшированием совпадают с одноименными инструкциями SSE. В данной работе инструкции 3DNow! не рассмотрены, так как не относятся к инструкциям процессоров Pentium 3,4.
6. Команды блока XMM (SSE и SSE2)
Порядок описания команд в этом разделе следующий:
• в заголовок вынесена схема команды, поясняющая общий набор и назначение операндов;
• в следующей строке дается название команды, расшифровка ее мнемоники и назначение;
• далее следует синтаксис команды (сложный синтаксис приводится в виде диаграмм), при описании которого используются следующие обозначения:
• r8, r16, r32 — операнд в одном из регистров размером байт, слово или двойное слово;
• m8, m16, m32, m48, m64 — операнд в памяти размером байт, слово, двойное слово или 48 бит;
• i8, i16, i32 — непосредственный операнд размером байт, слово или двойное слово;
• машинный код для всех сочетаний операндов описываемой команды (при сложном синтаксисе машинный код включается в синтаксис);
• состояние флагов после выполнения команды;
• описание действия команды;
• описание флагов после выполнения команды, при этом приводятся сведения только о флагах, изменяемых командой, и используются следующие обозначения:
• 1 — флаг устанавливается (равен 1);
• 0 — флаг сбрасывается (равен 0);
• r — значение флага зависит от результата выполнения команды;
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14