Приемник – всегда регистр XMM, источник - регистр XMM или ячейка памяти,
Типы данных. XMM-расширение реализовано в виде аппаратно-программного модуля SSE, который включает дополнительные восемь регистров разрядностью в 128 бит, имеющих обозначение ХММО - ХММ7,
и 32-разрядный регистр управления/состояния MXCSR.
Программная часть XMM-расширения включает в себя набор команд для работы с данными в формате плавающей точки. Содержимое ХММ-регистра представляет собой четыре 32-разрядных операнда с плавающей точкой в коротком формате (Single Precision Floating Point, SPFP). Представление данных SSE-расширения соответствует стандарту IEEE-754, а сам формат данных показан на рисунке.
Здесь мантисса (mantissa) и порядок (exponent) формируют число в формате SPFP в соответствии с формулой
мантисса * 2порядок.
Этот формат данных несопоставим с тем, который принят для математического сопроцессора (число в 80-разрядном расширенном формате), поэтому в некоторых случаях при разных границах выравнивания результаты вычислений с использованием форматов FPU и SSE могут различаться.
Поскольку аппаратно модуль SSE-расширения реализован независимо от других модулей, то это позволяет выполнять XMM-комапды параллельно с командами математического сопроцессора и ММХ-командами. При этом для синхронизации вычислений инструкции наподобие EMSS не требуются.
Структура полей регистра управления/состояния (MXCSR) во многом напоминает ту, что реализована в регистрах состояния (swr) и управления (cwr) математического сопроцессора. Состоянием вычислений можно управлять путем установки определенных значений в поля этого регистра.
Набор инструкций XMM-расширения включает 70 команд.
Значительная часть команд может выполняться в двух контекстах: скалярном и параллельном. Это относится к арифметическим командам, а также к командам сравнения. Команды обрабатывают:
· В параллельном контексте одновременно 4 двойных слова и имеют в своей мнемонике суффикс ps.
· В скалярном контексте только младшие 32-разрядные двойные слова упакованных операндов, не затрагивая при этом три старших двойных слова. Исключение составляют некоторые команды скалярной пересылки данных. Мнемоническое обозначение этих команд включает суффикс ss.
В процессе обработки данных команды XMM-расширения могут возбуждать исключительные ситуации, которые возникают, если происходит одно из следующих событий:
При возникновении исключительных ситуаций устанавливаются биты 0-5 в регистре управления/состояния (MXCSR). Каждая исключительная ситуация может быть замаскирована путем установки в 1 битов 7-12 регистра MXCSR. Если какое-либо исключение замаскировано, то оно обрабатывается процессором по стандартному алгоритму, после чего продолжается выполнение программного кода. Формат полей регистра MXCSR и их назначение показаны на рис. 13.5.
Биты 13-14 регистра MXCSR поля RC (или гс, что одно и то же) задают режим округления. По умолчанию устанавливается режим округления к ближайшему значению числа с плавающей точкой в коротком формате. Эти биты можно установить программно, причем возможны следующие комбинации:
· 00 — округление к ближайшему числу;
· 01 — округление к меньшему числу;
· 10 — округление к большему числу;
· 11 — округление с отбрасыванием дробной части.
Бит 15 используется, если результат операции близок к нулю. При этом процессор выполняет следующие действия:
· возвращает значение 0 и знак результата;
· устанавливает флаги Р (бит 5) и U (бит 4);
· маскирует биты исключений.
Программная реализация SSE-расширения включает несколько десятков команд. Все их условно можно разделить на несколько групп:
· команды передачи данных;
· арифметические команды;
· команды сравнения;
· команды преобразования;
· логические команды;
· дополнительные команды.
· Классификация команд
После обзора команды будут рассмотрены подробно.
Категория
Подкатегория
Команды
Передача данных
Арифметика
Скалярные
Параллельные
Сравнение
Преобразования
Логика
Дополнительные
Вычисления
Извлечения
Извлечения знака
Передача данных. Данные передаются между:
· регистрами MMX,
· регистром MMX и регистром основного процессора,
· регистром MMX и памятью.
Если размер приемника меньше размера источника, то лишние разряды обнуляются.
Мнемоника
Описание
MOVAPS
MOVe Aligned four Packed Single precision float point
Пересылка выровненных по 16-байтовой границе 128-разрядных операндов. В качестве входного операнда могут выступать ХММ-регистр или 128-разрядная ячейка памяти, выходным операндом может служить один из ХММ-регистров. Если адрес ячейки памяти не будет выровнен по 16-байтовой границе, то произойдет исключение общей защиты.
MOVUPS
MOVe Unaligned four Packed Single precision float point
Пересылка невыровненных данных; в качестве входного операнда могут выступать ХММ-регистр или 128-разрядная ячейка памяти, выходным операндом может служить один из ХММ-регистров. Команда не требует выравнивания по 16-байтовой границе..
MOVHPS
MOVe unaligned High Packed Single precision float point
Пересылка невыровненных 64 бит из входного операнда в выходной. Один из операндов обязательно должен быть ХММ-регистром, в качестве второго может выступать 64-разрядная ячейка памяти. Пересылаются только старшие 64 бит входных операндов. Младшие 64 бит обоих операндов не изменяются. Если данные передаются из ХММ-регистра, то пересылке подлежат только старшие 64 бит. Команда не требует выравнивания по 16-байтовой границе адреса ячейки памяти. Пример:
MOVLHPS
MOVe Low to High Packed Single precision float point
Пересылка невыровненных 64 бит из входного операнда в выходной. Оба операнда должны находиться в ХММ-регистрах. Пересылаются только старшие 64 бит входных операндов. В результате выполнения этой команды изменяются младшие 64 бит приемника. Пример:
MOVHLPS
MOVe High to Low Packed Single precision float point
Пересылка невыровненных 64 бит из входного операнда в выходной. Оба операнда должны находиться в ХММ-регистрах. Пересылаются только старшие 64 бит входных операндов. В результате выполнения этой команды изменяются младшие 64 бит регистра-приемника. Пример:
MOVLPS
MOVe unaligned Low Packed Single precision float point
пересылка невыровненных 64 бит из входного операнда в выходной. Один из операндов обязательно должен быть ХММ-регистром, в качестве второго может выступать 64-разрядная ячейка памяти. Пересылаются толь- ко младшие 64 бит входных операндов. Старшие 64 бит обоих операндов не изменяются. Если данные передаются из ХММ-регистра, то пересылке подлежат только младшие 64 бит. Команда не требует выравнивания по 16-байтовой границе адреса ячейки памяти. Пример:
MOVMSKPS
MOVe sign MaSK Packed Single precision float point to integer
Пересылка знакового бита каждого из четырех упакованных чисел входного операнда в младшие четыре бита выходного операнда. В качестве входного операнда может выступать только ХММ-регистр, а в качестве выходного операнда — 32-разрядный регистр общего назначения. Эта команда используется для организации условных переходов. Пример:
MOVSS
MOVe Scalar Single precision float point
Пересылка 32 младших битов из источника в приемник, при этом как минимум один из операндов должен быть ХММ-регистром. Второй операнд должен быть 32-разрядной ячейкой памяти. При выполнении операции пересылки из операнда в памяти младшие 32 бит помещаются в младшие 32 бит ХММ-регистра. Если выполняется пересылка из ХММ-регистра, то выбираются младшие 32 разряда регистра, остальные разряды не изменяются.
Арифметика. В мнемонике суффикс:
· SS – скалярный контекст.
· PS – параллельный контекст.
Мнемоника
Описание
ADDSS
ADDPS
Сложение
ADDition Scalar Single precision float point
ADDition Packed Single precision float point
SUBSS
SUBPS
Вычитание
SUBtracition Scalar Single precision float point
SUBtraction Packed Single precision float point
MULSS
MULPS
Умножение
MULtiply Scalar Single precision float point
MULtiply Packed Single precision float point
DIVSS
DIVPS
Деление
DIVide Scalar Single precision float point
DIVide Packed Single precision float point
SQRTSS
SQRTPS
Извлечение квадратного корня
Square RooT Scalar Single precision float point
Square RooT Packed Single precision float point
MAXSS
MAXPS
Максимальное значение
MAXimum Scalar Single precision float point
MAXimum Packed Single precision float point
MINSS
MINPS
Минимальное значение
MINimum Scalar Single precision float point
MINimum Packed Single precision float point -
RCPSS
RCPPS
Обратное значение
ReCiProcal Scalar Single precision float point
ReCiProcal Packed Single precision float point
RSQRTSS
RSQRTPS
Обратное значение квадратного корня
Reiprocal SQuare RooT Scalar Single precision float point
Reiprocal SQuare RooT Packed Single precision float point
Сравнения. В мнемонике суффикс:
· SS – скалярный контекст.
· PS – параллельный контекст.
Мнемоника
Описание
CMPEQS CMPEQPS
Равенство (equal)
CoMPare EQual Scalar Single precision float point
CoMPare EQual Packed Single precision float point
CMPNEQS CMPNEQPS
Неравенство (not equal)
CoMPare Not EQual Scalar Single precision float point
CoMPare Not EQual Packed Single precision float point -
CMPLTS CMPLTPS
Меньше чем (less-than)
CoMPare Less-Then Scalar Single precision float point
CoMPare Less-Than Packed Single precision float point
CMPNLTS п CMPNLTPS
Не меньше чем (not-less-than)
CoMPare Not Less-Then Scalar Single precision float point
CoMPare Not Less-Than Packed Single precision float point
CMPLES CMPLEPS
Меньше или равно (less-than-or-equal)
CoMPare Less-then-or-Equal Scalar Single precision float point
CoMPare Less-than-or-Equal Packed Single precision float point
CMPNLES
CMPNLEPS
Не меньше или равно (not less-than-or-equal)
CoMPare Not Less-then-or-Equal Scalar Single precision float point
CoMPare Not Less-than-or-Equal Packed Single precision float point
CMPORDS
CMPORDPS
Упорядоченность (order)
CoMPare ORDer Scalar Single precision float point
CoMPare ORDer Packed Single precision float point
CMPUNORDS
CMPUNORDPS
Неупорядоченность (unorder)
CoMPare UNORDer Scalar Single precision float point
CoMPare UNORDer Packed Single precision float point
Преобразования. В мнемонике суффикс:
· SI – скалярный контекст.
· PI – параллельный контекст.
Мнемоника
Описание
CVTSS2SI
CVTPS2PI
Преобразование 32-разрядного числа с плавающей точкой в коротком формате в 32-разрядное целое число
ConVerT Scalar Single precision float point to Scalar signed Int32
ConVersion Two Packed Single precision float point to Packed signed Int32
CVTTSS2SI
CVTTPS2PI
Преобразование 32-разрядного числа с плавающей точкой в коротком формате в 32-разрядное целое число путем отсечения дробной части
ConVerT Trancate Scalar Single precision float point to Scalar signed Int32
ConVersion Trancate Two Packed Single precision float point to Packed signed Int32
CVTSI2SS
CVTTPS2PI
Преобразование 32-разрядного числа в целочисленном формате в 32-разрядное число с плавающей точкой в коротком формате.
ConVerT Scalar signed Int32 to Scalar Single precision float point
ConVersion Two Packed signed Int32 to Packed Single precision float point
Логика. Логические ММХ-команды выполняют поразрядные логические операции над всеми 64 битами своих операндов. Они реализуют логические операции И, ИЛИ, И-НЕ, исключающего ИЛИ:
Мнемоника
Описание
ANDPS
bit-wise logical AND for Packed Single precision float point
Параллельная операция логического И над парами битов упакованных чисел с плавающей точкой операнда-источника и операнда-приемника.
ANDNPS
bit-wise logical AND-Not for Packed Single precision float point
Параллельная операция логического И-НЕ над парами битов упакованных чисел с плавающей точкой операнда-источника и операнда-приемника
ORPS
bit-wise logical OR for Packed Single precision float point
Параллельная операция логического ИЛИ над парами битов упакованных чисел с плавающей точкой операнда-источника и операнда-приемника
XORPS
bit-wise logical eXclusive OR for Packed Single precision float point
Параллельная операция логического Исключающкго ИЛИ над парами битов упакованных чисел с плавающей точкой операнда-источника и операнда-приемника.
Управление состоянием. К этой группе относятся команды, выполняющие загрузку/сохранение регистров состояния и управления:
Мнемоника
Описание
LDMXCSR источник
LoaD MXCSR
Загрузка регистра управления/состояния (MXCSR) содержимым 32-разрядной ячейки памяти, которая и является единственным операндом.
STMXCSR приемник
STore MXCSR
Сохранение регистра управления/состояния (MXCSR) в 32-разрядной ячейки памяти, которая и является единственным операндом.
FXRSTOR источник
Fp and mmX ReSTORe
Загрузка предварительно сохраненного состояния сопроцессора, ММХ- и SEE-расширения из области памяти размером 512 байт. В качестве операнда выступает адрес области памяти, который должен быть выровнен по 16-байтовой границе.
FXSAVE приемник
Fp and mmX SAVE
Сохранение состояния сопроцессора, ММХ- и SSE-расширения в область памяти размером в 512 байт. В качестве операнда выступает адрес области памяти.
Распаковка данных. XMM-команды распаковки попарно объединяют элементы данных из обоих операндов в более длинные элементы выходного операнда. Этими командами можно пользоваться для увеличения числа значащих разрядов при вычислениях.
Мнемоника
Описание
UNPCKHPS
UNPaCK High Packed Single precision float point data
Параллельное перемещение старших двойных слов из операнда-источника и операнда-приемника в операнд-приемник.Пример:
UNPCKLPS
UNPaCK Low Packed Single precision float point data
Параллельное перемещение младших двойных слов из операнда-источника и операнда-приемника в операнд-приемник. Пример:
SHUFPS
UNPaCK Low Packed Single precision float point data
Параллельная перестановка 32-разрядных упакованных операндов в соответствии с заданной маской. Команда имеет три операнда: входной, выходной и операнд-маску.
Маска представляет собой непосредственное 8-разрядное значение, задающее порядок перестановки операндов. Каждая пара битов маски определяет номер упакованного 32-разрядного операнда в приемнике или источнике, который должен помещаться в операнд-приемник. При этом порядок размещения 32-разрядных операндов таков: младшие 4 бита маски указывают номера двух упакованных чисел приемника, которые становятся младшими упакованными значениями результата, а старшие 4 бита — номера упакованных чисел источника, которые становятся старшими упакованными значениями результата. Пример:
Управление кэшированием. Необходимость управления кэшированием вызвана тем, что большинство мультимедийных приложений оперируют большими объемами данных, при этом может случиться, что данные, загруженные в кэш, никогда не понадобятся. Чтобы оптимизировать работу кэша, в систему команд SSE-расширения и были включены команды управления кэшем.
Мнемоника
Описание
MASKMOVQ
mm1, mm2
MASK MOVe Quadword
Выборочная запись байтов в память из источника (ММХ-регистр mm1) по маске. Маска – это знаковые биты 8 байтов MMX-регистра mm2. Последовательно проверяются знаковые биты всех 8 байтов, и если какой-то из этих битов равен 1, то соответствующий байт источника копируется в область памяти, начальный адрес которой содержится в регистрах DS:DI/EDI. Если знаковый бит равен нулю, то соответствующий байт в приемнике будет нулевым.
MOVNTQ
MOVe using Non-Temporal of Quadword
Сохранение учетверенного слова из ХММ-регистра в памяти без использования кэша.
MOVNTDQ
MOVe using Non-Temporal of Double Quadword
Сохранение двойного учетверенного слова из ХММ-регистра в памяти без использования кэша.
MOVNTPD
MOVe Non Temporal aligned Packed Double precision float point data
Запись в память, минуя кэш, упакованных чисел с плавающей точкой c удвоенной точностью. Операндом-источником здесь выступает ХММ-регистр, а операндом-приемником — 128-разрядная ячейка памяти, адрес которой должен быть выровнен по 16-байтовой границе.
MOVNTPS
MOVe Non-Temporal Packed Single precision float point
Запись в память, минуя кэш, упакованных чисел с плавающей точкой в коротком формате. Операндом-источником здесь выступает ХММ-регистр, а операндом-приемником — 128-разрядная ячейка памяти, адрес которой должен быть выровнен по 16-байтовой границе.
Дополнительные команды. Сейчас мы рассмотрим еще одну группу команд, которые трудно отнести к какому-либо определенному типу, но которые являются весьма полезными при разработке программ.
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление