Рефераты. Форматы данных и команды их обработки процессоров Pentium III, Pentium IV p>Логические инструкции в блоке ХММ
ANDPS Логическое И двух пакетов операндов
ANDNPS Логическое И-НЕ двух пакетов операндов
ORPS Логическое ИЛИ двух пакетов операндов
XORPS Исключающее ИЛИ двух пакетов операндов Перестановки операндов в ХММ
SHUFPS Перестановка слов в регистре ХММ под управлением 8-битного непосредственного операнда
UNPCKHPS Переупаковка старших половин с чередованием слов в результате
UNPCKLPS Переупаковка старших половин с чередованием слов в результате

Управление состоянием
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



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.