Команды SSE ( начиная с Pentium III )
Команды SSE делятся на 4 категории:
- SIMD-команды для данных одинарной точности с плавающей запятой (SPFP-команды);
- Дополнительные SIMD-команды для целочисленных данных;
- Команды управления кэшированием;
- Команды сохранения и восстановления компонент состояния процессора.
Одна SIMD-команда с плавающей запятой может обрабатывать одновременно четыре 32-разрядных числа одинарной точности с плавающей запятой (называемых SPFP-элементами данных).
SIMD-команды для работы с SPFP-данными используют восемь новых 128-разрядных регистров - XMM-регистров. Команды обращаются к XMM-регистрам по именам: XMM0, XMM1, :, XMM7.
Каждое 32-разрядное число с плавающей запятой имеет 1 знаковый бит, 8 битов порядка и 23 бита мантиссы, что соответствует стандарту IEEE-754 на формат представления чисел одинарной точности с плавающей запятой.
SIMD-команды поддерживают два типа операций над упакованными данными с плавающей запятой - параллельные и скалярные.
Параллельные операции, как правило, действуют одновременно на все четыре 32-разрядных элемента данных в каждом из 128-разрядных операндов. В именах команд, выполняющих параллельные операции, присутствует суффикс PS.
Скалярные операции действуют на младшие (занимающие разряды 0-31) элементы данных двух операндов. Остальные три элемента данных в выходном операнде не изменяются (исключение составляет команда скалярного копирования MOVSS). В имени команд, выполняющих скалярные операции, присутствует суффикс SS.
SSE-команды имеют следующий синтаксис: instruction [dest, src]
Здесь instruction - имя команды, dest обозначает выходной операнд, src - входной операнд.
Доступны следующие SSE-команды (обозначения: xmm - XMM-регистр; mm - MMX-регистр; m - память; imm - 8-битный непосредственный операнд; ir32 - целочисленный регистр):
ADDPS xmm, xmm/m | команда попарно складывает упакованные элементы данных и записывает суммы в соответствующие элементы XMM-регистра. |
SUBPS xmm, xmm/m | команда вычитает элементы входного операнда из элементов первого регистра и записывает полученные разности в соответствующие элементы первого регистра. |
MULPS xmm, xmm/m | команда попарно перемножает упакованные элементы. Произведения записываются в соответствующие элементы XMM-регистра. |
DIVPS xmm, xmm/m | команда делит элементы первого операнда на соответствующие элементы входного операнда . Результаты деления записываются в XMM-регистр на место делимых. |
ADDSS xmm, xmm/m | команда складывает младшие элементы данных и записывает результат в младший элемент XMM-регистра. Остальные элементы выходного операнда не меняются. |
SUBSS xmm, xmm/m | команда вычитает младший элемент входного операнда из соответствующего элемента выходного операнда и записывает разность в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. |
MULSS xmm, xmm/m | команда перемножает младшие элементы данных и записывает результат в младший элемент XMM-регистра. Остальные элементы выходного операнда не меняются. |
DIVSS xmm, xmm/m | команда делит младший элемент выходного операнда на соответствующий элемент входного операнда и записывает результат в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. |
SQRTPS xmm, xmm/m | команда вычисляет квадратный корень для каждого из четырех чисел во входном операнде и записывает результаты в выходной операнд. |
SQRTSS xmm, xmm/m | команда вычисляет квадратный корень из младшего элемента входного операнда и записывает результат в младший элемент в выходной операнд. Остальные элементы выходного операнда не меняются. |
RCPPS xmm, xmm/m | команда определяет приближенное обратное значение для каждого из четырех чисел входного операнда и записывает результаты в XMM-регистр. |
RSQRTPS xmm, xmm/m | команда вычисляет приближенное обратное значение для квадратного корня из каждого из четырех чисел входного операнда и записывает результаты в XMM-регистр. |
RCPSS xmm, xmm/m | команда определяет приближенное обратное значение для числа, находящегося в младшем элементе входного операнда и записывает результат в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. |
RSQRTSS xmm, xmm/m | команда вычисляет приближенное обратное значение для квадратного корня из числа , находящегося в младшем элементе входного операнда и записывает результат в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. |
MAXPS xmm, xmm/m | команда попарно сравнивает элементы данных и записывает большее значение из каждой пары в соответствующий элемент выходного операнда. |
MINPS xmm, xmm/m | команда попарно сравнивает элементы данных и записывает меньшие значения из каждой пары в соответствующие элементы выходного операнда. |
MAXSS xmm, xmm/m | команда сравнивает младшие элементы данных и записывает большее из значений в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. |
MINSS xmm, xmm/m | команда сравнивает младшие элементы данных и записывает меньшее из значений в младший элемент выходного операнда. Остальные элементы выходного операнда не меняются. |
SHUFPS xmm, xmm/m, imm | команда с непосредственным операндом выбирает из первого операнда два элемента с 2-битными номерами из непосредственного операнда (непосредственный операнд делится справа налево на 4 2-битовых числа) и записывает их в младшие элементы выходного операнда. Из второго операнда выбираются два элемента со следующими 2-битными номерами и записываются в старшие элементы выходного операнда. Перестановка всех элементов происходит одновременно. |
UNPCKHPS xmm, xmm/m | команда копирует третьи элементы входного и выходного операндов в соседние младшие элементы выходного операнда, а четвертые элементы входного и выходного операндов - соответственно, в старшие элементы выходного операнда. Распаковка элементов выполняется одновременно. |
UNPCKLPS xmm, xmm/m | команда копирует первые элементы входного и выходного операндов в соседние младшие элементы выходного операнда, а вторые элементы входного и выходного операндов - соответственно, в старшие элементы этого операнда. Распаковка элементов выполняется одновременно. |
Назад | Дальше
|