Типы данных

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-расширения включает несколько десятков команд. Все их условно можно разделить на несколько групп:

· команды передачи данных;

· арифметические команды;

· команды сравнения;

· команды преобразования;

· логические команды;

· дополнительные команды.

· Классификация команд

После обзора команды будут рассмотрены подробно.