Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

XMM расширение с плавающей точкой




Синтаксис XMM команд:

· Мнемоника приемник, источник

· Мнемоника приемник, источник, маска

· Мнемоника приемник

Приемник – всегда регистр 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-расширения могут возбуждать исключительные ситуации, которые возникают, если происходит одно из следующих событий:

· некорректная операция (invalid operation);

· денормализованный операнд (denormalized operand);

· деление на 0 (divide-by-zero);

· арифметическое переполнение (numeric overflow);

· потеря значащих разрядов (numeric underflow);

· потеря точности (inexact result).

При возникновении исключительных ситуаций устанавливаются биты 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-байтовой границе.

Дополнительные команды. Сейчас мы рассмотрим еще одну группу команд, которые трудно отнести к какому-либо определенному типу, но которые являются весьма полезными при разработке программ.




Поделиться с друзьями:


Дата добавления: 2014-10-17; Просмотров: 620; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.