Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12-12-2013_11-21-32 / Посовие_1.docx
Скачиваний:
93
Добавлен:
10.05.2015
Размер:
217.48 Кб
Скачать

9.6. Команды перестановки

Команда SHUFPS (Shuffle packed, single-precision, floating-point – упакованная перестановка операндов с плавающей запятой одинарной точности) выбирает по два из четырех элементов каждого операнда. Два выбранных элемента первого операнда копируются в младшие элементы выходного операнда, а два выбранных элемента второго операнда – в старшие элементы выходного операнда (рисунок 2). Выборка элементов для копирования производится в соответствии со значением 8-разрядного непосредственного операнда.

Входной (второй) операнд может располагаться либо в XMM регистре, либо в памяти. Выходной (первый) операнд должен обязательно находиться в XMM регистре.

Команда UNPCKHPS (Unpacked high packed, single-precision, floating-point – распаковка старших элементов операндов с плавающей запятой одинарной точности) копирует по два старших элемента каждого из операндов в выходной операнд, причем расставляет их, помещая через один (рисунок 3). Нижняя половина входных операндов игнорируется. Если входной операнд берется из памяти, то хотя в операции участвует только 64-разрядная группа данных, считываются из памяти все 128-разрядов операнда.

Команда UNPCKLPS (Unpacked low packed, single-precision, floating-point- распаковка младших элементов операндов с плавающей запятой одинарной точности) выполняет те же действия с двумя парами младших элементов каждого их операндов (рисунок 4).

Рисунок 2 Команда упакованной перестановки.

Рисунок 3 Операция распаковки старших элементов.

9.7. Команды управления состоянием

Команда STMXCSR (Store SIMD Floating-Point Control and Status Register) служит для сохранения содержимого регистра MXCSR в памяти, а команда LDMXCSR (Load SIMD Floating-Point Control and Status Register) - для загрузки этого содержимого из памяти.

Обычно команду LDMXCSR используют, когда необходимо сбросить флаги обнаружения арифметических исключений в регистре MXCSR.

Рисунок 4 Операция распаковки младших элементов.

Команда FXSAVE сохраняет в памяти компоненты состояния микропроцессора (регистр состояния FP, регистр состояния MMX и регистры SIMD), когда операционная система осуществляет переключение контекста.

Команда FXRSTOR восстанавливает компоненты состояния микропроцессора из памяти. Информация о компонентах состояния процессора для этих команд хранится в области памяти размером 512 байт. Задаваемый адрес памяти должен быть выровнен на 16 байт.

9.8. Команды технологии sse3

Команды, реализующие технологию SSE3, можно разбить на следующие подгруппы:

1. Преобразование чисел с плавающей запятой в целые числа. В эту подгруппу входит одна-единственная инструкция, которая работает на уровне арифметического сопроцессора x87 fpu.

Команда FISTTP (сохранение целочисленного значения с освобождением элемента стека x87-FP с округлением в сторону нуля). Ее поведение аналогично поведению стандартной IA-32 инструкции FISTP, но важным отличием является использование округления в сторону нуля (известного как truncate или chop) вне зависимости от того, какой способ округления выбран в данный момент в контрольном слове FPU;

2. дублирование данных. Эта подгруппа состоит из трех инструкций, первые две из которых можно считать дополнением/расширением набора инструкций SSE, а последнюю команду можно отнести к набору SSE2.

Команда MOVSLDUP — загрузка 128-разрядного значения из исходного операнда (памяти или XMM-регистра) в операнд назначения с дублированием первого и третьего 32-битных элементов:

Операнд A (128 разрядов, 4 элемента): a3 | a2 | a1 | a0 Операнд B (128 разрядов, 4 элемента): b3 | b2 | b1 | b0 MOVSLDUP A, B Результат (операнд A): b2 | b2 | b0 | b0

Команда MOVSHDUP — загрузка 128-битного значения из исходного операнда в операнд назначения с дублированием второго и четвертого 32-битных элементов:

Операнд A (128 бит, 4 элемента): a3 | a2 | a1 | a0 Операнд B (128 бит, 4 элемента): b3 | b2 | b1 | b0 MOVSHDUP A, B Результат (операнд A): b3 | b3 | b1 | b1

Команда MOVDDUP — загрузка 64-разрядного значения из памяти или исходного регистра (разряды [63-0]) с дублированием в обеих нижней и верхней частях регистра назначения:

Операнд A (128 разрядов, 2 элемента): a1 | a0 Операнд B (64 разряда, 1 элемент): b0 MOVDDUP A, B Результат (операнд A): b0 | b0;

Соседние файлы в папке 12-12-2013_11-21-32